From 0f1153555c3f01185355df569a4e0f86270a0693 Mon Sep 17 00:00:00 2001 From: aB0t Date: Tue, 24 Mar 2026 13:48:05 +0000 Subject: [PATCH] Release of v6.1.5 Fix variable name mismatch for organization in the Network Resolve class. #1291. Fix issue where Admin Field relations using custom code did not automatically include multiple fields as expected. #1293. Fix issue where Admin Field relations did not correctly apply concatenation/glue options. #1294. Refactor Compiler functions to improve maintainability and align with modern PHP coding best practices. Refactor the JCB Dashboard, introducing a modernized layout, improved usability, and full responsiveness across desktop, tablet, and mobile devices. Fix deprecated warnings triggered in the JCB CLI. Fix resolve PHP syntax errors and PHP 8.4 deprecations across codebase. Fix four fatal parse/compile errors. Fix implicit nullable parameter deprecations. --- CHANGELOG.md | 12 + ComponentbuilderInstallerScript.php | 2 +- README.md | 6 +- admin/README.txt | 6 +- admin/assets/css/dashboard.css | 275 +++--- admin/compiler/joomla_4/dashboard.css | 275 +++--- admin/compiler/joomla_4/default_main.php | 43 +- admin/compiler/joomla_4/default_vdm.php | 97 +- .../en-GB/en-GB.com_componentbuilder.ini | 3 +- admin/layouts/jcbsinglepathdownloadcli.php | 2 +- admin/layouts/socialnetworking.php | 5 +- admin/sql/install.mysql.utf8.sql | 4 +- admin/sql/updates/mysql/6_1_4.sql | 1 + admin/src/Model/AjaxModel.php | 79 +- admin/tmpl/componentbuilder/default.php | 84 +- admin/tmpl/componentbuilder/default_main.php | 43 +- admin/tmpl/componentbuilder/default_vdm.php | 87 +- changelog.xml | 18 + componentbuilder.xml | 6 +- componentbuilder_update_server.xml | 26 +- .../src/Repository/Contents.php | 2 +- .../VDM.Joomla.Gitea/src/Issue/Milestones.php | 8 +- .../VDM.Joomla.Gitea/src/Issue/Times.php | 14 +- .../src/Organization/Teams.php | 4 +- .../src/Repository/Collaborator.php | 2 +- .../src/Repository/Commits.php | 4 +- .../src/Repository/Contents.php | 2 +- .../VDM.Joomla.Gitea/src/Repository/Hooks.php | 2 - .../VDM.Joomla.Gitea/src/Repository/Pulls.php | 2 +- .../VDM.Joomla.Gitea/src/Repository/Times.php | 6 +- .../VDM.Joomla.Gitea/src/Repository/Wiki.php | 2 +- .../vendor_jcb/VDM.Joomla.Gitea/src/User.php | 2 +- .../src/Repository/Contents.php | 2 +- .../VDM.Joomla.Github/src/Repository/Wiki.php | 2 +- .../Architecture/AdminViews/ListItem.php | 261 ++++++ .../AdminViews/ListItem/ItemCode.php | 324 +++++++ .../Architecture/AdminViews/ListItem/Link.php | 259 ++++++ .../AdminViews/ListItem/LinkAuthority.php | 313 +++++++ .../AdminViews/ListItem/LinkLogic.php | 345 +++++++ .../AdminViews/ListItem/index.html | 1 + .../AdminViews/ListItemBuilder.php | 413 +++++++++ .../JoomlaFive/Dashboard/View.php | 626 +++++++++++++ .../JoomlaFive/Dashboard/index.html | 1 + .../JoomlaFour/Dashboard/View.php | 454 +++++++++ .../JoomlaFour/Dashboard/index.html | 1 + .../Architecture/JoomlaSix/Dashboard/View.php | 657 +++++++++++++ .../JoomlaSix/Dashboard/index.html | 1 + .../JoomlaThree/Dashboard/View.php | 514 ++++++++++ .../JoomlaThree/Dashboard/index.html | 1 + .../src/Componentbuilder/Compiler/Factory.php | 2 + .../Compiler/Helper/Infusion.php | 2 +- .../Compiler/Helper/Interpretation.php | 874 ++---------------- .../Architecture/Dashboard/ViewInterface.php | 30 + .../Architecture/Dashboard/index.html | 1 + .../Compiler/Library/Data.php | 2 +- .../Compiler/Model/Libraries.php | 2 +- .../Compiler/Power/Injector.php | 12 +- .../Service/ArchitectureDashboard.php | 160 ++++ .../Compiler/Service/ArchitectureView.php | 126 ++- .../Compiler/Utilities/Paths.php | 2 +- .../Fieldtype/Readme/Item.php | 2 +- .../Fieldtype/Readme/Main.php | 2 +- .../JoomlaPower/Readme/Item.php | 2 +- .../JoomlaPower/Readme/Main.php | 2 +- .../src/Componentbuilder/Network/Resolve.php | 20 +- .../Package/AdminView/Readme/Item.php | 2 +- .../Package/AdminView/Readme/Main.php | 2 +- .../Package/Component/Readme/Item.php | 2 +- .../Package/Component/Readme/Main.php | 2 +- .../Package/CustomAdminView/Readme/Item.php | 2 +- .../Package/CustomAdminView/Readme/Main.php | 2 +- .../Package/CustomCode/Readme/Item.php | 2 +- .../Package/CustomCode/Readme/Main.php | 2 +- .../Package/DynamicGet/Readme/Item.php | 2 +- .../Package/DynamicGet/Readme/Main.php | 2 +- .../Package/Field/Readme/Item.php | 2 +- .../Package/Field/Readme/Main.php | 2 +- .../Package/JoomlaModule/Readme/Item.php | 2 +- .../Package/JoomlaModule/Readme/Main.php | 2 +- .../Package/JoomlaPlugin/Readme/Item.php | 2 +- .../Package/JoomlaPlugin/Readme/Main.php | 2 +- .../Package/Layout/Readme/Item.php | 2 +- .../Package/Layout/Readme/Main.php | 2 +- .../Package/Library/Readme/Item.php | 2 +- .../Package/Library/Readme/Main.php | 2 +- .../Package/SiteView/Readme/Item.php | 2 +- .../Package/SiteView/Readme/Main.php | 2 +- .../Package/Template/Readme/Item.php | 2 +- .../Package/Template/Readme/Main.php | 2 +- .../Package/ValidationRule/Readme/Item.php | 2 +- .../Package/ValidationRule/Readme/Main.php | 2 +- .../Componentbuilder/Power/Readme/Item.php | 2 +- .../Componentbuilder/Power/Readme/Main.php | 2 +- .../Repository/Readme/Item.php | 2 +- .../Repository/Readme/Main.php | 2 +- .../Search/Database/Insert.php | 2 +- .../Componentbuilder/Search/Database/Load.php | 6 +- .../Search/Interfaces/InsertInterface.php | 2 +- .../Search/Interfaces/LoadInterface.php | 6 +- .../Componentbuilder/Snippet/Readme/Item.php | 2 +- .../Componentbuilder/Snippet/Readme/Main.php | 2 +- .../src/Interfaces/File/HandlerInterface.php | 2 +- .../Git/Repository/ContentsInterface.php | 2 +- .../Git/Repository/WikiInterface.php | 2 +- media/js/admin_fields_relations.js | 299 ++++-- 105 files changed, 5576 insertions(+), 1349 deletions(-) create mode 100644 admin/sql/updates/mysql/6_1_4.sql create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/ItemCode.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/Link.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/LinkAuthority.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/LinkLogic.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItemBuilder.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Dashboard/View.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Dashboard/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Dashboard/View.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Dashboard/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaSix/Dashboard/View.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaSix/Dashboard/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Dashboard/View.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Dashboard/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Dashboard/ViewInterface.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Dashboard/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureDashboard.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 86563cba0..eba6b5c1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +# v6.1.5 + +- Fix variable name mismatch for organization in the Network Resolve class. #1291 +- Fix issue where Admin Field relations using custom code did not automatically include multiple fields as expected. #1293 +- Fix issue where Admin Field relations did not correctly apply concatenation/glue options. #1294 +- Refactor Compiler functions to improve maintainability and align with modern PHP coding best practices. +- Refactor the JCB Dashboard, introducing a modernized layout, improved usability, and full responsiveness across desktop, tablet, and mobile devices. +- Fix deprecated warnings triggered in the JCB CLI. +- Fix resolve PHP syntax errors and PHP 8.4 deprecations across codebase. +- Fix four fatal parse/compile errors. +- Fix implicit nullable parameter deprecations. + # v6.1.4 - Fix the linked [new] button to use the correct init_default params. diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php index fd812b0e2..b64cf8c9b 100644 --- a/ComponentbuilderInstallerScript.php +++ b/ComponentbuilderInstallerScript.php @@ -3293,7 +3293,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface echo '
-

Upgrade to Version 6.1.4 Was Successful! Let us know if anything is not working as expected.

'; +

Upgrade to Version 6.1.5 Was Successful! Let us know if anything is not working as expected.

'; // Add/Update component in the action logs extensions table. $this->setActionLogsExtensions(); diff --git a/README.md b/README.md index 014b0642c..b44842487 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This is a professional-grade [Joomla 6.x](https://extensions.joomla.org/extensio JCB generates native Joomla components, plugins, and modules for Joomla 3.x, 4.x, and 5.x - and is already prepared for Joomla 6. Every compiled project is tailored for the specific version without needing backward compatibility plugins. With integrated version-aware compiling, smart boilerplating, and Git-powered project syncing, JCB is much more than a code generator-it's a **full-stack development pipeline for Joomla extensions**. -You can install this component easily. The latest release (**6.1.4**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. +You can install this component easily. The latest release (**6.1.5**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. Upgrades are seamless through Joomla's built-in extension update mechanism. @@ -196,9 +196,9 @@ JCB is developed by developers for developers. Its purpose is to democratize hig * **Company:** [Vast Development Method](https://dev.vdm.io) * **Author:** [Llewellyn van der Merwe](mailto:joomla@vdm.io) * **Component:** [Component Builder](https://git.vdm.dev/joomla/Component-Builder) -* **Created:** 30th April, 2015 · **Last Build:** 18th February, 2026 · **Version:** 6.1.4 +* **Created:** 30th April, 2015 · **Last Build:** 24th March, 2026 · **Version:** 6.1.5 * **License:** GNU General Public License version 2 or later; see LICENSE.txt · **Copyright:** Copyright (C) 2015 Vast Development Method. All rights reserved. -* **Lines:** 1337111 · **Fields:** 2129 · **Files:** 8792 · **Folders:** 804 +* **Lines:** 1347496 · **Fields:** 2129 · **Files:** 8831 · **Folders:** 810 > Generated with [JCB](https://www.joomlacomponentbuilder.com) — The Smartest Way to Build Joomla Extensions. diff --git a/admin/README.txt b/admin/README.txt index 014b0642c..b44842487 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -9,7 +9,7 @@ This is a professional-grade [Joomla 6.x](https://extensions.joomla.org/extensio JCB generates native Joomla components, plugins, and modules for Joomla 3.x, 4.x, and 5.x - and is already prepared for Joomla 6. Every compiled project is tailored for the specific version without needing backward compatibility plugins. With integrated version-aware compiling, smart boilerplating, and Git-powered project syncing, JCB is much more than a code generator-it's a **full-stack development pipeline for Joomla extensions**. -You can install this component easily. The latest release (**6.1.4**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. +You can install this component easily. The latest release (**6.1.5**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. Upgrades are seamless through Joomla's built-in extension update mechanism. @@ -196,9 +196,9 @@ JCB is developed by developers for developers. Its purpose is to democratize hig * **Company:** [Vast Development Method](https://dev.vdm.io) * **Author:** [Llewellyn van der Merwe](mailto:joomla@vdm.io) * **Component:** [Component Builder](https://git.vdm.dev/joomla/Component-Builder) -* **Created:** 30th April, 2015 · **Last Build:** 18th February, 2026 · **Version:** 6.1.4 +* **Created:** 30th April, 2015 · **Last Build:** 24th March, 2026 · **Version:** 6.1.5 * **License:** GNU General Public License version 2 or later; see LICENSE.txt · **Copyright:** Copyright (C) 2015 Vast Development Method. All rights reserved. -* **Lines:** 1337111 · **Fields:** 2129 · **Files:** 8792 · **Folders:** 804 +* **Lines:** 1347496 · **Fields:** 2129 · **Files:** 8831 · **Folders:** 810 > Generated with [JCB](https://www.joomlacomponentbuilder.com) — The Smartest Way to Build Joomla Extensions. diff --git a/admin/assets/css/dashboard.css b/admin/assets/css/dashboard.css index 3b92116c7..cd9a47bde 100644 --- a/admin/assets/css/dashboard.css +++ b/admin/assets/css/dashboard.css @@ -8,156 +8,207 @@ * @license GNU General Public License version 2 or later; see LICENSE.txt */ -/* CSS Document */ +/* Dashboard icon grid */ -.dashboard-container { - margin-left: 10px; - margin-top: 10px; +.dashboard-icons { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1.25rem; width: 100%; + margin: 0; + padding: 0; } -.dashboard-container [class*="span"] { + +.dashboard-icon-item { + min-width: 0; +} + +.dashboard-icon-link { + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + gap: 1rem; + height: 100%; + min-height: 220px; + padding: 1.5rem 1.25rem; + border: 1px solid var(--border-color, #dfe3e7); + border-radius: 0.75rem; + background: var(--body-bg, #fff); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); + color: var(--body-color, #1f2d3d); + text-align: center; + text-decoration: none; + transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; +} + +.dashboard-icon-link:hover, +.dashboard-icon-link:focus, +.dashboard-icon-link:focus-visible { + color: var(--link-color, #0d6efd); + text-decoration: none; + border-color: var(--link-color, #0d6efd); + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.08); + transform: translateY(-2px); + outline: none; +} + +.dashboard-icon-image { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + min-height: 110px; +} + +.dashboard-icon-image img { display: block; - float: none; - margin-left: 0; + max-width: 96px; + max-height: 96px; width: auto; + height: auto; + margin: 0 auto; + object-fit: contain; } -.dashboard-container:before, .dashboard-container:after { - content: ""; - display: table; -} -.dashboard-container:after { - clear: both; -} -.dashboard-container [class*="span"] { - box-sizing: border-box; + +.dashboard-icon-title { display: block; - float: left; - min-height: 145px; - min-width: 96px; width: 100%; + font-size: 1.05rem; + font-weight: 500; + line-height: 1.4; + word-break: break-word; + overflow-wrap: anywhere; } -.dashboard-container [class*="span"]:first-child { - margin-left: 0; -} -.dashboard-wraper { - background: none repeat scroll 0 0 hsl(0, 0%, 93%); - border-radius: 5px; - float: left; - margin: 1%; - padding: 3px; - width: 17%; - min-height: 194px; - min-width: 96px; -} -.dashboard-content a { - background: linear-gradient(to bottom, hsl(0, 0%, 100%) 0%, hsl(0, 0%, 96%) 47%, hsl(0, 0%, 93%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - border: 1px solid hsl(0, 0%, 85%); - border-radius: 4px; - box-shadow: 0 0 3px hsla(0, 0%, 0%, 0.1) inset; - color: hsl(0, 0%, 20%); - display: block; - min-height: 89px; - padding: 10px; - text-align: center; - text-decoration: none; -} -.dashboard-content a:hover { - background: linear-gradient(to bottom, hsl(0, 0%, 90%) 0%, hsl(0, 0%, 100%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - color: hsl(200, 100%, 30%); - text-decoration: none; -} -.dashboard-title { - display: block; - padding-top: 5px; -} + +/* Optional info blocks if still used elsewhere */ .dashboard-info { - background: linear-gradient(to bottom, hsl(0, 0%, 100%) 0%, hsl(0, 0%, 96%) 47%, hsl(0, 0%, 93%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - border: 1px solid hsl(0, 0%, 85%); - border-radius: 4px; - box-shadow: 0 0 3px hsla(0, 0%, 0%, 0.1) inset; - color: hsl(0, 0%, 20%); display: block; - font-size: 12px; - padding: 10px; + padding: 1rem 1.25rem; + border: 1px solid var(--border-color, #dfe3e7); + border-radius: 0.75rem; + background: var(--body-bg, #fff); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); + color: var(--body-color, #1f2d3d); text-align: center; } + .dashboard-info span { display: block; text-align: center; } + .dashboard-info img { - margin: 0 auto; -} -.dashboard-table { - border-top: 1px solid hsl(0, 0%, 87%); - margin-top: 5px; - width: 100%; -} -.dashboard-info h5 { - font-size: 11px; - font-weight: bold; + display: block; + margin: 0 auto 0.75rem; + max-width: 100%; + height: auto; } + +/* Legacy blocks modernized slightly, if still used */ .dashboard-block { - background: linear-gradient(to bottom, hsl(0, 0%, 95%) 0%, hsl(0, 0%, 86%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - border: 1px solid hsl(0, 0%, 76%); - border-radius: 3px; - box-shadow: 0 1px 0 hsl(0, 0%, 98%) inset; - margin-bottom: 20px; + margin-bottom: 1.5rem; + border: 1px solid var(--border-color, #dfe3e7); + border-radius: 0.75rem; + background: var(--body-bg, #fff); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); + overflow: hidden; } + .dashboard-block .dashboard-block-head { - background: linear-gradient(to bottom, hsl(0, 0%, 95%) 0%, hsl(0, 0%, 86%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - border-bottom: 1px solid hsl(0, 0%, 76%); - border-radius: 3px 3px 0 0; - box-shadow: 0 1px 0 hsl(0, 0%, 98%) inset, 0 0 3px hsl(0, 0%, 87%); - height: 40px; + display: flex; + align-items: center; + min-height: 3rem; + padding: 0.75rem 1rem; + border-bottom: 1px solid var(--border-color, #dfe3e7); + background: var(--secondary-bg, #f8f9fa); position: relative; } + .dashboard-block .dashboard-block-head h5 { - font-size: 12px; margin: 0; - padding-left: 10px; - padding-top: 11px; + font-size: 0.95rem; + font-weight: 600; text-transform: uppercase; + letter-spacing: 0.02em; } + .dashboard-block .dashboard-block-content { - background: none repeat scroll 0 0 hsl(0, 0%, 93%); - border-radius: 0 0 3px 3px; + padding: 1rem; + background: var(--body-bg, #fff); } + .dashboard-block .dashboard-block-box { - background: none repeat scroll 0 0 hsl(0, 0%, 100%); - border-top: 1px solid hsl(0, 0%, 82%); - box-shadow: 0 0 5px hsl(0, 0%, 87%) inset; + background: transparent; + border-top: 1px solid var(--border-color, #dfe3e7); + box-shadow: none; } -.dashboard-block .dashboard-block-content .dashboard-block-box { - margin-top: 0 !important; -} -.dashboard-block .dashboard-block-content .dashboard-block-box .dashboard-block-table { - margin-bottom: 0 !important; -} -.dashboard-block-table { - background-color: hsla(0, 0%, 0%, 0); + +.dashboard-block-table, +.dashboard-table { + width: 100%; border-collapse: collapse; border-spacing: 0; - margin-bottom: 20px; - max-width: 100%; - width: 100%; } -.dashboard-block-table th, .dashboard-block-table td { - border-top: 1px solid hsl(0, 0%, 87%); - line-height: 20px; - padding: 5px; + +.dashboard-block-table th, +.dashboard-block-table td, +.dashboard-table th, +.dashboard-table td { + padding: 0.65rem 0.75rem; + border-top: 1px solid var(--border-color, #e5e7eb); text-align: left; vertical-align: middle; } + .dashboard-badge { - background-color: hsl(0, 0%, 60%); - border-radius: 9px; - color: hsl(0, 0%, 100%); - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - padding: 1px 9px 2px; - text-shadow: 0 -1px 0 hsla(0, 0%, 0%, 0.25); - vertical-align: baseline; + display: inline-block; + padding: 0.2rem 0.6rem; + border-radius: 999px; + background-color: #6c757d; + color: #fff; + font-size: 0.75rem; + font-weight: 600; + line-height: 1.4; white-space: nowrap; +} + +/* Responsive refinements */ +@media (max-width: 991.98px) { + .dashboard-icons { + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 1rem; + } + + .dashboard-icon-link { + min-height: 200px; + padding: 1.25rem 1rem; + } +} + +@media (max-width: 575.98px) { + .dashboard-icons { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.875rem; + } + + .dashboard-icon-link { + min-height: 180px; + padding: 1rem 0.875rem; + border-radius: 0.625rem; + } + + .dashboard-icon-image { + min-height: 84px; + } + + .dashboard-icon-image img { + max-width: 72px; + max-height: 72px; + } + + .dashboard-icon-title { + font-size: 0.95rem; + line-height: 1.3; + } } \ No newline at end of file diff --git a/admin/compiler/joomla_4/dashboard.css b/admin/compiler/joomla_4/dashboard.css index 6502707ff..3ec354bb1 100644 --- a/admin/compiler/joomla_4/dashboard.css +++ b/admin/compiler/joomla_4/dashboard.css @@ -1,155 +1,206 @@ ###BOM### -/* CSS Document */ +/* Dashboard icon grid */ -.dashboard-container { - margin-left: 10px; - margin-top: 10px; +.dashboard-icons { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 1.25rem; width: 100%; + margin: 0; + padding: 0; } -.dashboard-container [class*="span"] { + +.dashboard-icon-item { + min-width: 0; +} + +.dashboard-icon-link { + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + gap: 1rem; + height: 100%; + min-height: 220px; + padding: 1.5rem 1.25rem; + border: 1px solid var(--border-color, #dfe3e7); + border-radius: 0.75rem; + background: var(--body-bg, #fff); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); + color: var(--body-color, #1f2d3d); + text-align: center; + text-decoration: none; + transition: transform 0.15s ease, box-shadow 0.15s ease, border-color 0.15s ease; +} + +.dashboard-icon-link:hover, +.dashboard-icon-link:focus, +.dashboard-icon-link:focus-visible { + color: var(--link-color, #0d6efd); + text-decoration: none; + border-color: var(--link-color, #0d6efd); + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.08); + transform: translateY(-2px); + outline: none; +} + +.dashboard-icon-image { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + min-height: 110px; +} + +.dashboard-icon-image img { display: block; - float: none; - margin-left: 0; + max-width: 96px; + max-height: 96px; width: auto; + height: auto; + margin: 0 auto; + object-fit: contain; } -.dashboard-container:before, .dashboard-container:after { - content: ""; - display: table; -} -.dashboard-container:after { - clear: both; -} -.dashboard-container [class*="span"] { - box-sizing: border-box; + +.dashboard-icon-title { display: block; - float: left; - min-height: 145px; - min-width: 96px; width: 100%; + font-size: 1.05rem; + font-weight: 500; + line-height: 1.4; + word-break: break-word; + overflow-wrap: anywhere; } -.dashboard-container [class*="span"]:first-child { - margin-left: 0; -} -.dashboard-wraper { - background: none repeat scroll 0 0 hsl(0, 0%, 93%); - border-radius: 5px; - float: left; - margin: 1%; - padding: 3px; - width: 17%; - min-height: 194px; - min-width: 96px; -} -.dashboard-content a { - background: linear-gradient(to bottom, hsl(0, 0%, 100%) 0%, hsl(0, 0%, 96%) 47%, hsl(0, 0%, 93%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - border: 1px solid hsl(0, 0%, 85%); - border-radius: 4px; - box-shadow: 0 0 3px hsla(0, 0%, 0%, 0.1) inset; - color: hsl(0, 0%, 20%); - display: block; - min-height: 89px; - padding: 10px; - text-align: center; - text-decoration: none; -} -.dashboard-content a:hover { - background: linear-gradient(to bottom, hsl(0, 0%, 90%) 0%, hsl(0, 0%, 100%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - color: hsl(200, 100%, 30%); - text-decoration: none; -} -.dashboard-title { - display: block; - padding-top: 5px; -} + +/* Optional info blocks if still used elsewhere */ .dashboard-info { - background: linear-gradient(to bottom, hsl(0, 0%, 100%) 0%, hsl(0, 0%, 96%) 47%, hsl(0, 0%, 93%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - border: 1px solid hsl(0, 0%, 85%); - border-radius: 4px; - box-shadow: 0 0 3px hsla(0, 0%, 0%, 0.1) inset; - color: hsl(0, 0%, 20%); display: block; - font-size: 12px; - padding: 10px; + padding: 1rem 1.25rem; + border: 1px solid var(--border-color, #dfe3e7); + border-radius: 0.75rem; + background: var(--body-bg, #fff); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); + color: var(--body-color, #1f2d3d); text-align: center; } + .dashboard-info span { display: block; text-align: center; } + .dashboard-info img { - margin: 0 auto; -} -.dashboard-table { - border-top: 1px solid hsl(0, 0%, 87%); - margin-top: 5px; - width: 100%; -} -.dashboard-info h5 { - font-size: 11px; - font-weight: bold; + display: block; + margin: 0 auto 0.75rem; + max-width: 100%; + height: auto; } + +/* Legacy blocks modernized slightly, if still used */ .dashboard-block { - background: linear-gradient(to bottom, hsl(0, 0%, 95%) 0%, hsl(0, 0%, 86%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - border: 1px solid hsl(0, 0%, 76%); - border-radius: 3px; - box-shadow: 0 1px 0 hsl(0, 0%, 98%) inset; - margin-bottom: 20px; + margin-bottom: 1.5rem; + border: 1px solid var(--border-color, #dfe3e7); + border-radius: 0.75rem; + background: var(--body-bg, #fff); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04); + overflow: hidden; } + .dashboard-block .dashboard-block-head { - background: linear-gradient(to bottom, hsl(0, 0%, 95%) 0%, hsl(0, 0%, 86%) 100%) repeat scroll 0 0 hsla(0, 0%, 0%, 0); - border-bottom: 1px solid hsl(0, 0%, 76%); - border-radius: 3px 3px 0 0; - box-shadow: 0 1px 0 hsl(0, 0%, 98%) inset, 0 0 3px hsl(0, 0%, 87%); - height: 40px; + display: flex; + align-items: center; + min-height: 3rem; + padding: 0.75rem 1rem; + border-bottom: 1px solid var(--border-color, #dfe3e7); + background: var(--secondary-bg, #f8f9fa); position: relative; } + .dashboard-block .dashboard-block-head h5 { - font-size: 12px; margin: 0; - padding-left: 10px; - padding-top: 11px; + font-size: 0.95rem; + font-weight: 600; text-transform: uppercase; + letter-spacing: 0.02em; } + .dashboard-block .dashboard-block-content { - background: none repeat scroll 0 0 hsl(0, 0%, 93%); - border-radius: 0 0 3px 3px; + padding: 1rem; + background: var(--body-bg, #fff); } + .dashboard-block .dashboard-block-box { - background: none repeat scroll 0 0 hsl(0, 0%, 100%); - border-top: 1px solid hsl(0, 0%, 82%); - box-shadow: 0 0 5px hsl(0, 0%, 87%) inset; + background: transparent; + border-top: 1px solid var(--border-color, #dfe3e7); + box-shadow: none; } -.dashboard-block .dashboard-block-content .dashboard-block-box { - margin-top: 0 !important; -} -.dashboard-block .dashboard-block-content .dashboard-block-box .dashboard-block-table { - margin-bottom: 0 !important; -} -.dashboard-block-table { - background-color: hsla(0, 0%, 0%, 0); + +.dashboard-block-table, +.dashboard-table { + width: 100%; border-collapse: collapse; border-spacing: 0; - margin-bottom: 20px; - max-width: 100%; - width: 100%; } -.dashboard-block-table th, .dashboard-block-table td { - border-top: 1px solid hsl(0, 0%, 87%); - line-height: 20px; - padding: 5px; + +.dashboard-block-table th, +.dashboard-block-table td, +.dashboard-table th, +.dashboard-table td { + padding: 0.65rem 0.75rem; + border-top: 1px solid var(--border-color, #e5e7eb); text-align: left; vertical-align: middle; } + .dashboard-badge { - background-color: hsl(0, 0%, 60%); - border-radius: 9px; - color: hsl(0, 0%, 100%); - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - padding: 1px 9px 2px; - text-shadow: 0 -1px 0 hsla(0, 0%, 0%, 0.25); - vertical-align: baseline; + display: inline-block; + padding: 0.2rem 0.6rem; + border-radius: 999px; + background-color: #6c757d; + color: #fff; + font-size: 0.75rem; + font-weight: 600; + line-height: 1.4; white-space: nowrap; +} + +/* Responsive refinements */ +@media (max-width: 991.98px) { + .dashboard-icons { + grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); + gap: 1rem; + } + + .dashboard-icon-link { + min-height: 200px; + padding: 1.25rem 1rem; + } +} + +@media (max-width: 575.98px) { + .dashboard-icons { + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0.875rem; + } + + .dashboard-icon-link { + min-height: 180px; + padding: 1rem 0.875rem; + border-radius: 0.625rem; + } + + .dashboard-icon-image { + min-height: 84px; + } + + .dashboard-icon-image img { + max-width: 72px; + max-height: 72px; + } + + .dashboard-icon-title { + font-size: 0.95rem; + line-height: 1.3; + } } \ No newline at end of file diff --git a/admin/compiler/joomla_4/default_main.php b/admin/compiler/joomla_4/default_main.php index ccb947490..8edab7236 100644 --- a/admin/compiler/joomla_4/default_main.php +++ b/admin/compiler/joomla_4/default_main.php @@ -20,18 +20,33 @@ use Joomla\CMS\Language\Text; defined('_JEXEC') or die; ?> -icons['main']) && is_array($this->icons['main'])) :?> - icons['main'] as $icon): ?> -
- -
- -
- -

+icons['main']) && is_array($this->icons['main']) && !empty($this->icons['main'])) : ?> +
+ icons['main'] as $icon) : ?> + + +
+ +
+

+ +

+
+ +
+
\ No newline at end of file diff --git a/admin/compiler/joomla_4/default_vdm.php b/admin/compiler/joomla_4/default_vdm.php index 22989e03c..3944206b3 100644 --- a/admin/compiler/joomla_4/default_vdm.php +++ b/admin/compiler/joomla_4/default_vdm.php @@ -1,12 +1,12 @@ - * @git Joomla Component Builder + * @created 4th September 2022 + * @author Llewellyn van der Merwe + * @git Joomla Component Builder * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. - * @license GNU General Public License version 2 or later; see LICENSE.txt + * @license GNU General Public License version 2 or later; see LICENSE.txt */ // No direct access to this JCB template file (EVER) @@ -20,26 +20,69 @@ use Joomla\CMS\Language\Text; defined('_JEXEC') or die; ?> -<?php echo Joomla___ba6326ef_cb79_4348_80f4_ab086082e3c5___Power::_('COM_###COMPONENT###'); ?> - -
-contributors)): ?> - contributors) > 1): ?> -

- -

- -
    - contributors as $contributor): ?> -
  • :
  • - +
    +
    + <?php echo Joomla___ba6326ef_cb79_4348_80f4_ab086082e3c5___Power::_('COM_###COMPONENT###'); ?> +
    + -
    - \ No newline at end of file + contributors)) : ?> +
    +

    + contributors) > 1) : ?> + + + + +

    +
      + contributors as $contributor) : ?> +
    • + : + +
    • + +
    +
    + +
    \ No newline at end of file diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index f1f4d354b..36b8dfea5 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -1338,6 +1338,7 @@ COM_COMPONENTBUILDER_BUILD="Build" COM_COMPONENTBUILDER_BUILDIN="Build-in" COM_COMPONENTBUILDER_BUILD_DATE="Build Date" COM_COMPONENTBUILDER_BUILD_INNOVATE_AND_THRIVE_WITH_LLEWELLYN_ON_GITHUB_TURNING_IDEAS_INTO_IMPACT="Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!" +COM_COMPONENTBUILDER_BUILD_PREMIUM_JOOMLA_EXTENSIONS_WITH_JOOMENGINE_ON_GITHUB_HELP_US_RAISE_JOOMLA_EXTENSION_STANDARDS="Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!" COM_COMPONENTBUILDER_BUTTON_TO_CREATE_S_WILL_SHOW_ONCE_S_IS_SAVED_FOR_THE_FIRST_TIME="Button to create %s will show once %s is saved for the first time." COM_COMPONENTBUILDER_BYOU_CAN_CHANGE_THIS_PERCENTAGE_OF_TRANSLATED_STRINGS_REQUIRED_IN_THE_GLOBAL_OPTIONS_OF_JCBBBR_PLEASE_WATCH_THIS_A_HREFSTUTORIAL_FOR_MORE_HELP_SURROUNDING_THE_JCB_TRANSLATIONS_MANAGERA="You can change this percentage of translated strings required in the global options of JCB.
    Please watch this tutorial for more help surrounding the JCB translations manager." COM_COMPONENTBUILDER_BY_DONATING_TO_JCB_YOU_JOIN_A_COMMUNITY_OF_FORWARDTHINKING_DEVELOPERS_INVESTING_IN_THE_FUTURE_OF_OPENSOURCE_SOFTWARE="By donating to JCB, you join a community of forward-thinking developers investing in the future of open-source software." @@ -5604,6 +5605,7 @@ COM_COMPONENTBUILDER_JOIN_LLEWELLYN_AND_THE_COMMUNITY_ON_TELEGRAM_BUILDING_JOOML COM_COMPONENTBUILDER_JOIN_LLEWELLYN_ON_THE_JOOMLA_VOLUNTEER_PORTAL_SHAPING_THE_FUTURE_TOGETHER="Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!" COM_COMPONENTBUILDER_JOIN_THE_CONVERSATION_WITH_LLEWELLYN_ON_X_WHERE_IDEAS_TAKE_FLIGHT="Join the Conversation with Llewellyn on X: Where Ideas Take Flight!" COM_COMPONENTBUILDER_JOIN_TYPE="Join Type" +COM_COMPONENTBUILDER_JOOMENGINE_ON_DOCKER_CONTAINERIZE_YOUR_CREATIVITY="JoomEngine on Docker: Containerize Your Creativity!" COM_COMPONENTBUILDER_JOOMLA_COMPONENT="Joomla Component" COM_COMPONENTBUILDER_JOOMLA_COMPONENTS="Joomla Components" COM_COMPONENTBUILDER_JOOMLA_COMPONENTS_ACCESS="Joomla Components Access" @@ -7680,7 +7682,6 @@ COM_COMPONENTBUILDER_LINK_LOCAL_DYNAMIC="Link & Local (dynamic)" COM_COMPONENTBUILDER_LIST_FIELD="List Field" COM_COMPONENTBUILDER_LIST_VIEW="List View" COM_COMPONENTBUILDER_LLEWELLYNS_JOOMLA_SOCIAL_FEED="Llewellyn's Joomla! Social Feed" -COM_COMPONENTBUILDER_LLEWELLYN_ON_DOCKER_CONTAINERIZE_YOUR_CREATIVITY="Llewellyn on Docker: Containerize Your Creativity!" COM_COMPONENTBUILDER_LOADING_THE_PRIVATE_KEY_FILE_FAILED="Loading the private key file failed" COM_COMPONENTBUILDER_LOADING_THE_PRIVATE_KEY_TEXT_FAILED="Loading the private key text failed" COM_COMPONENTBUILDER_LOAD_ITEMS_FROM_THIS_S_REPOSITORY="Load items from this (%s) repository" diff --git a/admin/layouts/jcbsinglepathdownloadcli.php b/admin/layouts/jcbsinglepathdownloadcli.php index cbf69d537..1f84e2246 100644 --- a/admin/layouts/jcbsinglepathdownloadcli.php +++ b/admin/layouts/jcbsinglepathdownloadcli.php @@ -67,7 +67,7 @@ else /** * Error case */ - $lines[] = Text::_('COM_COMPONENTBUILDER_ERROR_THE_EXTENSION_WAS_NOT_COMPILED') + $lines[] = Text::_('COM_COMPONENTBUILDER_ERROR_THE_EXTENSION_WAS_NOT_COMPILED'); } ?> diff --git a/admin/layouts/socialnetworking.php b/admin/layouts/socialnetworking.php index e44cdad1b..6b79930b8 100644 --- a/admin/layouts/socialnetworking.php +++ b/admin/layouts/socialnetworking.php @@ -27,6 +27,9 @@ defined('JPATH_BASE') or die; + + + @@ -51,7 +54,7 @@ defined('JPATH_BASE') or die; - + diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index f9c349790..a1f4be985 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -2312,7 +2312,7 @@ INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `t (1230, '4d9c5f48-4ed4-485a-9d9a-f31212ddb135', 'VDM.File.Definition', 'Definition', 'final class', 'File Definition Class\r\n\r\nThis class represents a **single physical file** on disk and exposes\r\na consistent and immutable API for downstream usage.\r\n\r\nIt is not:\r\n- a database record\r\n- a file manager\r\n- a transport layer\r\n\r\nIt **is**:\r\n- a file identity\r\n- a metadata container\r\n- a filesystem reference\r\n\r\nInstances of this class are constructed exclusively from upload\r\nresults produced by the File Agent class.\r\n\r\n@since 5.1.4', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"3b7cd7fc-3e7c-4eaf-b156-7eb3ea744952\"}', '', '[[[NamespacePrefix]]]\\Joomla\\File.Definition', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"f11dc790-713e-4706-9a85-a318ed3ad56e\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIE9yaWdpbmFsIGNsaWVudCBmaWxlbmFtZS4NCgkgKg0KCSAqIFRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgYXMgc3VibWl0dGVkIGJ5IHRoZSBicm93c2VyLg0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJG5hbWU7DQoNCgkvKioNCgkgKiBTZXJ2ZXItc2lkZSBmaWxlbmFtZS4NCgkgKg0KCSAqIFRoaXMgaXMgdGhlIG5hbWUgdXNlZCBmb3Igc3RvcmFnZSBvbiBkaXNrIGFuZCBtYXkgY29udGFpbg0KCSAqIGEgcmFuZG9tIHByZWZpeC4NCgkgKg0KCSAqIEB2YXIgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjQNCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRmaWxlX25hbWU7DQoNCgkvKioNCgkgKiBSYW5kb20gZnJhZ21lbnQgaW5qZWN0ZWQgZHVyaW5nIHVwbG9hZCAoaWYgYW55KS4NCgkgKg0KCSAqIFRoaXMgdmFsdWUgaXMgcmV0YWluZWQgdG8gZXhwb3NlIG5hbWluZyBiZWhhdmlvdXIgZXhwbGljaXRseSB0byBjYWxsZXJzLg0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJHJhbmRvbTsNCg0KCS8qKg0KCSAqIEZpbGUgZXh0ZW5zaW9uICh3aXRob3V0IGRvdCkuDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkZXh0ZW5zaW9uOw0KDQoJLyoqDQoJICogRmlsZSBzaXplIGluIGJ5dGVzLg0KCSAqDQoJICogQHZhciAgIGludA0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBpbnQgJHNpemU7DQoNCgkvKioNCgkgKiBSZXNvbHZlZCBNSU1FIHR5cGUuDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkbWltZTsNCg0KCS8qKg0KCSAqIEFic29sdXRlIGZpbGVzeXN0ZW0gcGF0aC4NCgkgKg0KCSAqIEB2YXIgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjQNCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRmaWxlX3BhdGg7DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3QgYSBuZXcgRmlsZSBvYmplY3QuDQoJICoNCgkgKiBUaGUgYCRkZXRhaWxzYCBhcnJheSBtdXN0IHJlcHJlc2VudCBhIGZ1bGx5IHVwbG9hZGVkIGFuZA0KCSAqIHdyaXR0ZW4gZmlsZSBhcyBwcm9kdWNlZCBieSB0aGUgSGFuZGxlciBjbGFzcy4NCgkgKg0KCSAqIFJlcXVpcmVkIGtleXM6DQoJICogLSBuYW1lDQoJICogLSBmaWxlX25hbWUNCgkgKiAtIGZ1bGxfcGF0aA0KCSAqDQoJICogT3B0aW9uYWwga2V5czoNCgkgKiAtIHJhbmRvbQ0KCSAqIC0gZXh0ZW5zaW9uDQoJICogLSBzaXplDQoJICogLSBtaW1lDQoJICoNCgkgKiBAcGFyYW0gIGFycmF5ICAkZGV0YWlscyAgVXBsb2FkIGRldGFpbCBtYXAuDQoJICoNCgkgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gIElmIHJlcXVpcmVkIGZpZWxkcyBhcmUgbWlzc2luZy4NCgkgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uICAgICAgICAgIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0IG9uIGRpc2suDQoJICoNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRkZXRhaWxzKQ0KCXsNCgkJZm9yZWFjaCAoWyduYW1lJywnZmlsZV9uYW1lJywnZnVsbF9wYXRoJ10gYXMgJGtleSkNCgkJew0KCQkJaWYgKGVtcHR5KCRkZXRhaWxzWyRrZXldKSkNCgkJCXsNCgkJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiRmlsZSBvYmplY3QgbWlzc2luZyByZXF1aXJlZCBrZXk6IHska2V5fSIpOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKCFpc19maWxlKCRkZXRhaWxzWydmdWxsX3BhdGgnXSkpDQoJCXsNCgkJCXRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiRmlsZSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrOiB7JGRldGFpbHNbJ2Z1bGxfcGF0aCddfSIpOw0KCQl9DQoNCgkJJHRoaXMtPm5hbWUgICAgICA9IChzdHJpbmcpICRkZXRhaWxzWyduYW1lJ107DQoJCSR0aGlzLT5maWxlX25hbWUgPSAoc3RyaW5nKSAkZGV0YWlsc1snZmlsZV9uYW1lJ107DQoJCSR0aGlzLT5maWxlX3BhdGggPSAoc3RyaW5nKSAkZGV0YWlsc1snZnVsbF9wYXRoJ107DQoJCSR0aGlzLT5yYW5kb20gICAgPSAoc3RyaW5nKSAoJGRldGFpbHNbJ3JhbmRvbSddID8/ICcnKTsNCg0KCQkvLyBOb3JtYWxpemUgZXh0ZW5zaW9uIGZyb20gcGF0aCBpZiBtaXNzaW5nDQoJCSR0aGlzLT5leHRlbnNpb24gPSAoc3RyaW5nKSAoJGRldGFpbHNbJ2V4dGVuc2lvbiddID8/IE1pbWVIZWxwZXI6OmV4dGVuc2lvbigkdGhpcy0+ZmlsZV9wYXRoKSk7DQoNCgkJLy8gRW5mb3JjZSByZWFsIGZpbGUgdmFsdWVzIGlmIG9taXR0ZWQNCgkJJHRoaXMtPnNpemUgPSAoaW50KSAoJGRldGFpbHNbJ3NpemUnXSA/PyBmaWxlc2l6ZSgkdGhpcy0+ZmlsZV9wYXRoKSk7DQoJCSR0aGlzLT5taW1lID0gKHN0cmluZykgKCRkZXRhaWxzWydtaW1lJ10gPz8gTWltZUhlbHBlcjo6bWltZVR5cGUoJHRoaXMtPmZpbGVfcGF0aCkpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBvcmlnaW5hbCBjbGllbnQgZmlsZW5hbWUuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+bmFtZTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgZmlsZXN5c3RlbSBmaWxlbmFtZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmaWxlTmFtZSgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+ZmlsZV9uYW1lOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBmaWxlIGV4dGVuc2lvbi4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBleHRlbnNpb24oKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPmV4dGVuc2lvbjsNCgl9DQoNCgkvKioNCgkgKiBHZXQgcmFuZG9tIG5hbWluZyBmcmFnbWVudCAoaWYgdXNlZCkuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gcmFuZG9tKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5yYW5kb207DQoJfQ0KDQoJLyoqDQoJICogR2V0IGZpbGUgc2l6ZSAoYnl0ZXMpLg0KCSAqDQoJICogQHJldHVybiBpbnQNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNpemUoKTogaW50DQoJew0KCQlyZXR1cm4gJHRoaXMtPnNpemU7DQoJfQ0KDQoJLyoqDQoJICogR2V0IE1JTUUgdHlwZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBtaW1lKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5taW1lOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBhYnNvbHV0ZSBmaWxlIHBhdGguDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZmlsZVBhdGgoKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPmZpbGVfcGF0aDsNCgl9DQoNCgkvKioNCgkgKiBFeHBvcnQgZmlsZSBpbmZvcm1hdGlvbiBhcyBhcnJheS4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXk8c3RyaW5nLG1peGVkPg0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpOiBhcnJheQ0KCXsNCgkJcmV0dXJuIFsNCgkJCSduYW1lJyAgICAgID0+ICR0aGlzLT5uYW1lLA0KCQkJJ2ZpbGVfbmFtZScgPT4gJHRoaXMtPmZpbGVfbmFtZSwNCgkJCSdmaWxlX3BhdGgnID0+ICR0aGlzLT5maWxlX3BhdGgsDQoJCQkncmFuZG9tJyAgICA9PiAkdGhpcy0+cmFuZG9tLA0KCQkJJ2V4dGVuc2lvbicgPT4gJHRoaXMtPmV4dGVuc2lvbiwNCgkJCSdzaXplJyAgICAgID0+ICR0aGlzLT5zaXplLA0KCQkJJ21pbWUnICAgICAgPT4gJHRoaXMtPm1pbWUNCgkJXTsNCgl9', '{}', '{}', NULL, 1, '2025-12-09 09:34:21', 7, 0, 1), (1231, '2cd4b4d4-fca3-49a0-8605-a42eee3a5f99', 'VDM.Interfaces.File.TypeDefinitionInterface', 'TypeDefinitionInterface', 'interface', 'File Type Definition Interface\r\n\r\nThis class represents an **immutable file handling blueprint** used by the file\r\nintake pipeline. It defines:\r\n\r\n- The HTML input field responsible for uploads\r\n- Allowed file formats\r\n- Target filesystem location\r\n- Filter engine rule\r\n- Image crop definitions (if applicable)\r\n\r\nInstances of this class are designed to be:\r\n\r\n- Safe to reuse\r\n- Immutable after construction\r\n- Free of any database concerns\r\n- Serializable-friendly\r\n\r\nIt replaces the older Type database architecture with a deterministic,\r\nconfiguration-based model.\r\n\r\n@since 5.1.4', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.File.TypeDefinitionInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEdldCB0aGUgdXBsb2FkIGZpZWxkIG5hbWUuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZmllbGQoKTogc3RyaW5nOw0KDQoJLyoqDQoJICogR2V0IHRoZSBkZWZpbmVkIGZpbGUgdHlwZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0eXBlKCk6IHN0cmluZzsNCg0KCS8qKg0KCSAqIEdldCB0aGUgdXBsb2FkIGZpbHRlciBtb2RlLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmd8bnVsbA0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZmlsdGVyKCk6ID9zdHJpbmc7DQoNCgkvKioNCgkgKiBHZXQgdGhlIHRhcmdldCBmaWxlc3lzdGVtIHBhdGguDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gcGF0aCgpOiBzdHJpbmc7DQoNCgkvKioNCgkgKiBHZXQgdGhlIGFsbG93ZWQgZmlsZSBleHRlbnNpb25zLg0KCSAqDQoJICogQHJldHVybiBhcnJheTxpbnQsc3RyaW5nPg0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZm9ybWF0cygpOiBhcnJheTsNCg0KCS8qKg0KCSAqIEV4cG9ydCB0aGUgZnVsbCB0eXBlIGRlZmluaXRpb24gYXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkuDQoJICoNCgkgKiBUaGlzIHJldHVybnMgdGhlIGV4YWN0IHN0cnVjdHVyZSB1c2VkIGJ5IHRoZSBjb25zdHJ1Y3RvciwNCgkgKiBlbnN1cmluZyBpdCBjYW4gYmUgc2FmZWx5IHN0b3JlZCwgc2VyaWFsaXplZCwgb3IgcmVidWlsdC4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkgIFRoZSBmdWxsIGNvbmZpZ3VyYXRpb24gbWFwLg0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpOiBhcnJheTs=', '{}', '{}', NULL, 1, '2025-12-09 09:36:55', 5, 0, 1), (1232, '3b7cd7fc-3e7c-4eaf-b156-7eb3ea744952', 'VDM.Interfaces.File.DefinitionInterface', 'DefinitionInterface', 'interface', 'File Definition Interface\r\n\r\nThis class represents a **single physical file** on disk and exposes\r\na consistent and immutable API for downstream usage.\r\n\r\nIt is not:\r\n- a database record\r\n- a file manager\r\n- a transport layer\r\n\r\nIt **is**:\r\n- a file identity\r\n- a metadata container\r\n- a filesystem reference\r\n\r\nInstances of this class are constructed exclusively from upload\r\nresults produced by the a File Agent class.\r\n\r\n@since 5.1.4', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.File.DefinitionInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEdldCBvcmlnaW5hbCBjbGllbnQgZmlsZW5hbWUuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbmFtZSgpOiBzdHJpbmc7DQoNCgkvKioNCgkgKiBHZXQgZmlsZXN5c3RlbSBmaWxlbmFtZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmaWxlTmFtZSgpOiBzdHJpbmc7DQoNCgkvKioNCgkgKiBHZXQgZmlsZSBleHRlbnNpb24uDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZXh0ZW5zaW9uKCk6IHN0cmluZzsNCg0KCS8qKg0KCSAqIEdldCByYW5kb20gbmFtaW5nIGZyYWdtZW50IChpZiB1c2VkKS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiByYW5kb20oKTogc3RyaW5nOw0KDQoJLyoqDQoJICogR2V0IGZpbGUgc2l6ZSAoYnl0ZXMpLg0KCSAqDQoJICogQHJldHVybiBpbnQNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNpemUoKTogaW50Ow0KDQoJLyoqDQoJICogR2V0IE1JTUUgdHlwZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBtaW1lKCk6IHN0cmluZzsNCg0KCS8qKg0KCSAqIEdldCBhYnNvbHV0ZSBmaWxlIHBhdGguDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZmlsZVBhdGgoKTogc3RyaW5nOw0KDQoJLyoqDQoJICogRXhwb3J0IGZpbGUgaW5mb3JtYXRpb24gYXMgYXJyYXkuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5PHN0cmluZyxtaXhlZD4NCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXk7', '{}', '{}', NULL, 1, '2025-12-09 09:41:33', 6, 0, 1), -(1233, '0e23f0ac-8a0a-450e-b40c-912bf331bfae', 'VDM.Interfaces.File.HandlerInterface', 'HandlerInterface', 'interface', 'File Handler Interface\r\n\r\n@since 5.1.4', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.File.HandlerInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFNldCB0aGUgJHVzZVN0cmVhbXMgcHJvcGVydHkgdG8gdXNlIHN0cmVhbXMgZm9yIGZpbGUgaGFuZGxpbmcNCgkgKg0KCSAqIEBwYXJhbSAgIGJvb2wgICR1c2VTdHJlYW1zICBUcnVlIHRvIHVzZSBzdHJlYW1zLCBmYWxzZSBvdGhlcndpc2UuDQoJICoNCgkgKiBAcmV0dXJuICBzZWxmICBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIHRvIGFsbG93IGZvciBtZXRob2QgY2hhaW5pbmcuDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0VXNlU3RyZWFtcyhib29sICR1c2VTdHJlYW1zKTogc2VsZjsNCg0KCS8qKg0KCSAqIFNldCB0aGUgJGFsbG93VW5zYWZlIHByb3BlcnR5IHRvIGFsbG93IG9yIGRpc2FsbG93IHVuc2FmZSBmaWxlIHVwbG9hZHMuDQoJICoNCgkgKiBAcGFyYW0gICBib29sICAkYWxsb3dVbnNhZmUgIFRydWUgdG8gYWxsb3cgdW5zYWZlIGZpbGUgdXBsb2FkcywgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqDQoJICogQHJldHVybiAgc2VsZiAgUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSB0byBhbGxvdyBmb3IgbWV0aG9kIGNoYWluaW5nLg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldEFsbG93VW5zYWZlKGJvb2wgJGFsbG93VW5zYWZlKTogc2VsZjsNCg0KCS8qKg0KCSAqIFNldCB0aGUgJHNhZmVGaWxlT3B0aW9ucyBwcm9wZXJ0eSB0byBkZWZpbmUgb3B0aW9ucyBmb3IgZmlsZSBzYWZldHkgY2hlY2tzLg0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICRzYWZlRmlsZU9wdGlvbnMgIEFuIGFycmF5IG9mIG9wdGlvbnMgZm9yIElucHV0RmlsdGVyOjppc1NhZmVGaWxlLg0KCSAqDQoJICogQHJldHVybiAgc2VsZiAgUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSB0byBhbGxvdyBmb3IgbWV0aG9kIGNoYWluaW5nLg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldFNhZmVGaWxlT3B0aW9ucyhhcnJheSAkc2FmZUZpbGVPcHRpb25zKTogc2VsZjsNCg0KCS8qKg0KCSAqIFNldCB0aGUgJGVucXVldWVFcnJvciBwcm9wZXJ0eSB0byBjb250cm9sIGVycm9yIHJlcG9ydGluZyBiZWhhdmlvci4NCgkgKg0KCSAqIEBwYXJhbSAgIGJvb2wgICRlbnF1ZXVlRXJyb3IgIFRydWUgdG8gZW5xdWV1ZSBlcnJvciBtZXNzYWdlcywgZmFsc2UgdG8gc3RvcmUgdGhlbSBpbiB0aGUgaW50ZXJuYWwgZXJyb3IgYXJyYXkuDQoJICoNCgkgKiBAcmV0dXJuICBzZWxmICBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIHRvIGFsbG93IGZvciBtZXRob2QgY2hhaW5pbmcuDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0RW5xdWV1ZUVycm9yKGJvb2wgJGVucXVldWVFcnJvcik6IHNlbGY7DQoNCgkvKioNCgkgKiBTZXQgdGhlICRsZWdhbEZvcm1hdHMgcHJvcGVydHkgdG8gZGVmaW5lIGxlZ2FsIGZpbGUgZm9ybWF0cy4NCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkbGVnYWxGb3JtYXRzICBBbiBhcnJheSBvZiBhbGxvd2VkIGZpbGUgZm9ybWF0cyAoZS5nLiwgWydqcGcnLCAncG5nJ10pLg0KCSAqDQoJICogQHJldHVybiAgc2VsZiAgUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSB0byBhbGxvdyBmb3IgbWV0aG9kIGNoYWluaW5nLg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldExlZ2FsRm9ybWF0cyhhcnJheSAkbGVnYWxGb3JtYXRzKTogc2VsZjsNCg0KCS8qKg0KCSAqIEdldCBhIGZpbGUgZnJvbSB0aGUgaW5wdXQgYmFzZWQgb24gZmllbGQgbmFtZSBhbmQgZmlsZSB0eXBlLCB0aGVuIHByb2Nlc3MgaXQuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcJICAgJGZpZWxkICAgVGhlIGlucHV0IGZpZWxkIG5hbWUgZm9yIHRoZSBmaWxlIHVwbG9hZC4NCgkgKiBAcGFyYW0gICBzdHJpbmcJICAgJHR5cGUJVGhlIHR5cGUgb2YgZmlsZSAoZS5nLiwgJ2ltYWdlJywgJ2RvY3VtZW50JykuDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICRmaWx0ZXIgIFRoZSBmaWx0ZXIgdG8gYXBwbHkgd2hlbiB1cGxvYWRpbmcgdGhlIGZpbGUuDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICRwYXRoCVRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0aGUgZmlsZSBzaG91bGQgYmUgc2F2ZWQuDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsICAgRmlsZSBkZXRhaWxzIG9yIGZhbHNlIG9uIGZhaWx1cmUuDQoJICogQHNpbmNlICAgMy4wLjExDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEZpbGUoc3RyaW5nICRmaWVsZCwgc3RyaW5nICR0eXBlLCBzdHJpbmcgJGZpbHRlciA9IG51bGwsIHN0cmluZyAkcGF0aCA9IG51bGwpOiA/YXJyYXk7DQoNCgkvKioNCgkgKiBSZW1vdmUgYSBwcmV2aW91c2x5IHVwbG9hZGVkIGZpbGUuDQoJICoNCgkgKiBUaGlzIG1ldGhvZCB1c2VzIHRoZSBzYW1lIGludGVybmFsIHJlbW92YWwgbWVjaGFuaXNtIGFzIHRoZSB1cGxvYWRlciwNCgkgKiBlbnN1cmluZyBjb25zaXN0ZW50IGNsZWFudXAgbG9naWMgYWNyb3NzIHRoZSBzeXN0ZW0uDQoJICoNCgkgKiBJdCBhY2NlcHRzIGVpdGhlcjoNCgkgKiAtIGEgZnVsbCBmaWxlc3lzdGVtIHBhdGgNCgkgKiAtIG9yIGEgZmlsZW5hbWUgcmVzb2x2YWJsZSBieSBQYXRoOjpjbGVhbg0KCSAqDQoJICogQHBhcmFtICBzdHJpbmcgICRwYXRoICBBYnNvbHV0ZSBvciByZWxhdGl2ZSBmaWxlIHBhdGguDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wgIFRSVUUgb24gc3VjY2VzcywgRkFMU0Ugb24gZmFpbHVyZSBvciBtaXNzaW5nIGZpbGUuDQoJICoNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZUZpbGUoc3RyaW5nICRwYXRoKTogYm9vbDsNCg0KCS8qKg0KCSAqIEdldCB0aGUgZXJyb3IgbWVzc2FnZXMgYXMgYSBzdHJpbmcuDQoJICoNCgkgKiBAcGFyYW0gIGJvb2wgICAkdG9TdHJpbmcgIFRoZSBvcHRpb24gdG8gcmV0dXJuIGVycm9ycyBhcyBhIHN0cmluZw0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nfGFycmF5ICBSZXR1cm5zIHRoZSBlcnJvciBtZXNzYWdlcyBhcyBhIHNpbmdsZSBjb25jYXRlbmF0ZWQgc3RyaW5nLg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEVycm9ycyhib29sICR0b1N0cmluZyA9IHRydWUpOiBzdHJpbmd8YXJyYXk7', '{}', '{}', NULL, 1, '2025-12-09 10:04:18', 2, 0, 1), +(1233, '0e23f0ac-8a0a-450e-b40c-912bf331bfae', 'VDM.Interfaces.File.HandlerInterface', 'HandlerInterface', 'interface', 'File Handler Interface\r\n\r\n@since 5.1.4', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.File.HandlerInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFNldCB0aGUgJHVzZVN0cmVhbXMgcHJvcGVydHkgdG8gdXNlIHN0cmVhbXMgZm9yIGZpbGUgaGFuZGxpbmcNCgkgKg0KCSAqIEBwYXJhbSAgIGJvb2wgICR1c2VTdHJlYW1zICBUcnVlIHRvIHVzZSBzdHJlYW1zLCBmYWxzZSBvdGhlcndpc2UuDQoJICoNCgkgKiBAcmV0dXJuICBzZWxmICBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIHRvIGFsbG93IGZvciBtZXRob2QgY2hhaW5pbmcuDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0VXNlU3RyZWFtcyhib29sICR1c2VTdHJlYW1zKTogc2VsZjsNCg0KCS8qKg0KCSAqIFNldCB0aGUgJGFsbG93VW5zYWZlIHByb3BlcnR5IHRvIGFsbG93IG9yIGRpc2FsbG93IHVuc2FmZSBmaWxlIHVwbG9hZHMuDQoJICoNCgkgKiBAcGFyYW0gICBib29sICAkYWxsb3dVbnNhZmUgIFRydWUgdG8gYWxsb3cgdW5zYWZlIGZpbGUgdXBsb2FkcywgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqDQoJICogQHJldHVybiAgc2VsZiAgUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSB0byBhbGxvdyBmb3IgbWV0aG9kIGNoYWluaW5nLg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldEFsbG93VW5zYWZlKGJvb2wgJGFsbG93VW5zYWZlKTogc2VsZjsNCg0KCS8qKg0KCSAqIFNldCB0aGUgJHNhZmVGaWxlT3B0aW9ucyBwcm9wZXJ0eSB0byBkZWZpbmUgb3B0aW9ucyBmb3IgZmlsZSBzYWZldHkgY2hlY2tzLg0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICRzYWZlRmlsZU9wdGlvbnMgIEFuIGFycmF5IG9mIG9wdGlvbnMgZm9yIElucHV0RmlsdGVyOjppc1NhZmVGaWxlLg0KCSAqDQoJICogQHJldHVybiAgc2VsZiAgUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSB0byBhbGxvdyBmb3IgbWV0aG9kIGNoYWluaW5nLg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldFNhZmVGaWxlT3B0aW9ucyhhcnJheSAkc2FmZUZpbGVPcHRpb25zKTogc2VsZjsNCg0KCS8qKg0KCSAqIFNldCB0aGUgJGVucXVldWVFcnJvciBwcm9wZXJ0eSB0byBjb250cm9sIGVycm9yIHJlcG9ydGluZyBiZWhhdmlvci4NCgkgKg0KCSAqIEBwYXJhbSAgIGJvb2wgICRlbnF1ZXVlRXJyb3IgIFRydWUgdG8gZW5xdWV1ZSBlcnJvciBtZXNzYWdlcywgZmFsc2UgdG8gc3RvcmUgdGhlbSBpbiB0aGUgaW50ZXJuYWwgZXJyb3IgYXJyYXkuDQoJICoNCgkgKiBAcmV0dXJuICBzZWxmICBSZXR1cm5zIHRoZSBjdXJyZW50IGluc3RhbmNlIHRvIGFsbG93IGZvciBtZXRob2QgY2hhaW5pbmcuDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0RW5xdWV1ZUVycm9yKGJvb2wgJGVucXVldWVFcnJvcik6IHNlbGY7DQoNCgkvKioNCgkgKiBTZXQgdGhlICRsZWdhbEZvcm1hdHMgcHJvcGVydHkgdG8gZGVmaW5lIGxlZ2FsIGZpbGUgZm9ybWF0cy4NCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkbGVnYWxGb3JtYXRzICBBbiBhcnJheSBvZiBhbGxvd2VkIGZpbGUgZm9ybWF0cyAoZS5nLiwgWydqcGcnLCAncG5nJ10pLg0KCSAqDQoJICogQHJldHVybiAgc2VsZiAgUmV0dXJucyB0aGUgY3VycmVudCBpbnN0YW5jZSB0byBhbGxvdyBmb3IgbWV0aG9kIGNoYWluaW5nLg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldExlZ2FsRm9ybWF0cyhhcnJheSAkbGVnYWxGb3JtYXRzKTogc2VsZjsNCg0KCS8qKg0KCSAqIEdldCBhIGZpbGUgZnJvbSB0aGUgaW5wdXQgYmFzZWQgb24gZmllbGQgbmFtZSBhbmQgZmlsZSB0eXBlLCB0aGVuIHByb2Nlc3MgaXQuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcJICAgJGZpZWxkICAgVGhlIGlucHV0IGZpZWxkIG5hbWUgZm9yIHRoZSBmaWxlIHVwbG9hZC4NCgkgKiBAcGFyYW0gICBzdHJpbmcJICAgJHR5cGUJVGhlIHR5cGUgb2YgZmlsZSAoZS5nLiwgJ2ltYWdlJywgJ2RvY3VtZW50JykuDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICRmaWx0ZXIgIFRoZSBmaWx0ZXIgdG8gYXBwbHkgd2hlbiB1cGxvYWRpbmcgdGhlIGZpbGUuDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICRwYXRoCVRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0aGUgZmlsZSBzaG91bGQgYmUgc2F2ZWQuDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsICAgRmlsZSBkZXRhaWxzIG9yIGZhbHNlIG9uIGZhaWx1cmUuDQoJICogQHNpbmNlICAgMy4wLjExDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEZpbGUoc3RyaW5nICRmaWVsZCwgc3RyaW5nICR0eXBlLCA/c3RyaW5nICRmaWx0ZXIgPSBudWxsLCA/c3RyaW5nICRwYXRoID0gbnVsbCk6ID9hcnJheTsNCg0KCS8qKg0KCSAqIFJlbW92ZSBhIHByZXZpb3VzbHkgdXBsb2FkZWQgZmlsZS4NCgkgKg0KCSAqIFRoaXMgbWV0aG9kIHVzZXMgdGhlIHNhbWUgaW50ZXJuYWwgcmVtb3ZhbCBtZWNoYW5pc20gYXMgdGhlIHVwbG9hZGVyLA0KCSAqIGVuc3VyaW5nIGNvbnNpc3RlbnQgY2xlYW51cCBsb2dpYyBhY3Jvc3MgdGhlIHN5c3RlbS4NCgkgKg0KCSAqIEl0IGFjY2VwdHMgZWl0aGVyOg0KCSAqIC0gYSBmdWxsIGZpbGVzeXN0ZW0gcGF0aA0KCSAqIC0gb3IgYSBmaWxlbmFtZSByZXNvbHZhYmxlIGJ5IFBhdGg6OmNsZWFuDQoJICoNCgkgKiBAcGFyYW0gIHN0cmluZyAgJHBhdGggIEFic29sdXRlIG9yIHJlbGF0aXZlIGZpbGUgcGF0aC4NCgkgKg0KCSAqIEByZXR1cm4gYm9vbCAgVFJVRSBvbiBzdWNjZXNzLCBGQUxTRSBvbiBmYWlsdXJlIG9yIG1pc3NpbmcgZmlsZS4NCgkgKg0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlRmlsZShzdHJpbmcgJHBhdGgpOiBib29sOw0KDQoJLyoqDQoJICogR2V0IHRoZSBlcnJvciBtZXNzYWdlcyBhcyBhIHN0cmluZy4NCgkgKg0KCSAqIEBwYXJhbSAgYm9vbCAgICR0b1N0cmluZyAgVGhlIG9wdGlvbiB0byByZXR1cm4gZXJyb3JzIGFzIGEgc3RyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmd8YXJyYXkgIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2VzIGFzIGEgc2luZ2xlIGNvbmNhdGVuYXRlZCBzdHJpbmcuDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JzKGJvb2wgJHRvU3RyaW5nID0gdHJ1ZSk6IHN0cmluZ3xhcnJheTs=', '{}', '{}', NULL, 1, '2025-12-09 10:04:18', 3, 0, 1), (1234, '082b049c-d8f3-462d-a520-3d312f2eaa31', 'VDM.Interfaces.File.PersistentManagerInterface', 'PersistentManagerInterface', 'interface', 'Persistent File Manager Interface\r\n\r\n@since 5.1.4', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.File.PersistentManagerInterface', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"b62ec888-ce11-45c8-97ff-b4d9bea3d0bc\",\"as\":\"File\"}}', 'CS8qKg0KCSAqIFVwbG9hZCBhIGZpbGUsIG9mIGEgZ2l2ZW4gZmlsZSB0eXBlIGFuZCBsaW5rIGl0IHRvIGFuIGVudGl0eS4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgICAgVGhlIGZpbGUgdHlwZSBndWlkDQoJICogQHBhcmFtIHN0cmluZyAkZW50aXR5ICBUaGUgZW50aXR5IGd1aWQNCgkgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgIFRoZSB0YXJnZXQgZW50aXR5IG5hbWUNCgkgKg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgZmlsZSB0eXBlIGlzIG5vdCB2YWxpZC4NCgkgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIElmIHRoZXJlIGlzIGFuIGVycm9yIGR1cmluZyBmaWxlIHVwbG9hZC4NCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdXBsb2FkKHN0cmluZyAkZ3VpZCwgc3RyaW5nICRlbnRpdHksIHN0cmluZyAkdGFyZ2V0KTogdm9pZDsNCg0KCS8qKg0KCSAqIEdldCB0aGUgZmlsZSBkZWZpbml0aW9uDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkIFRoZSBmaWxlIGd1aWQNCgkgKg0KCSAqIEByZXR1cm4gRmlsZXxudWxsDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGRlZmluaXRpb24oc3RyaW5nICRndWlkKTogP0ZpbGU7DQoNCgkvKioNCgkgKiBHZXQgdGhlIGZpbGUgZGVmaW5pdGlvbiBhcyBhcnJheQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZ3VpZCBUaGUgZmlsZSBndWlkDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwNCgkgKiBAc2luY2UgNS4wLjINCgkgKg0KCSAqIEBkZXByZWNhdGVkIDUuMS40IFVzZSAkdGhpcy0+ZGVmaW5pdGlvbiguLi4pOyANCgkgKiBAcmVtb3ZhbCB4LjIgIChtZWFucyA0LjIsIDUuMiAsIDYuMiBpZiBKQ0IpDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGRvd25sb2FkKHN0cmluZyAkZ3VpZCk6ID9hcnJheTsNCg0KCS8qKg0KCSAqIERlbGV0ZSBhIGZpbGUuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkICBUaGUgZmlsZSBndWlkDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKHN0cmluZyAkZ3VpZCk6IHZvaWQ7DQoNCgkvKioNCgkgKiBTZXQgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICR0YWJsZSBUaGUgdGFibGUgdGhhdCBzaG91bGQgYmUgYWN0aXZlDQoJICoNCgkgKiBAcmV0dXJuIHNlbGYNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHRhYmxlKHN0cmluZyAkdGFibGUpOiBzZWxmOw0KDQoJLyoqDQoJICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogQHNpbmNlICAgNS4wLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0VGFibGUoKTogc3RyaW5nOw==', '{}', '{}', NULL, 1, '2025-12-09 11:29:06', 6, 0, 1), (1235, '0d159144-b553-4604-8f55-503985e22ec6', 'Joomla.File.Definition', 'Definition', 'final class', 'File Definition Class\r\n\r\nFile Definition (Database + Filesystem Hybrid).\r\n\r\nThis class extends the behaviour of the original temporary-file Definition\r\n by supporting database-driven fields while preserving the interface and\r\n behaviour of the base Definition class.\r\n\r\n@since 5.1.4', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"b62ec888-ce11-45c8-97ff-b4d9bea3d0bc\"}', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].File.Definition', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"f11dc790-713e-4706-9a85-a318ed3ad56e\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIE9yaWdpbmFsIGNsaWVudCBmaWxlbmFtZS4NCgkgKg0KCSAqIEB2YXIgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjQNCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRuYW1lOw0KDQoJLyoqDQoJICogRmlsZXN5c3RlbSBmaWxlbmFtZSAoZGVyaXZlZCBmcm9tIGZpbGVfcGF0aCkuDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkZmlsZV9uYW1lOw0KDQoJLyoqDQoJICogUmFuZG9tIG5hbWluZyBmcmFnbWVudCAodW51c2VkIGluIERCIG1vZGUpLg0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJHJhbmRvbSA9ICcnOw0KDQoJLyoqDQoJICogRmlsZSBleHRlbnNpb24uDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkZXh0ZW5zaW9uOw0KDQoJLyoqDQoJICogRmlsZSBzaXplIGluIGJ5dGVzLg0KCSAqDQoJICogQHZhciAgIGludA0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBpbnQgJHNpemU7DQoNCgkvKioNCgkgKiBNSU1FIHR5cGUuDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkbWltZTsNCg0KCS8qKg0KCSAqIEZ1bGwgYWJzb2x1dGUgZmlsZXN5c3RlbSBwYXRoLg0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJGZpbGVfcGF0aDsNCg0KCS8qKg0KCSAqIEZpbGUgdHlwZSBpZGVudGlmaWVyLg0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJGZpbGVfdHlwZTsNCg0KCS8qKg0KCSAqIEVudGl0eSB0eXBlIG5hbWUuDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkZW50aXR5X3R5cGU7DQoNCgkvKioNCgkgKiBFbnRpdHkgaWRlbnRpZmllci4NCgkgKg0KCSAqIEB2YXIgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjQNCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRlbnRpdHk7DQoNCgkvKioNCgkgKiBBY2Nlc3MgbGV2ZWwuDQoJICoNCgkgKiBAdmFyICAgaW50DQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIGludCAkYWNjZXNzOw0KDQoJLyoqDQoJICogR2xvYmlvbmljIEdVSUQuDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkZ3VpZDsNCg0KCS8qKg0KCSAqIFVzZXIgSUQgb2YgY3JlYXRvci4NCgkgKg0KCSAqIEB2YXIgICBpbnQNCgkgKiBAc2luY2UgNS4xLjQNCgkgKi8NCglwcm90ZWN0ZWQgaW50ICRjcmVhdGVkX2J5Ow0KDQoJLyoqDQoJICogQ29uc3RydWN0IGEgRGVmaW5pdGlvbiBvYmplY3QgdXNpbmcgZGF0YWJhc2UtbG9hZGVkIG1ldGFkYXRhLg0KCSAqDQoJICogQHBhcmFtICBhcnJheSAgJGRldGFpbHMgIEZpbGUgKyBEQiByZWNvcmQgbWV0YWRhdGEuDQoJICoNCgkgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24NCgkgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uDQoJICoNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRkZXRhaWxzKQ0KCXsNCgkJJHJlcXVpcmVkID0gWw0KCQkJJ25hbWUnLA0KCQkJJ2ZpbGVfdHlwZScsDQoJCQknZmlsZV9wYXRoJywNCgkJCSdlbnRpdHlfdHlwZScsDQoJCQknZW50aXR5JywNCgkJCSdhY2Nlc3MnLA0KCQkJJ2d1aWQnLA0KCQkJJ2NyZWF0ZWRfYnknDQoJCV07DQoNCgkJZm9yZWFjaCAoJHJlcXVpcmVkIGFzICRrZXkpDQoJCXsNCgkJCWlmICghaXNzZXQoJGRldGFpbHNbJGtleV0pIHx8ICRkZXRhaWxzWyRrZXldID09PSAnJykNCgkJCXsNCgkJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiRGVmaW5pdGlvbiBtaXNzaW5nIHJlcXVpcmVkIGtleTogeyRrZXl9Iik7DQoJCQl9DQoJCX0NCg0KCQkkdGhpcy0+bmFtZSAgICAgID0gKHN0cmluZykgJGRldGFpbHNbJ25hbWUnXTsNCgkJJHRoaXMtPmZpbGVfcGF0aCA9IChzdHJpbmcpICRkZXRhaWxzWydmaWxlX3BhdGgnXTsNCgkJJHRoaXMtPmZpbGVfbmFtZSA9IGJhc2VuYW1lKCR0aGlzLT5mdWxsX3BhdGgpOw0KDQoJCWlmICghaXNfZmlsZSgkdGhpcy0+ZmlsZV9wYXRoKSkNCgkJew0KCQkJdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCJGaWxlIGRvZXMgbm90IGV4aXN0IG9uIGRpc2s6IHskdGhpcy0+ZmlsZV9wYXRofSIpOw0KCQl9DQoNCgkJJHRoaXMtPmV4dGVuc2lvbiA9IChzdHJpbmcpICgkZGV0YWlsc1snZXh0ZW5zaW9uJ10gPz8gTWltZUhlbHBlcjo6ZXh0ZW5zaW9uKCR0aGlzLT5maWxlX3BhdGgpKTsNCgkJJHRoaXMtPnNpemUgICAgICA9IChpbnQpICAgICgkZGV0YWlsc1snc2l6ZSddICAgICAgPz8gZmlsZXNpemUoJHRoaXMtPmZpbGVfcGF0aCkpOw0KCQkkdGhpcy0+bWltZSAgICAgID0gKHN0cmluZykgKCRkZXRhaWxzWydtaW1lJ10gICAgICA/PyBNaW1lSGVscGVyOjptaW1lVHlwZSgkdGhpcy0+ZmlsZV9wYXRoKSk7DQoNCgkJJHRoaXMtPmZpbGVfdHlwZSAgID0gKHN0cmluZykgJGRldGFpbHNbJ2ZpbGVfdHlwZSddOw0KCQkkdGhpcy0+ZW50aXR5X3R5cGUgPSAoc3RyaW5nKSAkZGV0YWlsc1snZW50aXR5X3R5cGUnXTsNCgkJJHRoaXMtPmVudGl0eSAgICAgID0gKHN0cmluZykgJGRldGFpbHNbJ2VudGl0eSddOw0KCQkkdGhpcy0+YWNjZXNzICAgICAgPSAoaW50KSAgICAkZGV0YWlsc1snYWNjZXNzJ107DQoJCSR0aGlzLT5ndWlkICAgICAgICA9IChzdHJpbmcpICRkZXRhaWxzWydndWlkJ107DQoJCSR0aGlzLT5jcmVhdGVkX2J5ICA9IChpbnQpICAgICRkZXRhaWxzWydjcmVhdGVkX2J5J107DQoJfQ0KDQoJLyoqDQoJICogR2V0IG9yaWdpbmFsIGNsaWVudCBmaWxlbmFtZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5uYW1lOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBmaWxlc3lzdGVtIGZpbGVuYW1lLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGZpbGVOYW1lKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5maWxlX25hbWU7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGZpbGUgZXh0ZW5zaW9uLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGV4dGVuc2lvbigpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+ZXh0ZW5zaW9uOw0KCX0NCg0KCS8qKg0KCSAqIEdldCByYW5kb20gbmFtaW5nIGZyYWdtZW50Lg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJhbmRvbSgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+cmFuZG9tOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBmaWxlIHNpemUuDQoJICoNCgkgKiBAcmV0dXJuIGludA0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2l6ZSgpOiBpbnQNCgl7DQoJCXJldHVybiAkdGhpcy0+c2l6ZTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgTUlNRSB0eXBlLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIG1pbWUoKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPm1pbWU7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGFic29sdXRlIGZpbGUgcGF0aC4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmaWxlUGF0aCgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+ZmlsZV9wYXRoOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBmaWxlIHR5cGUgaWRlbnRpZmllci4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmaWxlVHlwZSgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+ZmlsZV90eXBlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBlbnRpdHkgdHlwZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBlbnRpdHlUeXBlKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5lbnRpdHlfdHlwZTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgZW50aXR5IHJlZmVyZW5jZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBlbnRpdHkoKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPmVudGl0eTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgYWNjZXNzIGxldmVsLg0KCSAqDQoJICogQHJldHVybiBpbnQNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGFjY2VzcygpOiBpbnQNCgl7DQoJCXJldHVybiAkdGhpcy0+YWNjZXNzOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBHbG9iaW9uaWMgR1VJRC4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBndWlkKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5ndWlkOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjcmVhdG9yIElELg0KCSAqDQoJICogQHJldHVybiBpbnQNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGNyZWF0ZWRCeSgpOiBpbnQNCgl7DQoJCXJldHVybiAkdGhpcy0+Y3JlYXRlZF9ieTsNCgl9DQoNCgkvKioNCgkgKiBFeHBvcnQgZnVsbCBmaWxlIG1ldGFkYXRhIGFzIGFycmF5Lg0KCSAqDQoJICogQHJldHVybiBhcnJheTxzdHJpbmcsbWl4ZWQ+DQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCk6IGFycmF5DQoJew0KCQlyZXR1cm4gWw0KCQkJLy8gQmFzZSBpbmhlcml0ZWQgZmllbGRzDQoJCQknbmFtZScgICAgICAgID0+ICR0aGlzLT5uYW1lLA0KCQkJJ2ZpbGVfbmFtZScgICA9PiAkdGhpcy0+ZmlsZV9uYW1lLA0KCQkJJ2ZpbGVfcGF0aCcgICA9PiAkdGhpcy0+ZmlsZV9wYXRoLA0KCQkJJ3JhbmRvbScgICAgICA9PiAkdGhpcy0+cmFuZG9tLA0KCQkJJ2V4dGVuc2lvbicgICA9PiAkdGhpcy0+ZXh0ZW5zaW9uLA0KCQkJJ3NpemUnICAgICAgICA9PiAkdGhpcy0+c2l6ZSwNCgkJCSdtaW1lJyAgICAgICAgPT4gJHRoaXMtPm1pbWUsDQoNCgkJCS8vIERhdGFiYXNlLWRyaXZlbiBtZXRhZGF0YQ0KCQkJJ2ZpbGVfdHlwZScgICA9PiAkdGhpcy0+ZmlsZV90eXBlLA0KCQkJJ2VudGl0eV90eXBlJyA9PiAkdGhpcy0+ZW50aXR5X3R5cGUsDQoJCQknZW50aXR5JyAgICAgID0+ICR0aGlzLT5lbnRpdHksDQoJCQknYWNjZXNzJyAgICAgID0+ICR0aGlzLT5hY2Nlc3MsDQoJCQknZ3VpZCcgICAgICAgID0+ICR0aGlzLT5ndWlkLA0KCQkJJ2NyZWF0ZWRfYnknICA9PiAkdGhpcy0+Y3JlYXRlZF9ieQ0KCQldOw0KCX0=', '{}', '{}', NULL, 1, '2025-12-11 10:12:50', 6, 0, 1), (1236, '8e2b3996-11a1-470d-b2be-2405c62ec192', 'Joomla.File.TypeDefinition', 'TypeDefinition', 'final class', 'File Type Definition Class\r\n\r\nRepresents a complete file type definition including upload rules, access rules, and metadata.\r\n\r\nThis class extends the original concept with additional\r\n JCB-driven configuration options such as GUID, access,\r\n quantity limits, and crop settings.\r\n\r\n@since 5.1.4', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"94376132-17b0-4fbd-8fc3-020a63fb15e1\"}', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].File.TypeDefinition', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFVuaXF1ZSBHVUlEIGZvciB0aGlzIHR5cGUgZGVmaW5pdGlvbi4NCgkgKg0KCSAqIEB2YXIgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjQNCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRndWlkOw0KDQoJLyoqDQoJICogSHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGlzIHR5cGUuDQoJICoNCgkgKiBAdmFyICAgc3RyaW5nDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkbmFtZTsNCg0KCS8qKg0KCSAqIEFjY2VzcyBsZXZlbCByZXF1aXJlZCB0byB1cGxvYWQuDQoJICoNCgkgKiBAdmFyICAgaW50DQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkIGludCAkYWNjZXNzOw0KDQoJLyoqDQoJICogTWF4aW11bSBxdWFudGl0eSBhbGxvd2VkICgwIGFsbG93ZWQsIGJ1dCBtdXN0IGJlIG51bWVyaWMpLg0KCSAqDQoJICogQHZhciAgIGludA0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBpbnQgJHF1YW50aXR5Ow0KDQoJLyoqDQoJICogQWNjZXNzIGxldmVsIHJlcXVpcmVkIHRvIGRvd25sb2FkLg0KCSAqDQoJICogQHZhciAgIGludA0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBpbnQgJGRvd25sb2FkQWNjZXNzOw0KDQoJLyoqDQoJICogSFRNTCBmb3JtIHVwbG9hZCBmaWVsZCBuYW1lLg0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJGZpZWxkOw0KDQoJLyoqDQoJICogRmlsZSB0eXBlIGlkZW50aWZpZXIgKGZpbGUsIGltYWdlLCBtZWRpYSwgZG9jdW1lbnQpLg0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJHR5cGU7DQoNCgkvKioNCgkgKiBVcGxvYWQgZmlsdGVyIHN0cmF0ZWd5Lg0KCSAqDQoJICogQHZhciAgIHN0cmluZ3xudWxsDQoJICogQHNpbmNlIDUuMS40DQoJICovDQoJcHJvdGVjdGVkID9zdHJpbmcgJGZpbHRlcjsNCg0KCS8qKg0KCSAqIFRhcmdldCBmaWxlc3lzdGVtIHBhdGggd2hlcmUgZmlsZXMgYXJlIHN0b3JlZC4NCgkgKg0KCSAqIEB2YXIgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjQNCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRwYXRoOw0KDQoJLyoqDQoJICogQWxsb3dlZCBmaWxlIGV4dGVuc2lvbnMuDQoJICoNCgkgKiBAdmFyICAgYXJyYXk8aW50LHN0cmluZz4NCgkgKiBAc2luY2UgNS4xLjQNCgkgKi8NCglwcm90ZWN0ZWQgYXJyYXkgJGZvcm1hdHM7DQoNCgkvKioNCgkgKiBDcm9wIGNvbmZpZ3VyYXRpb24gZm9yIGltYWdlcy4NCgkgKg0KCSAqIEB2YXIgICBhcnJheQ0KCSAqIEBzaW5jZSA1LjEuNA0KCSAqLw0KCXByb3RlY3RlZCBhcnJheSAkY3JvcDsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogUmVxdWlyZWQga2V5czoNCgkgKiAtIGd1aWQgKHN0cmluZykNCgkgKiAtIG5hbWUgKHN0cmluZykNCgkgKiAtIGFjY2VzcyAoaW50KQ0KCSAqIC0gcXVhbnRpdHkgKGludCkNCgkgKiAtIGRvd25sb2FkX2FjY2VzcyAoaW50KQ0KCSAqIC0gZmllbGQgKHN0cmluZykNCgkgKiAtIHR5cGUgKHN0cmluZykNCgkgKiAtIHBhdGggKHN0cmluZykNCgkgKg0KCSAqIE9wdGlvbmFsOg0KCSAqIC0gZmlsdGVyIChzdHJpbmd8bnVsbCkNCgkgKiAtIGZvcm1hdHMgKGFycmF5KQ0KCSAqIC0gY3JvcCAoYXJyYXkpDQoJICoNCgkgKiBAcGFyYW0gIGFycmF5ICAkY29uZmlnICBGdWxsIGNvbmZpZ3VyYXRpb24gbWFwLg0KCSAqDQoJICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY29uZmlnKQ0KCXsNCgkJJHJlcXVpcmVkID0gWw0KCQkJJ2d1aWQnLA0KCQkJJ25hbWUnLA0KCQkJJ2FjY2VzcycsDQoJCQkncXVhbnRpdHknLA0KCQkJJ2Rvd25sb2FkX2FjY2VzcycsDQoJCQknZmllbGQnLA0KCQkJJ3R5cGUnLA0KCQkJJ3BhdGgnLA0KCQldOw0KDQoJCSRub3RfZW1wdHkgPSBbDQoJCQknZ3VpZCcsDQoJCQknbmFtZScsDQoJCQknZmllbGQnLA0KCQkJJ3R5cGUnLA0KCQkJJ3BhdGgnDQoJCV07DQoNCgkJZm9yZWFjaCAoJHJlcXVpcmVkIGFzICRrZXkpDQoJCXsNCgkJCWlmICghYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkY29uZmlnKSkNCgkJCXsNCgkJCQl0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiTWlzc2luZyB0eXBlIGRlZmluaXRpb24gY29uZmlnOiB7JGtleX0iKTsNCgkJCX0NCg0KCQkJaWYgKGluX2FycmF5KCRrZXksICRub3RfZW1wdHksIHRydWUpICYmIHRyaW0oKHN0cmluZykgJGNvbmZpZ1ska2V5XSkgPT09ICcnKQ0KCQkJew0KCQkJCXRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJFbXB0eSB2YWx1ZSBub3QgYWxsb3dlZCBmb3IgY29uZmlnOiB7JGtleX0iKTsNCgkJCX0NCgkJfQ0KDQoJCSR0aGlzLT5ndWlkICAgICAgICAgICA9IChzdHJpbmcpICRjb25maWdbJ2d1aWQnXTsNCgkJJHRoaXMtPm5hbWUgICAgICAgICAgID0gKHN0cmluZykgJGNvbmZpZ1snbmFtZSddOw0KCQkkdGhpcy0+YWNjZXNzICAgICAgICAgPSAoaW50KSAkY29uZmlnWydhY2Nlc3MnXTsNCgkJJHRoaXMtPnF1YW50aXR5ICAgICAgID0gKGludCkgJGNvbmZpZ1sncXVhbnRpdHknXTsNCgkJJHRoaXMtPmRvd25sb2FkQWNjZXNzID0gKGludCkgJGNvbmZpZ1snZG93bmxvYWRfYWNjZXNzJ107DQoJCSR0aGlzLT5maWVsZCAgICAgICAgICA9IChzdHJpbmcpICRjb25maWdbJ2ZpZWxkJ107DQoJCSR0aGlzLT50eXBlICAgICAgICAgICA9IChzdHJpbmcpICRjb25maWdbJ3R5cGUnXTsNCgkJJHRoaXMtPnBhdGggICAgICAgICAgID0gKHN0cmluZykgJGNvbmZpZ1sncGF0aCddOw0KCQkkdGhpcy0+ZmlsdGVyICAgICAgICAgPSAkY29uZmlnWydmaWx0ZXInXSA/PyBudWxsOw0KCQkkdGhpcy0+Zm9ybWF0cyAgICAgICAgPSBpc3NldCgkY29uZmlnWydmb3JtYXRzJ10pID8gKGFycmF5KSAkY29uZmlnWydmb3JtYXRzJ10gOiBbXTsNCgkJJHRoaXMtPmNyb3AgICAgICAgICAgID0gaXNzZXQoJGNvbmZpZ1snY3JvcCddKSA/IChhcnJheSkgJGNvbmZpZ1snY3JvcCddIDogW107DQoJfQ0KDQoJLyoqDQoJICogR2V0IEdVSUQuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ3VpZCgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+Z3VpZDsNCgl9DQoNCgkvKioNCgkgKiBHZXQgaHVtYW4tcmVhZGFibGUgbmFtZS4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBuYW1lKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5uYW1lOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB1cGxvYWQgYWNjZXNzIGxldmVsLg0KCSAqDQoJICogQHJldHVybiBpbnQNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGFjY2VzcygpOiBpbnQNCgl7DQoJCXJldHVybiAkdGhpcy0+YWNjZXNzOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBxdWFudGl0eSBsaW1pdC4NCgkgKg0KCSAqIEByZXR1cm4gaW50DQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBxdWFudGl0eSgpOiBpbnQNCgl7DQoJCXJldHVybiAkdGhpcy0+cXVhbnRpdHk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGRvd25sb2FkIGFjY2VzcyBsZXZlbC4NCgkgKg0KCSAqIEByZXR1cm4gaW50DQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkb3dubG9hZEFjY2VzcygpOiBpbnQNCgl7DQoJCXJldHVybiAkdGhpcy0+ZG93bmxvYWRBY2Nlc3M7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHVwbG9hZCBmaWVsZCBuYW1lLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGZpZWxkKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5maWVsZDsNCgl9DQoNCgkvKioNCgkgKiBHZXQgdHlwZSBpZGVudGlmaWVyLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHR5cGUoKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPnR5cGU7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGZpbHRlciBtb2RlLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmd8bnVsbA0KCSAqIEBzaW5jZSAgNS4xLjQNCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZmlsdGVyKCk6ID9zdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+ZmlsdGVyOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0YXJnZXQgcGF0aC4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBwYXRoKCk6IHN0cmluZw0KCXsNCgkJcmV0dXJuICR0aGlzLT5wYXRoOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBhbGxvd2VkIGV4dGVuc2lvbnMuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5PGludCxzdHJpbmc+DQoJICogQHNpbmNlICA1LjEuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmb3JtYXRzKCk6IGFycmF5DQoJew0KCQlyZXR1cm4gJHRoaXMtPmZvcm1hdHM7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGNyb3AgY29uZmlndXJhdGlvbi4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGNyb3AoKTogYXJyYXkNCgl7DQoJCXJldHVybiAkdGhpcy0+Y3JvcDsNCgl9DQoNCgkvKioNCgkgKiBFeHBvcnQgdGhlIGZ1bGwgdHlwZSBkZWZpbml0aW9uIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5Lg0KCSAqDQoJICogVGhpcyByZXR1cm5zIHRoZSBleGFjdCBzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgY29uc3RydWN0b3IsDQoJICogZW5zdXJpbmcgaXQgY2FuIGJlIHNhZmVseSBzdG9yZWQsIHNlcmlhbGl6ZWQsIG9yIHJlYnVpbHQuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5ICBUaGUgZnVsbCBjb25maWd1cmF0aW9uIG1hcC4NCgkgKiBAc2luY2UgIDUuMS40DQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTogYXJyYXkNCgl7DQoJCXJldHVybiBbDQoJCQknZ3VpZCcgICAgICAgICAgICA9PiAkdGhpcy0+Z3VpZCwNCgkJCSduYW1lJyAgICAgICAgICAgID0+ICR0aGlzLT5uYW1lLA0KCQkJJ2FjY2VzcycgICAgICAgICAgPT4gJHRoaXMtPmFjY2VzcywNCgkJCSdxdWFudGl0eScgICAgICAgID0+ICR0aGlzLT5xdWFudGl0eSwNCgkJCSdkb3dubG9hZF9hY2Nlc3MnID0+ICR0aGlzLT5kb3dubG9hZEFjY2VzcywNCgkJCSdmaWVsZCcgICAgICAgICAgID0+ICR0aGlzLT5maWVsZCwNCgkJCSd0eXBlJyAgICAgICAgICAgID0+ICR0aGlzLT50eXBlLA0KCQkJJ2Zvcm1hdHMnICAgICAgICAgPT4gJHRoaXMtPmZvcm1hdHMsDQoJCQknZmlsdGVyJyAgICAgICAgICA9PiAkdGhpcy0+ZmlsdGVyLA0KCQkJJ3BhdGgnICAgICAgICAgICAgPT4gJHRoaXMtPnBhdGgsDQoJCQknY3JvcCcgICAgICAgICAgICA9PiAkdGhpcy0+Y3JvcCwNCgkJXTsNCgl9', '{}', '{}', NULL, 1, '2025-12-11 10:17:46', 11, 0, 1), @@ -2995,7 +2995,7 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`, (3521, 0, 0, 0, 0, '', '', '', '', 255, '', 'VARCHAR', 0, '', '', 'State (dynamic list)', 'NULL', 0, 'a51dfc06-1b9b-4d0a-86ba-f705bcd40d4d', '\"\"', 1, '2025-10-17 08:50:58', NULL, 1, 0, 0, 'e80df9fc-5f50-468d-888c-e19cd96c3db1', NULL, NULL, '', '', NULL), (3522, 0, 0, 0, 0, '', '', '', '', 255, '', 'VARCHAR', 0, '', '', 'City (dynamic list)', 'NULL', 0, 'a51dfc06-1b9b-4d0a-86ba-f705bcd40d4d', '\"\"', 1, '2025-10-17 08:50:59', NULL, 1, 0, 0, 'd95dc35a-7467-4010-8d35-f3dab696a808', NULL, NULL, '', '', NULL), (3523, 0, 0, 0, 0, '', '', '', '', 'Other', 36, 'VARCHAR', 2, '', '', 'Look (address-modal)', 'NULL', 0, 'a1cdb0a5-517c-425c-998a-333e92af3e32', '\"\"', 1, '2025-10-17 10:23:49', '2025-10-17 10:23:52', 2, 0, 1096, 'aaa5761f-3270-43ce-a95b-db1a22f8c88d', NULL, NULL, '', '', NULL), -(3568, 0, 0, 0, 0, '', '', '', '', '', '', 'TEXT', '', '', '', 'Addresses (look-subform)', 'NULL', 6, '7139f2c8-a70a-46a6-bbe3-4eefe54ca515', '\"\"', 1, '2025-12-22 12:51:56', '2025-12-22 12:52:00', 2, 0, 1105, '71e5f1b0-7c81-4fbb-8a05-e3949212f2ed', 'W1tbZmllbGRdXV0gPSBTdXBlcl9fXzlkNzZiOGRjXzM4ODNfNDc1NV9iMTFjXzEzMWQxOWNhOGE1M19fX1Bvd2VyOjpfKCdEYXRhLlN1YmZvcm0nKS0+dGFibGUoJ2FkZHJlc3MnKS0+Z2V0KCRpdGVtLT5ndWlkID8/ICcnICwnbG9vaycsICdhZGRyZXNzZXMnLCBbJ2d1aWQnLCd0eXBlJywnbGluZV9vbmUnLCdsaW5lX3R3bycsJ2NvdW50cnknLCdzdGF0ZScsJ2NpdHknLCdwb3N0YWwnXSk7', 'aWYgKGlzc2V0KFtbW2ZpZWxkXV1dKSkNCnsNCglTdXBlcl9fXzlkNzZiOGRjXzM4ODNfNDc1NV9iMTFjXzEzMWQxOWNhOGE1M19fX1Bvd2VyOjpfKCdEYXRhLlN1YmZvcm0nKS0+dGFibGUoJ2FkZHJlc3MnKS0+c2V0KFtbW2ZpZWxkXV1dID8/IFtdLCAnZ3VpZCcsICdsb29rJywgJGRhdGFbJ2d1aWQnXSA/PyAnJyk7DQp9', '', '', NULL); +(3568, 0, 0, 0, 0, '', '', '', '', '', '', 'TEXT', '', '', '', 'Addresses (look-subform)', 'NULL', 6, '7139f2c8-a70a-46a6-bbe3-4eefe54ca515', '\"\"', 1, '2025-12-22 12:51:56', '2026-03-23 09:10:24', 6, 0, 1105, '71e5f1b0-7c81-4fbb-8a05-e3949212f2ed', 'W1tbZmllbGRdXV0gPSBTdXBlcl9fXzlkNzZiOGRjXzM4ODNfNDc1NV9iMTFjXzEzMWQxOWNhOGE1M19fX1Bvd2VyOjpfKCdEYXRhLlN1YmZvcm0nKS0+dGFibGUoJ2FkZHJlc3MnKS0+Z2V0KCRpdGVtLT5ndWlkID8/ICcnICwnbG9vaycsICdhZGRyZXNzZXMnLCBbJ2d1aWQnLCd0eXBlJywnbGluZV9vbmUnLCdsaW5lX3R3bycsJ2NvdW50cnknLCdzdGF0ZScsJ2NpdHknLCdwb3N0YWwnXSk7', 'aWYgKGlzc2V0KFtbW2ZpZWxkXV1dKSkNCnsNCglTdXBlcl9fXzlkNzZiOGRjXzM4ODNfNDc1NV9iMTFjXzEzMWQxOWNhOGE1M19fX1Bvd2VyOjpfKCdEYXRhLlN1YmZvcm0nKS0+dGFibGUoJ2FkZHJlc3MnKS0+c2V0KFtbW2ZpZWxkXV1dID8/IFtdLCAnZ3VpZCcsICdsb29rJywgJGRhdGFbJ2d1aWQnXSA/PyAnJyk7DQp9', '', '', NULL); diff --git a/admin/sql/updates/mysql/6_1_4.sql b/admin/sql/updates/mysql/6_1_4.sql new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/admin/sql/updates/mysql/6_1_4.sql @@ -0,0 +1 @@ + diff --git a/admin/src/Model/AjaxModel.php b/admin/src/Model/AjaxModel.php index 689ce8c07..7a65fda54 100644 --- a/admin/src/Model/AjaxModel.php +++ b/admin/src/Model/AjaxModel.php @@ -5339,57 +5339,86 @@ class AjaxModel extends ListModel } // Used in admin_fields_relations - public function getCodeGlueOptions($listfield, $joinfields, $type, $area) + /** + * Get the code glue options string. + * + * @param string $listfield The main list field GUID. + * @param string $joinfields A comma-separated list of join field GUIDs or 'none'. + * @param int $type The glue type. + * @param int $area The target area. + * + * @return string|false + * @since 5.3.10 + */ + public function getCodeGlueOptions(string $listfield, string $joinfields, int $type, int $area) { // CONCATENATE GLUE - if ($type == 1) + if ($type === 1) { // MODEL - if ($area == 1 || $area == 3) + if ($area === 1 || $area === 3) { return ', '; } + // VIEW - elseif ($area == 2) + if ($area === 2) { return '
    '; } } // CUSTOM CODE - elseif ($type == 2) + elseif ($type === 2) { - // build fields array - if ('none' !== $joinfields) + if ($joinfields !== 'none') { - $fields = array_map( function ($guid) { - return (string) $guid; - }, (array) explode(',', $joinfields)); - // add the list field to array - array_unshift($fields, (string) $listfield); + $fields = array_filter( + array_map( + static function ($guid) { + return trim((string) $guid); + }, + explode(',', $joinfields) + ), + static function ($guid) { + return $guid !== ''; + } + ); + + array_unshift($fields, $listfield); } else { - $fields = array((string) $listfield); + $fields = [$listfield]; } - // get field names - $names = array_map( function ($guid) { - return '[' . $guid . ']=> ' . GetHelper::var('field', $guid, 'guid', 'name'); - }, $fields); + + $names = array_map( + static function ($guid) { + return '[' . $guid . ']=> ' . GetHelper::var('field', $guid, 'guid', 'name'); + }, + $fields + ); + // MODEL - if ($area == 1 || $area == 3) + if ($area === 1 || $area === 3) { - // create note - $note = "// ". implode('; ', $names); - return $note . PHP_EOL . '$item->{'.(string)$listfield.'} = $item->{' . implode("} . ', ' . \$item->{", $fields) . '};'; + $note = '// ' . implode('; ', $names); + + return $note . PHP_EOL + . '$item->{' . $listfield . '} = $item->{' + . implode("} . ', ' . \$item->{", $fields) + . '};'; } + // VIEW - elseif ($area == 2) + if ($area === 2) { - // create note - $note = ""; - return '[field=' . implode("]
    [field=", $fields). ']' . PHP_EOL . PHP_EOL . $note; + $note = ''; + + return '[field=' . implode(']
    [field=', $fields) . ']' + . PHP_EOL . PHP_EOL . $note; } } + return false; } diff --git a/admin/tmpl/componentbuilder/default.php b/admin/tmpl/componentbuilder/default.php index 4bfa41cf9..01f0e9052 100644 --- a/admin/tmpl/componentbuilder/default.php +++ b/admin/tmpl/componentbuilder/default.php @@ -18,45 +18,57 @@ use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; defined('_JEXEC') or die; ?> -
    -
    - 'cpanel')); ?> +
    +
    +
    + 'cpanel')); ?> - -
    -
    - loadTemplate('main');?> + +
    +
    +
    + loadTemplate('main');?> +
    -
    - loadTemplate('vdm');?> +
    +
    + loadTemplate('vdm');?> +
    +
    + + + +
    +
    +
    + loadTemplate('doc_start_here');?> +
    +
    +
    + + + +
    +
    +
    + loadTemplate('notice_board_vast_development_method');?> +
    +
    +
    + + + +
    +
    +
    + loadTemplate('readme_information');?> +
    +
    +
    + + +
    - - - -
    -
    - loadTemplate('doc_start_here');?> -
    -
    - - - -
    -
    - loadTemplate('notice_board_vast_development_method');?> -
    -
    - - - -
    -
    - loadTemplate('readme_information');?> -
    -
    - - -
    \ No newline at end of file diff --git a/admin/tmpl/componentbuilder/default_main.php b/admin/tmpl/componentbuilder/default_main.php index 3ca794477..0c997abed 100644 --- a/admin/tmpl/componentbuilder/default_main.php +++ b/admin/tmpl/componentbuilder/default_main.php @@ -15,18 +15,33 @@ use Joomla\CMS\Language\Text; defined('_JEXEC') or die; ?> -icons['main']) && is_array($this->icons['main'])) :?> - icons['main'] as $icon): ?> -
    - -
    - -

    +icons['main']) && is_array($this->icons['main']) && !empty($this->icons['main'])) : ?> +
    + icons['main'] as $icon) : ?> + + +
    + +
    +

    + +

    +
    + +
    +
    \ No newline at end of file diff --git a/admin/tmpl/componentbuilder/default_vdm.php b/admin/tmpl/componentbuilder/default_vdm.php index d90c286a8..ddaa4f5c4 100644 --- a/admin/tmpl/componentbuilder/default_vdm.php +++ b/admin/tmpl/componentbuilder/default_vdm.php @@ -16,26 +16,69 @@ use VDM\Joomla\Utilities\ArrayHelper; defined('_JEXEC') or die; ?> -<?php echo Text::_('COM_COMPONENTBUILDER'); ?> - -
    -contributors)): ?> - contributors) > 1): ?> -

    - -

    - -
      - contributors as $contributor): ?> -
    • :
    • - +
      +
      + <?php echo Text::_('COM_COMPONENTBUILDER'); ?> +
      + -
      - \ No newline at end of file + contributors)) : ?> +
      +

      + contributors) > 1) : ?> + + + + +

      +
        + contributors as $contributor) : ?> +
      • + : + +
      • + +
      +
      + +
      \ No newline at end of file diff --git a/changelog.xml b/changelog.xml index 82b28d1a9..3c41f8483 100644 --- a/changelog.xml +++ b/changelog.xml @@ -349,4 +349,22 @@ Rename Custom Buttons tab to Toolbar for clearer grouping of toolbar functions. #1268 + + com_componentbuilder + component + 6.1.5 + + Fix variable name mismatch for organization in the Network Resolve class. #1291 + Fix issue where Admin Field relations using custom code did not automatically include multiple fields as expected. #1293 + Fix issue where Admin Field relations did not correctly apply concatenation/glue options. #1294 + Fix deprecated warnings triggered in the JCB CLI. + Fix resolve PHP syntax errors and PHP 8.4 deprecations across codebase. + Fix four fatal parse/compile errors. + Fix implicit nullable parameter deprecations. + + + Refactor Compiler functions to improve maintainability and align with modern PHP coding best practices. + Refactor the JCB Dashboard, introducing a modernized layout, improved usability, and full responsiveness across desktop, tablet, and mobile devices. + + diff --git a/componentbuilder.xml b/componentbuilder.xml index 706949a33..d4c04faea 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,15 +1,15 @@ COM_COMPONENTBUILDER - 18th February, 2026 + 24th March, 2026 Llewellyn van der Merwe joomla@vdm.io https://dev.vdm.io Copyright (C) 2015 Vast Development Method. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt - 6.1.4 + 6.1.5 Component Builder (v.6.1.4) +

      Component Builder (v.6.1.5)

      The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time. diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml index 6713d8e93..843877ba4 100644 --- a/componentbuilder_update_server.xml +++ b/componentbuilder_update_server.xml @@ -17,7 +17,6 @@ Llewellyn van der Merwe https://dev.vdm.io - f592b05f2c569d9b403a46c82c8e7a09cd4e2772f471f9a4eba56b2c69a6baf13244f2e4c4da5c4989d2393cfce4074696266820811c4b08b22b26373ac29deb Component Builder @@ -36,7 +35,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 37aaab28b87d958584cd225de9a1b4de2c20b1f99d3e5856c9f9658c027a6e97a18d2a4016a2d04850cf29e0f64f30e7ab6dee6d09496448cadecddc40589dad Component Builder @@ -55,7 +53,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 8ee66ec4040b40ca6c051b069d946f883cc741c91d75d7edad0fe17f06a3001dc6e5c09aa9dbf4f35d0d08b524f0e4fdc63683571c68c8651ea6bb521169fbca Component Builder @@ -74,7 +71,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 987a41234f52a9e632825445039b6feb8ca5d2c2118f570a0777d78603efe7ad6bd31547a2d2fe31421d5105e04799b31dc86c55f77a3d53e1a60d7a174c4f45 Component Builder @@ -93,7 +89,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 987a41234f52a9e632825445039b6feb8ca5d2c2118f570a0777d78603efe7ad6bd31547a2d2fe31421d5105e04799b31dc86c55f77a3d53e1a60d7a174c4f45 Component Builder @@ -112,6 +107,23 @@ Llewellyn van der Merwe https://dev.vdm.io - cde289bdd21689dcb90ac68d44573ce52c0ff861ff02780327b1ff7f3a58918ddcf010f1e4a2b79af17cd91bf33ee4b81d99a8be9d98ce81e560614bd26d6a66 - + + Component Builder + Builds Complex Joomla Components + pkg_component_builder + package + admininstrator + 6.1.5 + https://dev.vdm.io + + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v6.1.5.zip + + + stable + + Llewellyn van der Merwe + https://dev.vdm.io + + + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla.Git/src/Repository/Contents.php b/libraries/vendor_jcb/VDM.Joomla.Git/src/Repository/Contents.php index 2a46e23fa..32b676e36 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Git/src/Repository/Contents.php +++ b/libraries/vendor_jcb/VDM.Joomla.Git/src/Repository/Contents.php @@ -345,7 +345,7 @@ final class Contents implements ContentsInterface * @return string|null * @since 5.1.1 **/ - public function editor(string $owner, string $repo, string $filepath, string $ref = null): ?string + public function editor(string $owner, string $repo, string $filepath, ?string $ref = null): ?string { $target = $this->getTarget(); return $this->{$target}->editor($owner, $repo, $filepath, $ref); diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Issue/Milestones.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Issue/Milestones.php index 5178a7371..2f2a10300 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Issue/Milestones.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Issue/Milestones.php @@ -187,10 +187,10 @@ class Milestones extends Api string $owner, string $repo, string $milestoneId, - string $title = null, - string $description = null, - string $dueOn = null, - string $state = null + ?string $title = null, + ?string $description = null, + ?string $dueOn = null, + ?string $state = null ): ?object { // Set the lines data diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Issue/Times.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Issue/Times.php index 7c33c2ab6..56c407c71 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Issue/Times.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Issue/Times.php @@ -41,11 +41,11 @@ class Times extends Api string $owner, string $repo, int $index, - string $user = null, - string $since = null, - string $before = null, - int $page = null, - int $limit = null + ?string $user = null, + ?string $since = null, + ?string $before = null, + ?int $page = null, + ?int $limit = null ): ?array { // Build the request path. @@ -98,8 +98,8 @@ class Times extends Api string $repo, int $index, int $time, - string $created = null, - string $userName = null + ?string $created = null, + ?string $userName = null ): ?object { // Set the lines data diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Organization/Teams.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Organization/Teams.php index 46a27b078..14aae42e5 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Organization/Teams.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Organization/Teams.php @@ -99,8 +99,8 @@ class Teams extends Api string $permission = 'read', array $units = [], array $unitsMap = [], - bool $canCreateOrgRepo = null, - bool $includesAllRepositories = null + ?bool $canCreateOrgRepo = null, + ?bool $includesAllRepositories = null ): ?object { // Build the request path. diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Collaborator.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Collaborator.php index 38ee5127f..eec87f6cc 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Collaborator.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Collaborator.php @@ -94,7 +94,7 @@ class Collaborator extends Api string $owner, string $repo, string $collaborator, - string $permission = null + ?string $permission = null ): string { // Build the request path. diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Commits.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Commits.php index d8142c230..cfafb6702 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Commits.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Commits.php @@ -158,8 +158,8 @@ class Commits extends Api string $owner, string $repo, string $ref, - string $sort = null, - string $state = null, + ?string $sort = null, + ?string $state = null, int $page = 1, int $limit = 10 ): ?array diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Contents.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Contents.php index f16c8499e..16f0210fe 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Contents.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Contents.php @@ -467,7 +467,7 @@ class Contents extends Api implements ContentsInterface * @return string|null * @since 3.2.0 **/ - public function editor(string $owner, string $repo, string $filepath, string $ref = null): ?string + public function editor(string $owner, string $repo, string $filepath, ?string $ref = null): ?string { // Build the request path. $path = "/repos/{$owner}/{$repo}/editorconfig/{$filepath}"; diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Hooks.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Hooks.php index eadb2e61d..292a8b846 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Hooks.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Hooks.php @@ -73,8 +73,6 @@ class Hooks extends Api string $repo, string $type, array $config, - string $type, - array $config, bool $active = false, ?array $events = null, string $branchFilter = '' diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Pulls.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Pulls.php index a979e797e..ca571b763 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Pulls.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Pulls.php @@ -517,7 +517,7 @@ class Pulls extends Api * @return string * @since 3.2.0 */ - public function update( + public function mergeUpdate( string $owner, string $repo, int $index, diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Times.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Times.php index bae141607..d0b96b31a 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Times.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Times.php @@ -39,9 +39,9 @@ class Times extends Api public function list( string $ownerName, string $repoName, - string $user = null, - string $since = null, - string $before = null, + ?string $user = null, + ?string $since = null, + ?string $before = null, int $page = 1, int $limit = 10 ): ?array diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Wiki.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Wiki.php index 1a80320a4..6aeaeecd5 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Wiki.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/Repository/Wiki.php @@ -172,7 +172,7 @@ class Wiki extends Api implements WikiInterface string $pageName, string $title, string $content, - string $message = null + ?string $message = null ): ?object { // Build the request path. diff --git a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/User.php b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/User.php index bb9c82e7a..693cbeaad 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Gitea/src/User.php +++ b/libraries/vendor_jcb/VDM.Joomla.Gitea/src/User.php @@ -88,7 +88,7 @@ class User extends Api * @return object|null * @since 3.2.0 **/ - public function get(string $username): o?bject + public function get(string $username): ?object { // Build the request path. $path = "/users/{$username}"; diff --git a/libraries/vendor_jcb/VDM.Joomla.Github/src/Repository/Contents.php b/libraries/vendor_jcb/VDM.Joomla.Github/src/Repository/Contents.php index ec86007a9..7f23aa61e 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Github/src/Repository/Contents.php +++ b/libraries/vendor_jcb/VDM.Joomla.Github/src/Repository/Contents.php @@ -450,7 +450,7 @@ final class Contents extends Api implements ContentsInterface * @return string|null * @since 5.1.1 **/ - public function editor(string $owner, string $repo, string $filepath, string $ref = null): ?string + public function editor(string $owner, string $repo, string $filepath, ?string $ref = null): ?string { // Not supported in GitHub return null; diff --git a/libraries/vendor_jcb/VDM.Joomla.Github/src/Repository/Wiki.php b/libraries/vendor_jcb/VDM.Joomla.Github/src/Repository/Wiki.php index ba6e9c345..eae0485c2 100644 --- a/libraries/vendor_jcb/VDM.Joomla.Github/src/Repository/Wiki.php +++ b/libraries/vendor_jcb/VDM.Joomla.Github/src/Repository/Wiki.php @@ -136,7 +136,7 @@ class Wiki extends Api implements WikiInterface string $pageName, string $title, string $content, - string $message = null + ?string $message = null ): ?object { return null; // github does not support wiki over API diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem.php new file mode 100644 index 000000000..546c8ec01 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem.php @@ -0,0 +1,261 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews; + + +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem\ItemCode; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem\Link; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem\LinkAuthority; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem\LinkLogic; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * List Item Class + * + * @since 5.1.5 + */ +final class ListItem +{ + /** + * The ItemCode Class. + * + * @var ItemCode + * @since 5.1.5 + */ + protected ItemCode $itemcode; + + /** + * The Link Class. + * + * @var Link + * @since 5.1.5 + */ + protected Link $link; + + /** + * The LinkAuthority Class. + * + * @var LinkAuthority + * @since 5.1.5 + */ + protected LinkAuthority $linkauthority; + + /** + * The LinkLogic Class. + * + * @var LinkLogic + * @since 5.1.5 + */ + protected LinkLogic $linklogic; + + /** + * Constructor. + * + * @param ItemCode $itemcode The ItemCode Class. + * @param Link $link The Link Class. + * @param LinkAuthority $linkauthority The LinkAuthority Class. + * @param LinkLogic $linklogic The LinkLogic Class. + * + * @since 5.1.5 + */ + public function __construct( + ItemCode $itemcode, + Link $link, + LinkAuthority $linkauthority, + LinkLogic $linklogic + ) { + $this->itemcode = $itemcode; + $this->link = $link; + $this->linkauthority = $linkauthority; + $this->linklogic = $linklogic; + } + + /** + * Get the list item row value. + * + * @param array $item The item array. + * @param string $nameSingleCode The single view code name. + * @param string $nameListCode The list view code name. + * @param string &$itemClass The table row default class. + * @param bool $doNotEscape The do not escape global switch. + * @param bool $class The div class adding switch. + * @param string|null $ref The link referral string. + * @param string $classPointer The class pointer. + * @param string $user The user code name. + * @param string|null $refview The override of the referral view code name. + * + * @return string The single item value for the table row. + * @since 5.1.5 + */ + public function get( + array $item, + string $nameSingleCode, + string $nameListCode, + string &$itemClass, + bool $doNotEscape, + bool $class = true, + ?string $ref = null, + string $classPointer = '$this->', + string $user = '$this->user', + ?string $refview = null + ): string { + $itemCode = $this->itemcode->get( + $item, + $nameListCode, + $doNotEscape, + $classPointer + ); + + if (!$this->shouldRenderLinkedItem($item, $refview)) + { + return $this->getPlainListItemOutput($itemCode); + } + + return $this->getLinkedListItemOutput( + $item, + $itemCode, + $nameSingleCode, + $nameListCode, + $itemClass, + $class, + $ref, + $classPointer, + $user + ); + } + + /** + * Check whether the item should be rendered as a linked item. + * + * @param array $item The item array. + * @param string|null $refview The override of the referral view code name. + * + * @return bool True if the item should be rendered as a link. + * @since 5.1.5 + */ + protected function shouldRenderLinkedItem(array $item, ?string $refview = null): bool + { + if ($this->shouldNotUseDefaultLink($item, $refview)) + { + return false; + } + + $extendsField = $this->getCustomExtendsField($item); + + return (!empty($item['link']) || $extendsField === 'user'); + } + + /** + * Check whether the default link should not be used. + * + * @param array $item The item array. + * @param string|null $refview The override of the referral view code name. + * + * @return bool True if the default link should not be used. + * @since 5.1.5 + */ + protected function shouldNotUseDefaultLink(array $item, ?string $refview = null): bool + { + return StringHelper::check($refview) + && isset($item['custom']) + && isset($item['custom']['view']) + && $refview === $item['custom']['view']; + } + + /** + * Get the custom extends field value. + * + * @param array $item The item array. + * + * @return string The custom extends field value. + * @since 5.1.5 + */ + protected function getCustomExtendsField(array $item): string + { + return $item['custom']['extends'] ?? ''; + } + + /** + * Build the linked list item output. + * + * @param array $item The item array. + * @param string $itemCode The item code string. + * @param string $nameSingleCode The single view code name. + * @param string $nameListCode The list view code name. + * @param string &$itemClass The table row default class. + * @param bool $class The div class adding switch. + * @param string|null $ref The link referral string. + * @param string $classPointer The class pointer. + * @param string $user The user code name. + * + * @return string The linked list item output. + * @since 5.1.5 + */ + protected function getLinkedListItemOutput( + array $item, + string $itemCode, + string $nameSingleCode, + string $nameListCode, + string &$itemClass, + bool $class = true, + ?string $ref = null, + string $classPointer = '$this->', + string $user = '$this->user' + ): string { + $checkoutTriger = false; + $itemClass = 'nowrap'; + + $itemLink = $this->link->get( + $item, + $checkoutTriger, + $nameSingleCode, + $nameListCode, + $ref + ); + + $itemLinkAuthority = $this->linkauthority->get( + $item, + $nameSingleCode, + $nameListCode, + $classPointer, + $user + ); + + return $this->linklogic->get( + $item, + $itemCode, + $itemLink, + $itemLinkAuthority, + $nameSingleCode, + $nameListCode, + $classPointer, + $checkoutTriger, + $class + ); + } + + /** + * Build the plain list item output. + * + * @param string $itemCode The item code string. + * + * @return string The plain list item output. + * @since 5.1.5 + */ + protected function getPlainListItemOutput(string $itemCode): string + { + return PHP_EOL . Indent::_(3) . ""; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/ItemCode.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/ItemCode.php new file mode 100644 index 000000000..a614ff4dc --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/ItemCode.php @@ -0,0 +1,324 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SelectionTranslation; +use VDM\Joomla\Componentbuilder\Compiler\Builder\DoNotEscape; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\ArrayHelper; + + +/** + * List Item Item Code Class + * + * @since 5.1.5 + */ +final class ItemCode +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.5 + */ + protected Config $config; + + /** + * The SelectionTranslation Class. + * + * @var SelectionTranslation + * @since 5.1.5 + */ + protected SelectionTranslation $selectiontranslation; + + /** + * The DoNotEscape Class. + * + * @var DoNotEscape + * @since 5.1.5 + */ + protected DoNotEscape $donotescape; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param SelectionTranslation $selectiontranslation The SelectionTranslation Class. + * @param DoNotEscape $donotescape The DoNotEscape Class. + * + * @since 5.1.5 + */ + public function __construct( + Config $config, + SelectionTranslation $selectiontranslation, + DoNotEscape $donotescape + ) { + $this->config = $config; + $this->selectiontranslation = $selectiontranslation; + $this->donotescape = $donotescape; + } + + /** + * Get the list item code value. + * + * @param array $item The item array. + * @param string $nameListCode The list view code name. + * @param bool $doNotEscape The do not escape global switch. + * @param string $classPointer The class pointer. + * + * @return string The single item code string. + * @since 5.1.5 + */ + public function get( + array &$item, + string $nameListCode, + bool $doNotEscape, + string $classPointer = '$this->' + ): string { + $this->prepareCustomItemCode($item); + + $extendsField = $item['custom']['extends'] ?? ''; + $extendsText = $item['custom']['text'] ?? ''; + + if ($this->isCategoryWithoutTitle($item)) + { + return $this->getCategoryTitleCode($classPointer); + } + + if ($this->isDirectUserType($item)) + { + return $this->getUserNameCode($item['code']); + } + + if ($this->isCustomUserById($item, $extendsField)) + { + return $this->getUserNameCode($item['id_code']); + } + + if ($this->hasTranslatedSelection($nameListCode, $item['code'])) + { + return $this->getTranslatedSelectionCode($item['code']); + } + + if ($this->isCustomUserField($item, $extendsField, $extendsText)) + { + return $this->getUserNameCode($item['code']); + } + + if ( + $doNotEscape + && $this->shouldNotEscapeField($nameListCode, $item['code']) + ) { + return $this->getRawItemCode($item['code']); + } + + return $this->getEscapedItemCode($item['code'], $classPointer); + } + + /** + * Prepare the item code for custom table values. + * + * @param array $item The item array. + * + * @return void + * @since 5.1.5 + */ + protected function prepareCustomItemCode(array &$item): void + { + if ( + isset($item['custom']) + && ArrayHelper::check($item['custom']) + && isset($item['custom']['table']) + && StringHelper::check($item['custom']['table']) + ) { + $item['id_code'] = $item['code']; + + if (!(bool) $item['multiple']) + { + $item['code'] = $item['code'] . '_' . $item['custom']['text']; + } + } + } + + /** + * Check if the item is a category without a title field. + * + * @param array $item The item array. + * + * @return bool + * @since 5.1.5 + */ + protected function isCategoryWithoutTitle(array $item): bool + { + return $item['type'] === 'category' && !$item['title']; + } + + /** + * Check if the item is a direct user field type. + * + * @param array $item The item array. + * + * @return bool + * @since 5.1.5 + */ + protected function isDirectUserType(array $item): bool + { + return $item['type'] === 'user'; + } + + /** + * Check if the item is a custom user relation resolved by ID code. + * + * @param array $item The item array. + * @param string $extendsField The custom extends field value. + * + * @return bool + * @since 5.1.5 + */ + protected function isCustomUserById(array $item, string $extendsField): bool + { + return isset($item['custom']) + && ArrayHelper::check($item['custom']) + && $extendsField === 'user' + && isset($item['id_code']); + } + + /** + * Check if the item uses a translated selection value. + * + * @param string $nameListCode The list view code name. + * @param string $code The field code. + * + * @return bool + * @since 5.1.5 + */ + protected function hasTranslatedSelection(string $nameListCode, string $code): bool + { + return $this->selectiontranslation->exists($nameListCode . '.' . $code); + } + + /** + * Check if the item resolves to a custom user field. + * + * @param array $item The item array. + * @param string $extendsField The custom extends field value. + * @param string $extendsText The custom text value. + * + * @return bool + * @since 5.1.5 + */ + protected function isCustomUserField( + array $item, + string $extendsField, + string $extendsText + ): bool { + return isset($item['custom']) + && ArrayHelper::check($item['custom']) + && ($extendsText === 'user' || $extendsField === 'user'); + } + + /** + * Check if the field should not be escaped. + * + * @param string $nameListCode The list view code name. + * @param string $code The field code. + * + * @return bool + * @since 5.1.5 + */ + protected function shouldNotEscapeField(string $nameListCode, string $code): bool + { + return $this->donotescape->exists($nameListCode . '.' . $code); + } + + /** + * Get the category title code string. + * + * @param string $classPointer The class pointer. + * + * @return string + * @since 5.1.5 + */ + protected function getCategoryTitleCode(string $classPointer): string + { + return $classPointer . 'escape($item->category_title)'; + } + + /** + * Get the translated selection code string. + * + * @param string $code The field code. + * + * @return string + * @since 5.1.5 + */ + protected function getTranslatedSelectionCode(string $code): string + { + return 'Joomla__' + . '_ba6326ef_cb79_4348_80f4_ab086082e3c5___Power::_($item->' + . $code . ')'; + } + + /** + * Get the raw item code string. + * + * @param string $code The field code. + * + * @return string + * @since 5.1.5 + */ + protected function getRawItemCode(string $code): string + { + return '$item->' . $code; + } + + /** + * Get the escaped item code string. + * + * @param string $code The field code. + * @param string $classPointer The class pointer. + * + * @return string + * @since 5.1.5 + */ + protected function getEscapedItemCode(string $code, string $classPointer): string + { + return $classPointer . 'escape($item->' . $code . ')'; + } + + /** + * Get the user name lookup code string. + * + * @param string $code The field code. + * + * @return string + * @since 5.1.5 + */ + protected function getUserNameCode(string $code): string + { + if ((int) $this->config->get('joomla_version', 3) === 3) + { + return 'Joomla__' + . '_39403062_84fb_46e0_bac4_0023f766e827___Power::getUser((int)$item->' + . $code . ')->name'; + } + + return 'Joomla__' + . '_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->' + . 'get(Joomla__' + . '_c2980d12_c3ef_4e23_b4a2_e6af1f5900a9___Power::class)->' + . 'loadUserById((int) ($item->' . $code . ' ?? 0))->name'; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/Link.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/Link.php new file mode 100644 index 000000000..531f38ac5 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/Link.php @@ -0,0 +1,259 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem; + + +use VDM\Joomla\Componentbuilder\Compiler\Builder\Category; +use VDM\Joomla\Utilities\ArrayHelper; + + +/** + * List Item Link Class + * + * @since 5.1.5 + */ +final class Link +{ + /** + * The Category Class. + * + * @var Category + * @since 5.1.5 + */ + protected Category $category; + + /** + * Constructor. + * + * @param Category $category The Category Class. + * + * @since 5.1.5 + */ + public function __construct(Category $category) + { + $this->category = $category; + } + + /** + * Get the list item link. + * + * @param array $item The item array. + * @param bool &$checkoutTriger The checkout trigger switch. + * @param string $nameSingleCode The single view code name. + * @param string $nameListCode The list view code name. + * @param string|null $ref The link referral string. + * + * @return string The single item link. + * @since 5.1.5 + */ + public function get( + array $item, + bool &$checkoutTriger, + string $nameSingleCode, + string $nameListCode, + ?string $ref = null + ): string + { + [$ref, $referal] = $this->resolveReferral($ref); + + if ($this->isCategoryLink($item)) + { + return $this->buildCategoryLink($item, $nameListCode); + } + + if ($this->isDirectUserLink($item)) + { + return $this->buildUserLink($item['code']); + } + + if ($this->isCustomNonUserLink($item)) + { + return $this->buildCustomLink($item, $ref); + } + + if ($this->isCustomUserLink($item)) + { + return $this->buildUserLink($item['id_code']); + } + + $checkoutTriger = true; + + return $this->buildDefaultItemLink($referal); + } + + /** + * Resolve the referral values. + * + * @param string|null $ref The incoming referral string. + * + * @return array{0:string,1:string} The resolved ref and referal values. + * @since 5.1.5 + */ + protected function resolveReferral(?string $ref): array + { + $referal = ''; + + if (!$ref) + { + $ref = '&return=return_here; ?>'; + } + else + { + $referal = $ref; + } + + return [$ref, $referal]; + } + + /** + * Check if the item should link to a category edit page. + * + * @param array $item The item array. + * + * @return bool + * @since 5.1.5 + */ + protected function isCategoryLink(array $item): bool + { + return isset($item['type'], $item['title'], $item['code']) + && $item['type'] === 'category' + && !$item['title']; + } + + /** + * Build the category edit link. + * + * @param array $item The item array. + * @param string $nameListCode The list view code name. + * + * @return string + * @since 5.1.5 + */ + protected function buildCategoryLink(array $item, string $nameListCode): string + { + return 'index.php?option=com_categories&task=category.edit&id=' + . $item['code'] . '; ?>&extension=' + . $this->category->get("{$nameListCode}.extension", 'error'); + } + + /** + * Check if the item should link directly to a user edit page. + * + * @param array $item The item array. + * + * @return bool + * @since 5.1.5 + */ + protected function isDirectUserLink(array $item): bool + { + return isset($item['type'], $item['title'], $item['code']) + && $item['type'] === 'user' + && !$item['title']; + } + + /** + * Check if the item should link to a custom non-user target. + * + * @param array $item The item array. + * + * @return bool + * @since 5.1.5 + */ + protected function isCustomNonUserLink(array $item): bool + { + return isset($item['custom'], $item['title'], $item['id_code']) + && ArrayHelper::check($item['custom']) + && $item['custom']['extends'] != 'user' + && !$item['title']; + } + + /** + * Check if the item should link to a custom user target. + * + * @param array $item The item array. + * + * @return bool + * @since 5.1.5 + */ + protected function isCustomUserLink(array $item): bool + { + return isset($item['custom'], $item['title'], $item['id_code']) + && ArrayHelper::check($item['custom']) + && $item['custom']['extends'] === 'user' + && !$item['title']; + } + + /** + * Build the user edit link. + * + * @param string $code The item code field. + * + * @return string + * @since 5.1.5 + */ + protected function buildUserLink(string $code): string + { + return 'index.php?option=com_users&task=user.edit&id=' + . $code . ' ?>'; + } + + /** + * Build the custom item edit link. + * + * @param array $item The item array. + * @param string $ref The resolved referral string. + * + * @return string + * @since 5.1.5 + */ + protected function buildCustomLink(array $item, string $ref): string + { + $idField = $this->getCustomLinkIdField($item); + + return 'index.php?option=' . $item['custom']['component'] . '&view=' + . $item['custom']['views'] . '&task=' . $item['custom']['view'] + . '.edit&id=' . $idField . '; ?>' + . $ref; + } + + /** + * Get the ID field to use for a custom link. + * + * @param array $item The item array. + * + * @return string + * @since 5.1.5 + */ + protected function getCustomLinkIdField(array $item): string + { + if (isset($item['custom']['id']) && $item['custom']['id'] !== 'id') + { + return $item['id_code'] . '_id'; + } + + return $item['id_code']; + } + + /** + * Build the default item edit link. + * + * @param string $referal The referral string for linked tab/view handling. + * + * @return string + * @since 5.1.5 + */ + protected function buildDefaultItemLink(string $referal): string + { + return '&id=id; ?>' . $referal; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/LinkAuthority.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/LinkAuthority.php new file mode 100644 index 000000000..2ba6dd1a7 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/LinkAuthority.php @@ -0,0 +1,313 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\CategoryCode; +use VDM\Joomla\Componentbuilder\Compiler\Creator\Permission; +use VDM\Joomla\Utilities\ArrayHelper; + + +/** + * List Item Link Authority Class + * + * @since 5.1.5 + */ +final class LinkAuthority +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.5 + */ + protected Config $config; + + /** + * The CategoryCode Class. + * + * @var CategoryCode + * @since 5.1.5 + */ + protected CategoryCode $categorycode; + + /** + * The Permission Class. + * + * @var Permission + * @since 5.1.5 + */ + protected Permission $permission; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param CategoryCode $categorycode The CategoryCode Class. + * @param Permission $permission The Permission Class. + * + * @since 5.1.5 + */ + public function __construct( + Config $config, + CategoryCode $categorycode, + Permission $permission + ) { + $this->config = $config; + $this->categorycode = $categorycode; + $this->permission = $permission; + } + + /** + * Get the list item link authority. + * + * @param array $item The item array. + * @param string $nameSingleCode The single view code name. + * @param string $nameListCode The list view code name. + * @param string $classPointer The class pointer. + * @param string $user The user code name. + * + * @return string The single item link authority string. + * @since 5.1.5 + */ + public function get( + array $item, + string $nameSingleCode, + string $nameListCode, + string $classPointer = '$this->', + string $user = '$this->user' + ): string { + $isModal = $this->getModalAuthorityPrefix($classPointer); + + if ($this->isCategoryItemWithoutTitle($item)) + { + return $this->getCategoryItemAuthority( + $item, + $nameSingleCode, + $isModal, + $user + ); + } + + if ($this->isUserItemWithoutTitle($item)) + { + return $this->getUserItemAuthority($isModal, $user); + } + + if ($this->isCustomNonUserItemWithoutTitle($item)) + { + return $this->getCustomItemAuthority($item, $isModal, $user); + } + + if ($this->isCustomUserItemWithoutTitle($item)) + { + return $this->getUserItemAuthority($isModal, $user); + } + + return $this->getDefaultItemAuthority($nameSingleCode, $isModal); + } + + /** + * Get the modal authority prefix. + * + * @param string $classPointer The class pointer. + * + * @return string The modal authority prefix or an empty string. + * @since 5.1.5 + */ + protected function getModalAuthorityPrefix(string $classPointer): string + { + if ($this->config->get('joomla_version', 3) === 3) + { + return ''; + } + + return "!{$classPointer}isModal && "; + } + + /** + * Check if the item is a category item without a title. + * + * @param array $item The item array. + * + * @return bool True if the item is a category item without a title. + * @since 5.1.5 + */ + protected function isCategoryItemWithoutTitle(array $item): bool + { + return isset($item['type'], $item['title']) + && $item['type'] === 'category' + && !$item['title']; + } + + /** + * Check if the item is a user item without a title. + * + * @param array $item The item array. + * + * @return bool True if the item is a user item without a title. + * @since 5.1.5 + */ + protected function isUserItemWithoutTitle(array $item): bool + { + return isset($item['type'], $item['title']) + && $item['type'] === 'user' + && !$item['title']; + } + + /** + * Check if the item is a custom non-user item without a title. + * + * @param array $item The item array. + * + * @return bool True if the item is a custom non-user item without a title. + * @since 5.1.5 + */ + protected function isCustomNonUserItemWithoutTitle(array $item): bool + { + return $this->hasValidCustomItem($item) + && $item['custom']['extends'] !== 'user'; + } + + /** + * Check if the item is a custom user item without a title. + * + * @param array $item The item array. + * + * @return bool True if the item is a custom user item without a title. + * @since 5.1.5 + */ + protected function isCustomUserItemWithoutTitle(array $item): bool + { + return $this->hasValidCustomItem($item) + && $item['custom']['extends'] === 'user'; + } + + /** + * Check if the item contains a valid custom definition. + * + * @param array $item The item array. + * + * @return bool True if the item contains a valid custom definition. + * @since 5.1.5 + */ + protected function hasValidCustomItem(array $item): bool + { + return isset($item['custom'], $item['title'], $item['id_code']) + && ArrayHelper::check($item['custom']) + && !$item['title']; + } + + /** + * Get the category item authority string. + * + * @param array $item The item array. + * @param string $nameSingleCode The single view code name. + * @param string $isModal The modal authority prefix. + * @param string $user The user code name. + * + * @return string The category item authority string. + * @since 5.1.5 + */ + protected function getCategoryItemAuthority( + array $item, + string $nameSingleCode, + string $isModal, + string $user + ): string { + $otherView = $this->categorycode->getString( + "{$nameSingleCode}.view", + 'error' + ); + + return $isModal . $user . "->authorise('core.edit', 'com_" + . $this->config->component_code_name . "." + . $otherView + . ".category.' . (int) (\$item->" . $item['code'] . " ?? 0))"; + } + + /** + * Get the user item authority string. + * + * @param string $isModal The modal authority prefix. + * @param string $user The user code name. + * + * @return string The user item authority string. + * @since 5.1.5 + */ + protected function getUserItemAuthority(string $isModal, string $user): string + { + return $isModal . $user . "->authorise('core.edit', 'com_users')"; + } + + /** + * Get the custom item authority string. + * + * @param array $item The item array. + * @param string $isModal The modal authority prefix. + * @param string $user The user code name. + * + * @return string The custom item authority string. + * @since 5.1.5 + */ + protected function getCustomItemAuthority( + array $item, + string $isModal, + string $user + ): string { + $view = $item['custom']['view']; + $action = $this->permission->getAction($view, 'core.edit'); + $idCode = $this->getCustomItemIdCode($item); + + return $isModal . $user . "->authorise('" + . $action . "', 'com_" . $this->config->component_code_name . "." + . $view . ".' . (int) (\$item->" . $idCode . " ?? 0))"; + } + + /** + * Get the custom item ID code. + * + * @param array $item The item array. + * + * @return string The custom item ID code. + * @since 5.1.5 + */ + protected function getCustomItemIdCode(array $item): string + { + if (isset($item['custom']['id']) && $item['custom']['id'] !== 'id') + { + return $item['id_code'] . '_id'; + } + + return $item['id_code']; + } + + /** + * Get the default item authority string. + * + * @param string $nameSingleCode The single view code name. + * @param string $isModal The modal authority prefix. + * + * @return string The default item authority string. + * @since 5.1.5 + */ + protected function getDefaultItemAuthority( + string $nameSingleCode, + string $isModal + ): string { + return $isModal . "\$canDo->get('" + . $this->permission->getGlobal($nameSingleCode, 'core.edit') + . "')"; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/LinkLogic.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/LinkLogic.php new file mode 100644 index 000000000..572a32413 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/LinkLogic.php @@ -0,0 +1,345 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * List Item Link Logic Class + * + * @since 5.1.5 + */ +final class LinkLogic +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.5 + */ + protected Config $config; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * + * @since 5.1.5 + */ + public function __construct(Config $config) + { + $this->config = $config; + } + + /** + * Get the list item link logic. + * + * @param array $item The item. + * @param string $itemCode The item code string. + * @param string $itemLink The item link string. + * @param string $itemLinkAuthority The link authority string. + * @param string $nameSingleCode The single view code name. + * @param string $nameListCode The list view code name. + * @param string $classPointer The class pointer. + * @param bool $checkoutTriger The check out trigger. + * @param bool $class The div class adding switch. + * + * @return string The complete link logic of row item. + * @since 5.1.5 + */ + public function get( + array $item, + string $itemCode, + string $itemLink, + string $itemLinkAuthority, + string $nameSingleCode, + string $nameListCode, + string $classPointer, + bool $checkoutTriger, + bool $class = true + ): string + { + $code = (string) ($item['code'] ?? ''); + $tab = $this->getWrapperTab($class); + + $link = $this->openNameWrapper($class); + $link .= $this->buildAuthorizedLinkBlock( + $itemCode, + $itemLink, + $itemLinkAuthority, + $nameSingleCode, + $nameListCode, + $classPointer, + $checkoutTriger, + $code, + $tab + ); + $link .= $this->closeNameWrapper($class); + + return $link; + } + + /** + * Open the name wrapper when enabled. + * + * @param bool $class The div class adding switch. + * + * @return string The opening wrapper markup or empty string. + * @since 5.1.5 + */ + protected function openNameWrapper(bool $class): string + { + if (!$class) + { + return ''; + } + + return PHP_EOL . Indent::_(3) . '

      '; + } + + /** + * Close the name wrapper when enabled. + * + * @param bool $class The div class adding switch. + * + * @return string The closing wrapper markup or empty string. + * @since 5.1.5 + */ + protected function closeNameWrapper(bool $class): string + { + if (!$class) + { + return ''; + } + + return PHP_EOL . Indent::_(3) . '
      '; + } + + /** + * Get the wrapper indentation prefix. + * + * @param bool $class The div class adding switch. + * + * @return string The indentation prefix. + * @since 5.1.5 + */ + protected function getWrapperTab(bool $class): string + { + return $class ? Indent::_(1) : ''; + } + + /** + * Build the main authorized link block. + * + * @param string $itemCode The item code string. + * @param string $itemLink The item link string. + * @param string $itemLinkAuthority The link authority string. + * @param string $nameSingleCode The single view code name. + * @param string $nameListCode The list view code name. + * @param string $classPointer The class pointer. + * @param bool $checkoutTriger The check out trigger. + * @param string $code The item field code. + * @param string $tab The indentation prefix. + * + * @return string The built authorized link block. + * @since 5.1.5 + */ + protected function buildAuthorizedLinkBlock( + string $itemCode, + string $itemLink, + string $itemLinkAuthority, + string $nameSingleCode, + string $nameListCode, + string $classPointer, + bool $checkoutTriger, + string $code, + string $tab + ): string + { + $link = ''; + + $link .= PHP_EOL . $tab . Indent::_(3) . ""; + $link .= PHP_EOL . $tab . Indent::_(4) . ''; + + if ($checkoutTriger) + { + $link .= $this->buildCheckedOutBlock($nameListCode, $tab); + } + + $link .= PHP_EOL . $tab . Indent::_(3) . ""; + $link .= $this->buildUnauthorizedOutput( + $itemCode, + $nameSingleCode, + $classPointer, + $code, + $tab, + $checkoutTriger + ); + $link .= PHP_EOL . $tab . Indent::_(3) . ""; + + return $link; + } + + /** + * Build the checked out block. + * + * @param string $nameListCode The list view code name. + * @param string $tab The indentation prefix. + * + * @return string The checked out block. + * @since 5.1.5 + */ + protected function buildCheckedOutBlock(string $nameListCode, string $tab): string + { + $link = ''; + + $link .= PHP_EOL . $tab . Indent::_(4) . "checked_out): ?>"; + $link .= PHP_EOL . $tab . Indent::_(5) + . "name, \$item->checked_out_time, '" + . $nameListCode + . ".', \$canCheckin); ?>"; + $link .= PHP_EOL . $tab . Indent::_(4) . ""; + + return $link; + } + + /** + * Build the unauthorized output block. + * + * @param string $itemCode The item code string. + * @param string $nameSingleCode The single view code name. + * @param string $classPointer The class pointer. + * @param string $code The item field code. + * @param string $tab The indentation prefix. + * @param bool $checkoutTriger The check out trigger. + * + * @return string The unauthorized output block. + * @since 5.1.5 + */ + protected function buildUnauthorizedOutput( + string $itemCode, + string $nameSingleCode, + string $classPointer, + string $code, + string $tab, + bool $checkoutTriger + ): string + { + if ($this->shouldApplyModalFix($checkoutTriger)) + { + return $this->buildModalAwareOutput( + $itemCode, + $nameSingleCode, + $classPointer, + $code, + $tab + ); + } + + return PHP_EOL . $tab . Indent::_(4) . ""; + } + + /** + * Determine whether the modal fix should be applied. + * + * @param bool $checkoutTriger The check out trigger. + * + * @return bool True if the modal fix should be applied. + * @since 5.1.5 + */ + protected function shouldApplyModalFix(bool $checkoutTriger): bool + { + return $checkoutTriger + && $this->config->get('joomla_version', 3) !== 3; + } + + /** + * Build the modal aware unauthorized output. + * + * @param string $itemCode The item code string. + * @param string $nameSingleCode The single view code name. + * @param string $classPointer The class pointer. + * @param string $code The item field code. + * @param string $tab The indentation prefix. + * + * @return string The modal aware output block. + * @since 5.1.5 + */ + protected function buildModalAwareOutput( + string $itemCode, + string $nameSingleCode, + string $classPointer, + string $code, + string $tab + ): string + { + $link = ''; + + $link .= PHP_EOL . $tab . Indent::_(4) . ""; + $link .= PHP_EOL . $tab . Indent::_(5) . ""; + $link .= PHP_EOL . $tab . Indent::_(4) . ""; + $link .= $this->buildModalSelectionBlock($nameSingleCode, $classPointer, $code, $tab, $itemCode); + $link .= PHP_EOL . $tab . Indent::_(4) . ""; + + return $link; + } + + /** + * Build the modal selection block. + * + * @param string $nameSingleCode The single view code name. + * @param string $classPointer The class pointer. + * @param string $code The item field code. + * @param string $tab The indentation prefix. + * @param string $itemCode The item code string. + * + * @return string The modal selection block. + * @since 5.1.5 + */ + protected function buildModalSelectionBlock( + string $nameSingleCode, + string $classPointer, + string $code, + string $tab, + string $itemCode + ): string + { + $link = ''; + + $link .= PHP_EOL . $tab . Indent::_(5) . "id}\";"; + $link .= PHP_EOL . $tab . Indent::_(6) . "\$dataId = \$item->{{$classPointer}getModalTitleKey()} ?? 0;"; + $link .= PHP_EOL . $tab . Indent::_(6) + . "\$itemHtml = '' . {$classPointer}escape(\$item->{$code}, false) . '';"; + $link .= PHP_EOL . $tab . Indent::_(6) + . "\$attribs = 'data-content-select data-content-type=\"com_" + . $this->config->component_code_name + . "." + . $nameSingleCode + . "\"'"; + $link .= PHP_EOL . $tab . Indent::_(7) . ". ' data-id=\"' . \$dataId . '\"'"; + $link .= PHP_EOL . $tab . Indent::_(7) . ". ' data-title=\"' . {$classPointer}escape(\$item->{$code}, false) . '\"'"; + $link .= PHP_EOL . $tab . Indent::_(7) . ". ' data-uri=\"' . {$classPointer}escape(\$link, false) . '\"'"; + $link .= PHP_EOL . $tab . Indent::_(7) . ". ' data-html=\"' . {$classPointer}escape(\$itemHtml, false) . '\"';"; + $link .= PHP_EOL . $tab . Indent::_(5) . "?>"; + $link .= PHP_EOL . $tab . Indent::_(5) . ">"; + $link .= PHP_EOL . $tab . Indent::_(6) . ""; + $link .= PHP_EOL . $tab . Indent::_(5) . ""; + + return $link; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItem/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItemBuilder.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItemBuilder.php new file mode 100644 index 000000000..df15a09a7 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/AdminViews/ListItemBuilder.php @@ -0,0 +1,413 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews; + + +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem; +use VDM\Joomla\Componentbuilder\Compiler\Builder\FieldRelations; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ListJoin; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * List Item Builder Class + * + * @since 5.1.5 + */ +final class ListItemBuilder +{ + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.5 + */ + protected Placeholder $placeholder; + + /** + * The ListItem Class. + * + * @var ListItem + * @since 5.1.5 + */ + protected ListItem $listitem; + + /** + * The FieldRelations Class. + * + * @var FieldRelations + * @since 5.1.5 + */ + protected FieldRelations $fieldrelations; + + /** + * The ListJoin Class. + * + * @var ListJoin + * @since 5.1.5 + */ + protected ListJoin $listjoin; + + /** + * Constructor. + * + * @param Placeholder $placeholder The Placeholder Class. + * @param ListItem $listitem The ListItem Class. + * @param FieldRelations $fieldrelations The FieldRelations Class. + * @param ListJoin $listjoin The ListJoin Class. + * + * @since 5.1.5 + */ + public function __construct(Placeholder $placeholder, ListItem $listitem, + FieldRelations $fieldrelations, ListJoin $listjoin) + { + $this->placeholder = $placeholder; + $this->listitem = $listitem; + $this->fieldrelations = $fieldrelations; + $this->listjoin = $listjoin; + } + + /** + * Get the list item dynamic row. + * + * @param array $item The item array. + * @param string $nameSingleCode The single view code name. + * @param string $nameListCode The list view code name. + * @param string $itemClass The table row default class. + * @param bool $doNotEscape The do not escape global switch. + * @param bool $class The div class adding switch. + * @param ?string $ref The link referral string. + * @param string $classPointer The class pointer (this or displaydata). + * @param string $user The user code name. + * @param ?string $refview The override of the referral view code name. + * + * @return string The completed item value for the table row. + * @since 5.1.2 + */ + public function get( + array $item, + string $nameSingleCode, + string $nameListCode, + string &$itemClass, + bool $doNotEscape, + bool $class = true, + ?string $ref = null, + string $classPointer = '$this->', + string $user = '$this->user', + ?string $refview = null + ): string + { + $fieldRelations = $this->getListItemFieldRelations($nameListCode, $item); + + if ($fieldRelations === null) + { + return $this->listitem->get( + $item, + $nameSingleCode, + $nameListCode, + $itemClass, + $doNotEscape, + $class, + $ref, + $classPointer, + $user, + $refview + ); + } + + $fieldListItem = $this->listitem->get( + $item, + $nameSingleCode, + $nameListCode, + $itemClass, + $doNotEscape, + false, + $ref, + $classPointer, + $user, + $refview + ); + + $fieldPlaceholders = []; + $fieldArray = []; + + $id = (int) ($item['id'] ?? 0); + $guid = (string) ($item['guid'] ?? 'error'); + + $this->addFieldOutputPlaceholders( + $fieldPlaceholders, + $fieldArray, + $fieldListItem, + $id, + $guid + ); + + $this->addItemCodePlaceholders( + $item, + $id, + $guid, + $fieldPlaceholders + ); + + $this->addJoinListItemFieldData( + $fieldRelations, + $nameSingleCode, + $nameListCode, + $doNotEscape, + $ref, + $classPointer, + $user, + $refview, + $fieldPlaceholders, + $fieldArray + ); + + return $this->renderListItemBuilderOutput( + $fieldRelations, + $fieldPlaceholders, + $fieldArray + ); + } + + /** + * Get the field relation settings for a list item. + * + * @param string $nameListCode The list view code name. + * @param array $item The field item array. + * + * @return array|null The field relation settings or null. + * @since 5.1.2 + */ + protected function getListItemFieldRelations(string $nameListCode, array $item): ?array + { + $fieldRelations = $this->fieldrelations->get( + $nameListCode . '.' . (string) $item['guid'] . '.2' + ); + + return is_array($fieldRelations) ? $fieldRelations : null; + } + + /** + * Add rendered field output placeholders. + * + * @param array $fieldPlaceholders The field placeholders. + * @param array $fieldArray The rendered field array. + * @param string $fieldOutput The rendered field output. + * @param int $fieldId The field ID. + * @param string $fieldGuid The field GUID. + * + * @return void + * @since 5.1.2 + */ + protected function addFieldOutputPlaceholders( + array &$fieldPlaceholders, + array &$fieldArray, + string $fieldOutput, + int $fieldId, + string $fieldGuid + ): void + { + $fieldPlaceholders['[field=' . $fieldId . ']'] = $fieldOutput; + $fieldPlaceholders['[field=' . $fieldGuid . ']'] = $fieldOutput; + $fieldArray[] = trim($fieldOutput); + } + + /** + * Add code name placeholders for an item. + * + * @param array $item The field item array. + * @param int $fieldId The field ID. + * @param string $fieldGuid The field GUID. + * @param array $fieldPlaceholders The field placeholders. + * + * @return void + * @since 5.1.2 + */ + protected function addItemCodePlaceholders( + array $item, + int $fieldId, + string $fieldGuid, + array &$fieldPlaceholders + ): void + { + if ( + !isset($item['code']) + || !StringHelper::check((string) $item['code']) + ) + { + return; + } + + $codeReference = '$item->' . $item['code']; + + $fieldPlaceholders['$item->{' . $fieldId . '}'] = $codeReference; + $fieldPlaceholders['$item->{' . $fieldGuid . '}'] = $codeReference; + } + + /** + * Add joined list item field data. + * + * @param array $fieldRelations The field relation settings. + * @param string $nameSingleCode The single view code name. + * @param string $nameListCode The list view code name. + * @param bool $doNotEscape The do not escape global switch. + * @param ?string $ref The link referral string. + * @param string $classPointer The class pointer. + * @param string $user The user code name. + * @param ?string $refview The referral view code name override. + * @param array $fieldPlaceholders The field placeholders. + * @param array $fieldArray The rendered field array. + * + * @return void + * @since 5.1.2 + */ + protected function addJoinListItemFieldData( + array $fieldRelations, + string $nameSingleCode, + string $nameListCode, + bool $doNotEscape, + ?string $ref, + string $classPointer, + string $user, + ?string $refview, + array &$fieldPlaceholders, + array &$fieldArray + ): void + { + if ( + !isset($fieldRelations['joinfields']) + || !ArrayHelper::check($fieldRelations['joinfields']) + ) + { + return; + } + + foreach ($fieldRelations['joinfields'] as $join) + { + $joinKey = $nameListCode . '.' . (string) $join; + $joinItem = $this->listjoin->get($joinKey); + + if (!is_array($joinItem)) + { + continue; + } + + $blankClass = ''; + $joinId = (int) $this->listjoin->get($joinKey . '.id', 0); + + $joinFieldListItem = $this->listitem->get( + $joinItem, + $nameSingleCode, + $nameListCode, + $blankClass, + $doNotEscape, + false, + $ref, + $classPointer, + $user, + $refview + ); + + $this->addFieldOutputPlaceholders( + $fieldPlaceholders, + $fieldArray, + $joinFieldListItem, + $joinId, + (string) $join + ); + + $this->addItemCodePlaceholders( + $joinItem, + $joinId, + (string) $join, + $fieldPlaceholders + ); + } + } + + /** + * Render the final list item builder output. + * + * @param array $fieldRelations The field relation settings. + * @param array $fieldPlaceholders The field placeholders. + * @param array $fieldArray The rendered field array. + * + * @return string The rendered output. + * @since 5.1.2 + */ + protected function renderListItemBuilderOutput( + array $fieldRelations, + array $fieldPlaceholders, + array $fieldArray + ): string + { + if ($this->shouldUseCustomRelationCode($fieldRelations)) + { + $output = str_replace( + array_keys($fieldPlaceholders), + array_values($fieldPlaceholders), + (string) $fieldRelations['set'] + ); + + return $this->wrapListItemBuilderOutput( + $this->placeholder->update_($output) + ); + } + + if ( + isset($fieldRelations['set']) + && StringHelper::check((string) $fieldRelations['set']) + ) + { + return $this->wrapListItemBuilderOutput( + implode((string) $fieldRelations['set'], $fieldArray) + ); + } + + return $this->wrapListItemBuilderOutput( + implode('', $fieldArray) + ); + } + + /** + * Check if the relation should use custom code. + * + * @param array $fieldRelations The field relation settings. + * + * @return bool True if custom relation code should be used. + * @since 5.1.2 + */ + protected function shouldUseCustomRelationCode(array $fieldRelations): bool + { + return isset($fieldRelations['join_type'], $fieldRelations['set']) + && (int) $fieldRelations['join_type'] === 2 + && StringHelper::check((string) $fieldRelations['set']); + } + + /** + * Wrap the output in the standard list item builder div. + * + * @param string $output The output string. + * + * @return string The wrapped output. + * @since 5.1.2 + */ + protected function wrapListItemBuilderOutput(string $output): string + { + return PHP_EOL . Indent::_(3) . '
      ' + . $output . PHP_EOL . Indent::_(3) . '
      '; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Dashboard/View.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Dashboard/View.php new file mode 100644 index 000000000..5de5d2a2d --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Dashboard/View.php @@ -0,0 +1,626 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Dashboard; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Component; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Structure; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Dashboard\ViewInterface; + + +/** + * Dashboard View Class + * + * @since 5.1.5 + */ +final class View implements ViewInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.5 + */ + protected Config $config; + + /** + * The Component Class. + * + * @var Component + * @since 5.1.5 + */ + protected Component $component; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.5 + */ + protected Placeholder $placeholder; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.5 + */ + protected ContentMulti $contentmulti; + + /** + * The Structure Class. + * + * @var Structure + * @since 5.1.5 + */ + protected Structure $structure; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Component $component The Component Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * @param Structure $structure The Structure Class. + * + * @since 5.1.5 + */ + public function __construct( + Config $config, + Component $component, + Placeholder $placeholder, + ContentMulti $contentmulti, + Structure $structure + ) { + $this->config = $config; + $this->component = $component; + $this->placeholder = $placeholder; + $this->contentmulti = $contentmulti; + $this->structure = $structure; + } + + /** + * Build the admin dashboard display markup for Joomla 5. + * + * @return string The compiled dashboard display markup. + * @since 5.1.5 + */ + public function get(): string + { + $state = $this->getDashboardDisplayState(); + + $this->initializeDashboardDisplay($state); + $this->appendMainDashboardColumns($state); + + if ($state['loadTabs']) + { + $this->appendCustomTabs($state); + $this->appendTabSetEnd($state); + } + else + { + $this->appendMainRowEnd($state); + } + + $this->appendDashboardContainerEnd($state); + + return PHP_EOL . implode(PHP_EOL, $state['display']); + } + + /** + * Get the initial dashboard display state. + * + * @return array The dashboard display state. + * @since 5.1.5 + */ + protected function getDashboardDisplayState(): array + { + return [ + 'display' => [], + 'builder' => [], + 'tab' => Indent::_(3), + 'loadTabs' => false, + 'containerId' => 'j-main-container', + 'wrapperTabsClass' => 'main-card', + 'wrapperClass' => 'main-card p-3 p-lg-4', + 'rowClass' => 'row g-4', + 'mainColumnClass' => 'col-12 col-xl-9', + 'sideColumnClass' => 'col-12 col-xl-3', + 'fullColumnClass' => 'col-12', + 'uiTab' => 'uitab', + 'tabSet' => 'cpanel_tab', + 'mainTabAlias' => 'cpanel', + ]; + } + + /** + * Initialize the dashboard display structure. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function initializeDashboardDisplay(array &$state): void + { + if ($this->hasCustomDashboardTabs()) + { + $this->buildCustomDashboardTabTemplates($state['builder']); + $this->appendDashboardWithTabsStart($state); + $state['loadTabs'] = true; + + return; + } + + $this->appendStandardDashboardStart($state); + } + + /** + * Check whether custom dashboard tabs exist. + * + * @return bool True if custom dashboard tabs exist. + * @since 5.1.5 + */ + protected function hasCustomDashboardTabs(): bool + { + return $this->component->isArray('dashboard_tab'); + } + + /** + * Build the custom dashboard tab template map. + * + * @param array &$builder The custom tab builder map. + * + * @return void + * @since 5.1.5 + */ + protected function buildCustomDashboardTabTemplates(array &$builder): void + { + foreach ($this->component->get('dashboard_tab') as $data) + { + $builder[$data['name']][$data['header']] + = $this->placeholder->update_($data['html']); + } + } + + /** + * Append the dashboard start markup when custom tabs are enabled. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendDashboardWithTabsStart(array &$state): void + { + $state['display'][] = $this->getOpenContainer($state['containerId']); + $state['display'][] = Indent::_(1) . $this->getOpenDiv($state['wrapperTabsClass']); + $state['display'][] = Indent::_(1) + . $this->getUiTabStartSetCode($state['tabSet'], $state['mainTabAlias']); + $state['display'][] = PHP_EOL . Indent::_(2) + . $this->getUiTabAddTabCode( + $state['tabSet'], + $state['mainTabAlias'], + "Text:" . ":_('cPanel', true)" + ); + $state['display'][] = Indent::_(2) . $this->getOpenDiv($state['rowClass']); + } + + /** + * Append the standard dashboard start markup. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendStandardDashboardStart(array &$state): void + { + $state['display'][] = $this->getOpenContainer($state['containerId']); + $state['display'][] = Indent::_(1) . $this->getOpenDiv($state['wrapperClass']); + $state['display'][] = Indent::_(2) . $this->getOpenDiv($state['rowClass']); + } + + /** + * Append the main dashboard columns. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendMainDashboardColumns(array &$state): void + { + $this->appendLeftDashboardColumn($state); + $this->appendRightDashboardColumn($state); + } + + /** + * Append the left dashboard column. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendLeftDashboardColumn(array &$state): void + { + $state['display'][] = $state['tab'] . $this->getOpenDiv($state['mainColumnClass']); + $state['display'][] = $state['tab'] . Indent::_(1) + . $this->getLoadTemplateCode('main'); + $state['display'][] = $state['tab'] . '
    '; + } + + /** + * Append the right dashboard column. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendRightDashboardColumn(array &$state): void + { + $state['display'][] = $state['tab'] . $this->getOpenDiv($state['sideColumnClass']); + $state['display'][] = $state['tab'] . Indent::_(1) + . $this->getLoadTemplateCode('vdm'); + $state['display'][] = $state['tab'] . '
    '; + } + + /** + * Append all custom dashboard tabs. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendCustomTabs(array &$state): void + { + $state['display'][] = Indent::_(2) . '
    '; + $state['display'][] = Indent::_(2) . $this->getUiTabEndTabCode(); + + foreach ($state['builder'] as $tabName => $templates) + { + $this->appendCustomTab($state, $tabName, $templates); + } + } + + /** + * Append a single custom dashboard tab. + * + * @param array &$state The dashboard display state. + * @param string $tabName The tab name. + * @param array $templates The template content definitions. + * + * @return void + * @since 5.1.5 + */ + protected function appendCustomTab(array &$state, string $tabName, array $templates): void + { + $alias = StringHelper::safe($tabName); + + $state['display'][] = PHP_EOL . Indent::_(2) + . $this->getUiTabAddTabCode( + $state['tabSet'], + $alias, + "Joomla__" . "_ba6326ef_cb79_4348_80f4_ab086082e3c5___Power::_('" + . $tabName . "', true)" + ); + $state['display'][] = Indent::_(2) . $this->getOpenDiv($state['rowClass']); + $state['display'][] = $state['tab'] . $this->getOpenDiv($state['fullColumnClass']); + + $this->appendCustomTabTemplates($state, $alias, $templates); + + $state['display'][] = $state['tab'] . '
    '; + $state['display'][] = Indent::_(2) . '
    '; + $state['display'][] = Indent::_(2) . $this->getUiTabEndTabCode(); + } + + /** + * Append all template loads for a custom dashboard tab. + * + * @param array &$state The dashboard display state. + * @param string $alias The safe tab alias. + * @param array $templates The template content definitions. + * + * @return void + * @since 5.1.5 + */ + protected function appendCustomTabTemplates(array &$state, string $alias, array $templates): void + { + foreach ($templates as $templateName => $html) + { + $this->appendCustomTabTemplate($state, $alias, $templateName, $html); + } + } + + /** + * Append a single custom dashboard template load and register its content. + * + * @param array &$state The dashboard display state. + * @param string $alias The safe tab alias. + * @param string $templateName The template name. + * @param string $html The HTML content. + * + * @return void + * @since 5.1.5 + */ + protected function appendCustomTabTemplate( + array &$state, + string $alias, + string $templateName, + string $html + ): void + { + $safeTemplateName = $alias . '_' . StringHelper::safe($templateName); + + $state['display'][] = $state['tab'] . Indent::_(1) + . $this->getLoadTemplateCode($safeTemplateName); + + $this->buildCustomDashboardTemplate($safeTemplateName, $html); + } + + /** + * Build a custom dashboard template file and register its content. + * + * @param string $templateName The template name. + * @param string $html The template body HTML. + * + * @return void + * @since 5.1.5 + */ + protected function buildCustomDashboardTemplate(string $templateName, string $html): void + { + $this->buildCustomDashboardTemplateStructure($templateName); + $this->storeCustomDashboardTemplateBody($templateName, $html); + $this->storeCustomDashboardTemplateCodeBody($templateName); + } + + /** + * Build the custom dashboard template structure. + * + * @param string $templateName The template name. + * + * @return void + * @since 5.1.5 + */ + protected function buildCustomDashboardTemplateStructure(string $templateName): void + { + $this->structure->build( + ['custom_admin' => $this->config->component_code_name], + 'template', + $templateName + ); + } + + /** + * Store the custom dashboard template body. + * + * @param string $templateName The template name. + * @param string $html The template body HTML. + * + * @return void + * @since 5.1.5 + */ + protected function storeCustomDashboardTemplateBody(string $templateName, string $html): void + { + $this->contentmulti->set( + $this->getCustomDashboardTemplateKey( + $templateName, + 'CUSTOM_ADMIN_TEMPLATE_BODY' + ), + PHP_EOL . $html + ); + } + + /** + * Store the custom dashboard template code body. + * + * @param string $templateName The template name. + * + * @return void + * @since 5.1.5 + */ + protected function storeCustomDashboardTemplateCodeBody(string $templateName): void + { + $this->contentmulti->set( + $this->getCustomDashboardTemplateKey( + $templateName, + 'CUSTOM_ADMIN_TEMPLATE_CODE_BODY' + ), + '' + ); + } + + /** + * Get the custom dashboard template storage key. + * + * @param string $templateName The template name. + * @param string $suffix The key suffix. + * + * @return string The storage key. + * @since 5.1.5 + */ + protected function getCustomDashboardTemplateKey( + string $templateName, + string $suffix + ): string + { + return $this->config->component_code_name . '_' + . $templateName . '|' . $suffix; + } + + /** + * Append the end of the tab set. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendTabSetEnd(array &$state): void + { + $state['display'][] = PHP_EOL . Indent::_(1) + . $this->getUiTabEndTabSetCode(); + } + + /** + * Append the end of the main row layout. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendMainRowEnd(array &$state): void + { + $state['display'][] = Indent::_(2) . ''; + } + + /** + * Append the closing dashboard container markup. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendDashboardContainerEnd(array &$state): void + { + $state['display'][] = Indent::_(1) . ''; + $state['display'][] = ''; + } + + /** + * Get the PHP code for starting a UI tab set. + * + * @param string $tabSet The tab set name. + * @param string $activeTab The active tab alias. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getUiTabStartSetCode( + string $tabSet, + string $activeTab + ): string + { + return "getUiTabHelperName('startTabSet') . "', '" . $tabSet + . "', array('active' => '" . $activeTab . "')); ?>"; + } + + /** + * Get the PHP code for adding a UI tab. + * + * @param string $tabSet The tab set name. + * @param string $alias The tab alias. + * @param string $title The tab title PHP expression. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getUiTabAddTabCode( + string $tabSet, + string $alias, + string $title + ): string + { + return "getUiTabHelperName('addTab') . "', '" . $tabSet + . "', '" . $alias . "', " . $title . "); ?>"; + } + + /** + * Get the PHP code for ending a UI tab. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getUiTabEndTabCode(): string + { + return "getUiTabHelperName('endTab') . "'); ?>"; + } + + /** + * Get the PHP code for ending a UI tab set. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getUiTabEndTabSetCode(): string + { + return "getUiTabHelperName('endTabSet') . "'); ?>"; + } + + /** + * Get the UI tab helper name. + * + * @param string $method The helper method name. + * + * @return string The full helper name. + * @since 5.1.5 + */ + protected function getUiTabHelperName(string $method): string + { + return 'uitab.' . $method; + } + + /** + * Get the PHP code for loading a layout template. + * + * @param string $templateName The template name. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getLoadTemplateCode(string $templateName): string + { + return "loadTemplate('" . $templateName . "');?>"; + } + + /** + * Get the opening container markup. + * + * @param string $id The container ID. + * + * @return string The container opening markup. + * @since 5.1.5 + */ + protected function getOpenContainer(string $id): string + { + return '
    '; + } + + /** + * Get the opening div markup. + * + * @param string $class The div class. + * + * @return string The div opening markup. + * @since 5.1.5 + */ + protected function getOpenDiv(string $class): string + { + return '
    '; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Dashboard/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Dashboard/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Dashboard/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Dashboard/View.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Dashboard/View.php new file mode 100644 index 000000000..fda93fb8d --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Dashboard/View.php @@ -0,0 +1,454 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Dashboard; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Component; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Structure; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Dashboard\ViewInterface; + + +/** + * Dashboard View Class + * + * @since 5.1.5 + */ +final class View implements ViewInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.5 + */ + protected Config $config; + + /** + * The Component Class. + * + * @var Component + * @since 5.1.5 + */ + protected Component $component; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.5 + */ + protected Placeholder $placeholder; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.5 + */ + protected ContentMulti $contentmulti; + + /** + * The Structure Class. + * + * @var Structure + * @since 5.1.5 + */ + protected Structure $structure; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Component $component The Component Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * @param Structure $structure The Structure Class. + * + * @since 5.1.5 + */ + public function __construct(Config $config, Component $component, + Placeholder $placeholder, ContentMulti $contentmulti, Structure $structure) + { + $this->config = $config; + $this->component = $component; + $this->placeholder = $placeholder; + $this->contentmulti = $contentmulti; + $this->structure = $structure; + } + + /** + * Build the admin dashboard display markup for Joomla 4 and above. + * + * @return string The compiled dashboard display markup. + * + * @since 5.1.5 + */ + public function get(): string + { + $state = $this->getDashboardDisplayState(); + + $this->initializeDashboardDisplay($state); + $this->appendMainDashboardColumns($state); + + if ($state['loadTabs']) + { + $this->appendCustomTabs($state); + $this->appendTabSetEnd($state); + } + else + { + $this->appendStandardRowEnd($state); + } + + $this->appendDashboardContainerEnd($state); + + return PHP_EOL . implode(PHP_EOL, $state['display']); + } + + /** + * Get the initial dashboard display state. + * + * @return array The dashboard display state. + * + * @since 5.1.5 + */ + protected function getDashboardDisplayState(): array + { + return [ + 'display' => [], + 'mainAccordionName' => 'cPanel', + 'builder' => [], + 'tab' => Indent::_(3), + 'loadTabs' => false, + 'widthClass' => 'col-md-', + 'rowClass' => 'row', + 'formClass' => 'main-card', + 'uiTab' => 'uitab', + ]; + } + + /** + * Initialize the dashboard display structure. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function initializeDashboardDisplay(array &$state): void + { + if ($this->hasCustomDashboardTabs()) + { + $this->buildCustomDashboardTabTemplates($state['builder']); + $this->appendDashboardWithTabsStart($state); + + $state['mainAccordionName'] = 'Control Panel'; + $state['loadTabs'] = true; + + return; + } + + $this->appendStandardDashboardStart($state); + } + + /** + * Check whether custom dashboard tabs exist. + * + * @return bool True if custom dashboard tabs exist. + * + * @since 5.1.5 + */ + protected function hasCustomDashboardTabs(): bool + { + return $this->component->isArray('dashboard_tab'); + } + + /** + * Build the custom dashboard tab template map. + * + * @param array &$builder The custom tab builder map. + * + * @return void + * + * @since 5.1.5 + */ + protected function buildCustomDashboardTabTemplates(array &$builder): void + { + foreach ($this->component->get('dashboard_tab') as $data) + { + $builder[$data['name']][$data['header']] + = $this->placeholder->update_($data['html']); + } + } + + /** + * Append the dashboard start markup when custom tabs are enabled. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendDashboardWithTabsStart(array &$state): void + { + $state['display'][] = '
    '; + $state['display'][] = Indent::_(1) . '
    '; + $state['display'][] = Indent::_(1) + . " 'cpanel')); ?>"; + $state['display'][] = PHP_EOL . Indent::_(2) + . ""; + $state['display'][] = Indent::_(2) . '
    '; + } + + /** + * Append the standard dashboard start markup. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendStandardDashboardStart(array &$state): void + { + $state['display'][] = '
    '; + $state['display'][] = Indent::_(1) . '
    '; + $state['display'][] = Indent::_(2) . '
    '; + } + + /** + * Append the main dashboard columns. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendMainDashboardColumns(array &$state): void + { + $this->appendLeftDashboardColumn($state); + $this->appendRightDashboardColumn($state); + } + + /** + * Append the left dashboard column. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendLeftDashboardColumn(array &$state): void + { + $state['display'][] = $state['tab'] . '
    '; + $state['display'][] = $state['tab'] . Indent::_(1) + . "loadTemplate('main');?>"; + $state['display'][] = $state['tab'] . '
    '; + } + + /** + * Append the right dashboard column. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendRightDashboardColumn(array &$state): void + { + $state['display'][] = $state['tab'] . '
    '; + $state['display'][] = $state['tab'] . Indent::_(1) + . "loadTemplate('vdm');?>"; + $state['display'][] = $state['tab'] . '
    '; + } + + /** + * Append all custom dashboard tabs. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendCustomTabs(array &$state): void + { + $state['display'][] = Indent::_(2) . '
    '; + $state['display'][] = Indent::_(2) + . ""; + + foreach ($state['builder'] as $tabName => $accordions) + { + $this->appendCustomTab($state, $tabName, $accordions); + } + } + + /** + * Append a single custom dashboard tab. + * + * @param array &$state The dashboard display state. + * @param string $tabName The tab name. + * @param array $accordions The accordion content definitions. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendCustomTab(array &$state, string $tabName, array $accordions): void + { + $alias = StringHelper::safe($tabName); + + $state['display'][] = PHP_EOL . Indent::_(2) + . ""; + $state['display'][] = Indent::_(2) . '
    '; + $state['display'][] = $state['tab'] . '
    '; + + $this->appendCustomTabTemplates($state, $alias, $accordions); + + $state['display'][] = $state['tab'] . '
    '; + $state['display'][] = Indent::_(2) . '
    '; + $state['display'][] = Indent::_(2) + . ""; + } + + /** + * Append all template loads for a custom dashboard tab. + * + * @param array &$state The dashboard display state. + * @param string $alias The safe tab alias. + * @param array $accordions The accordion content definitions. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendCustomTabTemplates(array &$state, string $alias, array $accordions): void + { + foreach ($accordions as $accordionName => $html) + { + $this->appendCustomTabTemplate($state, $alias, $accordionName, $html); + } + } + + /** + * Append a single custom dashboard template load and register its content. + * + * @param array &$state The dashboard display state. + * @param string $alias The safe tab alias. + * @param string $accordionName The accordion name. + * @param string $html The HTML content. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendCustomTabTemplate( + array &$state, + string $alias, + string $accordionName, + string $html + ): void + { + $accordionAlias = StringHelper::safe($accordionName); + $templateName = $alias . '_' . $accordionAlias; + + $state['display'][] = $state['tab'] . Indent::_(1) + . "loadTemplate('" . $templateName . "');?>"; + + $this->buildCustomDashboardTemplate($templateName, $html); + } + + /** + * Build a custom dashboard template file and register its content. + * + * @param string $templateName The template name. + * @param string $html The template body HTML. + * + * @return void + * + * @since 5.1.5 + */ + protected function buildCustomDashboardTemplate(string $templateName, string $html): void + { + $componentCodeName = $this->config->component_code_name; + $target = ['custom_admin' => $componentCodeName]; + + $this->structure->build($target, 'template', $templateName); + + $this->contentmulti->set( + $componentCodeName . '_' . $templateName . '|CUSTOM_ADMIN_TEMPLATE_BODY', + PHP_EOL . $html + ); + + $this->contentmulti->set( + $componentCodeName . '_' . $templateName . '|CUSTOM_ADMIN_TEMPLATE_CODE_BODY', + '' + ); + } + + /** + * Append the end of the tab set. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendTabSetEnd(array &$state): void + { + $state['display'][] = PHP_EOL . Indent::_(1) + . ""; + } + + /** + * Append the end of the standard row layout. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendStandardRowEnd(array &$state): void + { + $state['display'][] = Indent::_(2) . '
    '; + } + + /** + * Append the closing dashboard container markup. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendDashboardContainerEnd(array &$state): void + { + $state['display'][] = Indent::_(1) . '
    '; + $state['display'][] = '
    '; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Dashboard/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Dashboard/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Dashboard/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaSix/Dashboard/View.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaSix/Dashboard/View.php new file mode 100644 index 000000000..e67828e7a --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaSix/Dashboard/View.php @@ -0,0 +1,657 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaSix\Dashboard; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Component; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Structure; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Dashboard\ViewInterface; + + +/** + * Dashboard View Class + * + * @since 5.1.5 + */ +final class View implements ViewInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.5 + */ + protected Config $config; + + /** + * The Component Class. + * + * @var Component + * @since 5.1.5 + */ + protected Component $component; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.5 + */ + protected Placeholder $placeholder; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.5 + */ + protected ContentMulti $contentmulti; + + /** + * The Structure Class. + * + * @var Structure + * @since 5.1.5 + */ + protected Structure $structure; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Component $component The Component Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * @param Structure $structure The Structure Class. + * + * @since 5.1.5 + */ + public function __construct( + Config $config, + Component $component, + Placeholder $placeholder, + ContentMulti $contentmulti, + Structure $structure + ) { + $this->config = $config; + $this->component = $component; + $this->placeholder = $placeholder; + $this->contentmulti = $contentmulti; + $this->structure = $structure; + } + + /** + * Build the admin dashboard display markup for Joomla 6 style layouts. + * + * @return string The compiled dashboard display markup. + * @since 5.1.5 + */ + public function get(): string + { + $state = $this->getDashboardDisplayState(); + + $this->initializeDashboardDisplay($state); + $this->appendMainDashboardColumns($state); + + if ($state['loadTabs']) + { + $this->appendCustomTabs($state); + $this->appendTabSetEnd($state); + } + else + { + $this->appendMainRowEnd($state); + } + + $this->appendDashboardContainerEnd($state); + + return PHP_EOL . implode(PHP_EOL, $state['display']); + } + + /** + * Get the initial dashboard display state. + * + * @return array The dashboard display state. + * @since 5.1.5 + */ + protected function getDashboardDisplayState(): array + { + return [ + 'display' => [], + 'builder' => [], + 'tab' => Indent::_(3), + 'loadTabs' => false, + 'containerId' => 'j-main-container', + 'containerClass' => 'container-fluid', + 'wrapperTabsClass' => 'main-card jcb-dashboard', + 'wrapperClass' => 'main-card jcb-dashboard p-3 p-lg-4', + 'contentClass' => 'jcb-dashboard__content', + 'rowClass' => 'row g-4 align-items-start', + 'mainColumnClass' => 'col-12 col-xxl-9', + 'sideColumnClass' => 'col-12 col-xxl-3', + 'fullColumnClass' => 'col-12', + 'mainInnerClass' => 'jcb-dashboard__main d-flex flex-column gap-4', + 'sideInnerClass' => 'jcb-dashboard__sidebar d-flex flex-column gap-4', + 'fullInnerClass' => 'jcb-dashboard__tab d-flex flex-column gap-4', + 'uiTab' => 'uitab', + 'tabSet' => 'cpanel_tab', + 'mainTabAlias' => 'cpanel', + ]; + } + + /** + * Initialize the dashboard display structure. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function initializeDashboardDisplay(array &$state): void + { + if ($this->hasCustomDashboardTabs()) + { + $this->buildCustomDashboardTabTemplates($state['builder']); + $this->appendDashboardWithTabsStart($state); + $state['loadTabs'] = true; + + return; + } + + $this->appendStandardDashboardStart($state); + } + + /** + * Check whether custom dashboard tabs exist. + * + * @return bool True if custom dashboard tabs exist. + * @since 5.1.5 + */ + protected function hasCustomDashboardTabs(): bool + { + return $this->component->isArray('dashboard_tab'); + } + + /** + * Build the custom dashboard tab template map. + * + * @param array &$builder The custom tab builder map. + * + * @return void + * @since 5.1.5 + */ + protected function buildCustomDashboardTabTemplates(array &$builder): void + { + foreach ($this->component->get('dashboard_tab') as $data) + { + $builder[$data['name']][$data['header']] + = $this->placeholder->update_($data['html']); + } + } + + /** + * Append the dashboard start markup when custom tabs are enabled. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendDashboardWithTabsStart(array &$state): void + { + $state['display'][] = $this->getOpenContainer( + $state['containerId'], + $state['containerClass'] + ); + $state['display'][] = Indent::_(1) . $this->getOpenDiv($state['wrapperTabsClass']); + $state['display'][] = Indent::_(2) . $this->getOpenDiv($state['contentClass']); + $state['display'][] = Indent::_(2) + . $this->getUiTabStartSetCode($state['tabSet'], $state['mainTabAlias']); + $state['display'][] = PHP_EOL . Indent::_(3) + . $this->getUiTabAddTabCode( + $state['tabSet'], + $state['mainTabAlias'], + "Text:" . ":_('cPanel', true)" + ); + $state['display'][] = Indent::_(3) . $this->getOpenDiv($state['rowClass']); + } + + /** + * Append the standard dashboard start markup. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendStandardDashboardStart(array &$state): void + { + $state['display'][] = $this->getOpenContainer( + $state['containerId'], + $state['containerClass'] + ); + $state['display'][] = Indent::_(1) . $this->getOpenDiv($state['wrapperClass']); + $state['display'][] = Indent::_(2) . $this->getOpenDiv($state['contentClass']); + $state['display'][] = Indent::_(3) . $this->getOpenDiv($state['rowClass']); + } + + /** + * Append the main dashboard columns. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendMainDashboardColumns(array &$state): void + { + $this->appendLeftDashboardColumn($state); + $this->appendRightDashboardColumn($state); + } + + /** + * Append the left dashboard column. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendLeftDashboardColumn(array &$state): void + { + $state['display'][] = $state['tab'] + . $this->getOpenDiv($state['mainColumnClass']); + $state['display'][] = $state['tab'] . Indent::_(1) + . $this->getOpenDiv($state['mainInnerClass']); + $state['display'][] = $state['tab'] . Indent::_(2) + . $this->getLoadTemplateCode('main'); + $state['display'][] = $state['tab'] . Indent::_(1) . '
    '; + $state['display'][] = $state['tab'] . '
    '; + } + + /** + * Append the right dashboard column. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendRightDashboardColumn(array &$state): void + { + $state['display'][] = $state['tab'] + . $this->getOpenDiv($state['sideColumnClass']); + $state['display'][] = $state['tab'] . Indent::_(1) + . $this->getOpenDiv($state['sideInnerClass']); + $state['display'][] = $state['tab'] . Indent::_(2) + . $this->getLoadTemplateCode('vdm'); + $state['display'][] = $state['tab'] . Indent::_(1) . '
    '; + $state['display'][] = $state['tab'] . '
    '; + } + + /** + * Append all custom dashboard tabs. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendCustomTabs(array &$state): void + { + $state['display'][] = Indent::_(3) . ''; + $state['display'][] = Indent::_(3) . $this->getUiTabEndTabCode(); + + foreach ($state['builder'] as $tabName => $templates) + { + $this->appendCustomTab($state, $tabName, $templates); + } + } + + /** + * Append a single custom dashboard tab. + * + * @param array &$state The dashboard display state. + * @param string $tabName The tab name. + * @param array $templates The template content definitions. + * + * @return void + * @since 5.1.5 + */ + protected function appendCustomTab(array &$state, string $tabName, array $templates): void + { + $alias = StringHelper::safe($tabName); + + $state['display'][] = PHP_EOL . Indent::_(3) + . $this->getUiTabAddTabCode( + $state['tabSet'], + $alias, + "Joomla__" . "_ba6326ef_cb79_4348_80f4_ab086082e3c5___Power::_('" + . $tabName . "', true)" + ); + $state['display'][] = Indent::_(3) . $this->getOpenDiv($state['rowClass']); + $state['display'][] = $state['tab'] . $this->getOpenDiv($state['fullColumnClass']); + $state['display'][] = $state['tab'] . Indent::_(1) + . $this->getOpenDiv($state['fullInnerClass']); + + $this->appendCustomTabTemplates($state, $alias, $templates); + + $state['display'][] = $state['tab'] . Indent::_(1) . ''; + $state['display'][] = $state['tab'] . ''; + $state['display'][] = Indent::_(3) . ''; + $state['display'][] = Indent::_(3) . $this->getUiTabEndTabCode(); + } + + /** + * Append all template loads for a custom dashboard tab. + * + * @param array &$state The dashboard display state. + * @param string $alias The safe tab alias. + * @param array $templates The template content definitions. + * + * @return void + * @since 5.1.5 + */ + protected function appendCustomTabTemplates(array &$state, string $alias, array $templates): void + { + foreach ($templates as $templateName => $html) + { + $this->appendCustomTabTemplate($state, $alias, $templateName, $html); + } + } + + /** + * Append a single custom dashboard template load and register its content. + * + * @param array &$state The dashboard display state. + * @param string $alias The safe tab alias. + * @param string $templateName The template name. + * @param string $html The HTML content. + * + * @return void + * @since 5.1.5 + */ + protected function appendCustomTabTemplate( + array &$state, + string $alias, + string $templateName, + string $html + ): void + { + $safeTemplateName = $alias . '_' . StringHelper::safe($templateName); + + $state['display'][] = $state['tab'] . Indent::_(2) + . $this->getLoadTemplateCode($safeTemplateName); + + $this->buildCustomDashboardTemplate($safeTemplateName, $html); + } + + /** + * Build a custom dashboard template file and register its content. + * + * @param string $templateName The template name. + * @param string $html The template body HTML. + * + * @return void + * @since 5.1.5 + */ + protected function buildCustomDashboardTemplate(string $templateName, string $html): void + { + $this->buildCustomDashboardTemplateStructure($templateName); + $this->storeCustomDashboardTemplateBody($templateName, $html); + $this->storeCustomDashboardTemplateCodeBody($templateName); + } + + /** + * Build the custom dashboard template structure. + * + * @param string $templateName The template name. + * + * @return void + * @since 5.1.5 + */ + protected function buildCustomDashboardTemplateStructure(string $templateName): void + { + $this->structure->build( + ['custom_admin' => $this->config->component_code_name], + 'template', + $templateName + ); + } + + /** + * Store the custom dashboard template body. + * + * @param string $templateName The template name. + * @param string $html The template body HTML. + * + * @return void + * @since 5.1.5 + */ + protected function storeCustomDashboardTemplateBody(string $templateName, string $html): void + { + $this->contentmulti->set( + $this->getCustomDashboardTemplateKey( + $templateName, + 'CUSTOM_ADMIN_TEMPLATE_BODY' + ), + PHP_EOL . $html + ); + } + + /** + * Store the custom dashboard template code body. + * + * @param string $templateName The template name. + * + * @return void + * @since 5.1.5 + */ + protected function storeCustomDashboardTemplateCodeBody(string $templateName): void + { + $this->contentmulti->set( + $this->getCustomDashboardTemplateKey( + $templateName, + 'CUSTOM_ADMIN_TEMPLATE_CODE_BODY' + ), + '' + ); + } + + /** + * Get the custom dashboard template storage key. + * + * @param string $templateName The template name. + * @param string $suffix The key suffix. + * + * @return string The storage key. + * @since 5.1.5 + */ + protected function getCustomDashboardTemplateKey( + string $templateName, + string $suffix + ): string + { + return $this->config->component_code_name . '_' + . $templateName . '|' . $suffix; + } + + /** + * Append the end of the tab set. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendTabSetEnd(array &$state): void + { + $state['display'][] = PHP_EOL . Indent::_(2) + . $this->getUiTabEndTabSetCode(); + } + + /** + * Append the end of the main row layout. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendMainRowEnd(array &$state): void + { + $state['display'][] = Indent::_(3) . ''; + } + + /** + * Append the closing dashboard container markup. + * + * @param array &$state The dashboard display state. + * + * @return void + * @since 5.1.5 + */ + protected function appendDashboardContainerEnd(array &$state): void + { + $state['display'][] = Indent::_(2) . ''; + $state['display'][] = Indent::_(1) . ''; + $state['display'][] = ''; + } + + /** + * Get the PHP code for starting a UI tab set. + * + * @param string $tabSet The tab set name. + * @param string $activeTab The active tab alias. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getUiTabStartSetCode( + string $tabSet, + string $activeTab + ): string + { + return "getUiTabHelperName('startTabSet') . "', '" . $tabSet + . "', array('active' => '" . $activeTab . "')); ?>"; + } + + /** + * Get the PHP code for adding a UI tab. + * + * @param string $tabSet The tab set name. + * @param string $alias The tab alias. + * @param string $title The tab title PHP expression. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getUiTabAddTabCode( + string $tabSet, + string $alias, + string $title + ): string + { + return "getUiTabHelperName('addTab') . "', '" . $tabSet + . "', '" . $alias . "', " . $title . "); ?>"; + } + + /** + * Get the PHP code for ending a UI tab. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getUiTabEndTabCode(): string + { + return "getUiTabHelperName('endTab') . "'); ?>"; + } + + /** + * Get the PHP code for ending a UI tab set. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getUiTabEndTabSetCode(): string + { + return "getUiTabHelperName('endTabSet') . "'); ?>"; + } + + /** + * Get the UI tab helper name. + * + * @param string $method The helper method name. + * + * @return string The full helper name. + * @since 5.1.5 + */ + protected function getUiTabHelperName(string $method): string + { + return 'uitab.' . $method; + } + + /** + * Get the PHP code for loading a layout template. + * + * @param string $templateName The template name. + * + * @return string The generated PHP code. + * @since 5.1.5 + */ + protected function getLoadTemplateCode(string $templateName): string + { + return "loadTemplate('" . $templateName . "');?>"; + } + + /** + * Get the opening container markup. + * + * @param string $id The container ID. + * @param string|null $class The container class. + * + * @return string The container opening markup. + * @since 5.1.5 + */ + protected function getOpenContainer(string $id, ?string $class = null): string + { + if ($class !== null && $class !== '') + { + return '
    '; + } + + return '
    '; + } + + /** + * Get the opening div markup. + * + * @param string $class The div class. + * + * @return string The div opening markup. + * @since 5.1.5 + */ + protected function getOpenDiv(string $class): string + { + return '
    '; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaSix/Dashboard/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaSix/Dashboard/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaSix/Dashboard/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Dashboard/View.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Dashboard/View.php new file mode 100644 index 000000000..c9b21ffb7 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Dashboard/View.php @@ -0,0 +1,514 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Dashboard; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Component; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Structure; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Dashboard\ViewInterface; + + +/** + * Dashboard View Class + * + * @since 5.1.5 + */ +final class View implements ViewInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.5 + */ + protected Config $config; + + /** + * The Component Class. + * + * @var Component + * @since 5.1.5 + */ + protected Component $component; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.5 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.5 + */ + protected ContentOne $contentone; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.5 + */ + protected ContentMulti $contentmulti; + + /** + * The Structure Class. + * + * @var Structure + * @since 5.1.5 + */ + protected Structure $structure; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Component $component The Component Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentOne $contentone The ContentOne Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * @param Structure $structure The Structure Class. + * + * @since 5.1.5 + */ + public function __construct(Config $config, Component $component, + Placeholder $placeholder, ContentOne $contentone, + ContentMulti $contentmulti, Structure $structure) + { + $this->config = $config; + $this->component = $component; + $this->placeholder = $placeholder; + $this->contentone = $contentone; + $this->contentmulti = $contentmulti; + $this->structure = $structure; + } + + /** + * Build the admin dashboard display markup. + * + * @return string The compiled dashboard display markup. + * + * @since 5.1.5 + */ + public function get(): string + { + $state = $this->getDashboardDisplayState(); + + $this->initializeDashboardDisplay($state); + $this->appendMainDashboardColumns($state); + + if ($state['loadTabs']) + { + $this->appendCustomTabs($state); + $this->appendTabSetEnd($state); + } + else + { + $this->appendStandardRowEnd($state); + } + + $this->appendDashboardContainerEnd($state); + + return PHP_EOL . implode(PHP_EOL, $state['display']); + } + + /** + * Get the initial dashboard display state. + * + * @return array The dashboard display state. + * + * @since 5.1.5 + */ + protected function getDashboardDisplayState(): array + { + return [ + 'display' => [], + 'mainAccordianName' => 'cPanel', + 'builder' => [], + 'tab' => Indent::_(3), + 'loadTabs' => false, + 'widthClass' => 'span', + 'rowClass' => 'row-fluid', + 'formClass' => 'form-horizontal', + 'uiTab' => 'bootstrap', + ]; + } + + /** + * Initialize the dashboard display structure. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function initializeDashboardDisplay(array &$state): void + { + if ($this->hasCustomDashboardTabs()) + { + $this->buildCustomDashboardTabTemplates($state['builder']); + $this->appendDashboardWithTabsStart($state); + + $state['mainAccordionName'] = 'Control Panel'; + $state['loadTabs'] = true; + + return; + } + + $this->appendStandardDashboardStart($state); + } + + /** + * Check whether custom dashboard tabs exist. + * + * @return bool True if custom dashboard tabs exist. + * + * @since 5.1.5 + */ + protected function hasCustomDashboardTabs(): bool + { + return $this->component->isArray('dashboard_tab'); + } + + /** + * Build the custom dashboard tab template map. + * + * @param array &$builder The builder map. + * + * @return void + * + * @since 5.1.5 + */ + protected function buildCustomDashboardTabTemplates(array &$builder): void + { + foreach ($this->component->get('dashboard_tab') as $data) + { + $builder[$data['name']][$data['header']] + = $this->placeholder->update_($data['html']); + } + } + + /** + * Append the dashboard start markup when custom tabs are enabled. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendDashboardWithTabsStart(array &$state): void + { + $state['display'][] = '
    '; + $state['display'][] = Indent::_(1) . '
    '; + $state['display'][] = Indent::_(1) + . " 'cpanel')); ?>"; + $state['display'][] = PHP_EOL . Indent::_(2) + . ""; + $state['display'][] = Indent::_(2) . '
    '; + } + + /** + * Append the standard dashboard start markup. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendStandardDashboardStart(array &$state): void + { + $state['display'][] = '
    '; + $state['display'][] = Indent::_(1) . '
    '; + $state['display'][] = Indent::_(2) . '
    '; + } + + /** + * Append the main dashboard columns. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendMainDashboardColumns(array &$state): void + { + $this->appendLeftDashboardColumn($state); + $this->appendRightDashboardColumn($state); + } + + /** + * Append the left dashboard column. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendLeftDashboardColumn(array &$state): void + { + $state['display'][] = $state['tab'] . '
    '; + $state['display'][] = $state['tab'] . Indent::_(1) + . " 'main')); ?>"; + $state['display'][] = $state['tab'] . Indent::_(2) + . ""; + $state['display'][] = $state['tab'] . Indent::_(3) + . "loadTemplate('main');?>"; + $state['display'][] = $state['tab'] . Indent::_(2) + . ""; + $state['display'][] = $state['tab'] . Indent::_(1) + . ""; + $state['display'][] = $state['tab'] . '
    '; + } + + /** + * Append the right dashboard column. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendRightDashboardColumn(array &$state): void + { + $companyName = $this->contentone->get('COMPANYNAME'); + + $state['display'][] = $state['tab'] . '
    '; + $state['display'][] = $state['tab'] . Indent::_(1) + . " 'vdm')); ?>"; + $state['display'][] = $state['tab'] . Indent::_(2) + . ""; + $state['display'][] = $state['tab'] . Indent::_(3) + . "loadTemplate('vdm');?>"; + $state['display'][] = $state['tab'] . Indent::_(2) + . ""; + $state['display'][] = $state['tab'] . Indent::_(1) + . ""; + $state['display'][] = $state['tab'] . '
    '; + } + + /** + * Append all custom dashboard tabs. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendCustomTabs(array &$state): void + { + $state['display'][] = Indent::_(2) . '
    '; + $state['display'][] = Indent::_(2) + . ""; + + foreach ($state['builder'] as $tabName => $accordions) + { + $this->appendCustomTab($state, $tabName, $accordions); + } + } + + /** + * Append a single custom dashboard tab. + * + * @param array &$state The dashboard display state. + * @param string $tabName The tab name. + * @param array $accordions The accordion definitions. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendCustomTab(array &$state, string $tabName, array $accordions): void + { + $alias = StringHelper::safe($tabName); + + $state['display'][] = PHP_EOL . Indent::_(2) + . ""; + $state['display'][] = Indent::_(2) . '
    '; + $state['display'][] = $state['tab'] . '
    '; + $state['display'][] = $state['tab'] . Indent::_(1) + . " '" . $alias . "_one')); ?>"; + + $this->appendCustomTabSlides($state, $tabName, $alias, $accordions); + + $state['display'][] = $state['tab'] . Indent::_(1) + . ""; + $state['display'][] = $state['tab'] . '
    '; + $state['display'][] = Indent::_(2) . '
    '; + $state['display'][] = Indent::_(2) + . ""; + } + + /** + * Append all slides for a custom dashboard tab. + * + * @param array &$state The dashboard display state. + * @param string $tabName The tab name. + * @param string $alias The tab alias. + * @param array $accordions The accordion definitions. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendCustomTabSlides(array &$state, string $tabName, string $alias, array $accordions): void + { + $slideCounter = 1; + + foreach ($accordions as $accordionName => $html) + { + $this->appendCustomTabSlide( + $state, + $tabName, + $alias, + $accordionName, + $html, + $slideCounter + ); + + $slideCounter++; + } + } + + /** + * Append a single custom dashboard tab slide. + * + * @param array &$state The dashboard display state. + * @param string $tabName The tab name. + * @param string $alias The tab alias. + * @param string $accordionName The accordion name. + * @param string $html The slide HTML. + * @param int $slideCounter The slide counter. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendCustomTabSlide( + array &$state, + string $tabName, + string $alias, + string $accordionName, + string $html, + int $slideCounter + ): void + { + $accordionAlias = StringHelper::safe($accordionName); + $counterName = StringHelper::safe($slideCounter); + $templateName = $alias . '_' . $accordionAlias; + + $state['display'][] = $state['tab'] . Indent::_(2) + . ""; + $state['display'][] = $state['tab'] . Indent::_(3) + . "loadTemplate('" . $templateName . "');?>"; + $state['display'][] = $state['tab'] . Indent::_(2) + . ""; + + $this->buildCustomDashboardTemplate($templateName, $html); + } + + /** + * Build a custom dashboard template file and register its content. + * + * @param string $templateName The template name. + * @param string $html The template body HTML. + * + * @return void + * + * @since 5.1.5 + */ + protected function buildCustomDashboardTemplate(string $templateName, string $html): void + { + $componentCodeName = $this->config->component_code_name; + + $target = ['custom_admin' => $componentCodeName]; + $this->structure->build($target, 'template', $templateName); + + $this->contentmulti->set( + $componentCodeName . '_' . $templateName . '|CUSTOM_ADMIN_TEMPLATE_BODY', + PHP_EOL . $html + ); + + $this->contentmulti->set( + $componentCodeName . '_' . $templateName . '|CUSTOM_ADMIN_TEMPLATE_CODE_BODY', + '' + ); + } + + /** + * Append the end of the tab set. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendTabSetEnd(array &$state): void + { + $state['display'][] = PHP_EOL . Indent::_(1) + . ""; + } + + /** + * Append the end of the standard row layout. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendStandardRowEnd(array &$state): void + { + $state['display'][] = Indent::_(2) . '
    '; + } + + /** + * Append the closing dashboard container markup. + * + * @param array &$state The dashboard display state. + * + * @return void + * + * @since 5.1.5 + */ + protected function appendDashboardContainerEnd(array &$state): void + { + $state['display'][] = Indent::_(1) . '
    '; + $state['display'][] = '
    '; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Dashboard/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Dashboard/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Dashboard/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php index d468abba6..3bd3faf9d 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php @@ -49,6 +49,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureComponent; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureModel; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureView; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureController; +use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureDashboard; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureModule; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitecturePlugin; use VDM\Joomla\Componentbuilder\Power\Service\Git; @@ -180,6 +181,7 @@ abstract class Factory extends ExtendingFactory implements FactoryInterface ->registerServiceProvider(new ArchitectureModel()) ->registerServiceProvider(new ArchitectureView()) ->registerServiceProvider(new ArchitectureController()) + ->registerServiceProvider(new ArchitectureDashboard()) ->registerServiceProvider(new ArchitectureModule()) ->registerServiceProvider(new ArchitecturePlugin()) ->registerServiceProvider(new Git()) diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php index 8432a2205..a1b7f9f84 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php @@ -1661,7 +1661,7 @@ class Infusion extends Interpretation // DASH_DISPLAY_DATA CFactory::_('Compiler.Builder.Content.Multi')->set(CFactory::_('Config')->component_code_name . '|DASH_DISPLAY_DATA', - $this->setDashboardDisplayData() + CFactory::_('Architecture.Dashboard.View')->get() ); // DASH_VIEW_HEADER diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php index cf7cb6e98..da207a9be 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php @@ -2551,20 +2551,31 @@ class Interpretation extends Fields $view['settings']->css_document )) { - $script = PHP_EOL . Indent::_(2) . "//" . Line::_( + if (CFactory::_('Config')->get('joomla_version', 3) == 3) + { + $script = PHP_EOL . Indent::_(2) . "//" . Line::_( __LINE__,__CLASS__ - ) . " Set the Custom CSS script to view" . PHP_EOL - . Indent::_(2) . '$this->document->addStyleDeclaration("'; + ) . " Set the Custom CSS script to view" . PHP_EOL + . Indent::_(2) . '$this->document->addStyleDeclaration("'; + } + else + { + $script = PHP_EOL . Indent::_(2) . "//" . Line::_( + __LINE__,__CLASS__ + ) . " Set the Custom JS script to view" . PHP_EOL + . Indent::_(2) . '$this->getDocument()->getWebAssetManager()->addInlineStyle("'; + } + $cssDocument = PHP_EOL . Indent::_(3) . str_replace( - '"', '\"', implode( - PHP_EOL . Indent::_(3), - $view['settings']->css_document - ) - ); + '"', '\"', implode( + PHP_EOL . Indent::_(3), + $view['settings']->css_document + ) + ); return $script . CFactory::_('Placeholder')->update_( - $cssDocument - ) . PHP_EOL . Indent::_(2) . '");'; + $cssDocument + ) . PHP_EOL . Indent::_(2) . '");'; } } @@ -3507,10 +3518,19 @@ class Interpretation extends Fields // top if ('site' === CFactory::_('Config')->build_target) { - return '
    ' - . PHP_EOL; + if (CFactory::_('Config')->get('joomla_version', 3) >= 6) + { + return '' + . PHP_EOL; // yes we only need index.php + } + else + { + return '' + . PHP_EOL; + } } else { @@ -8121,7 +8141,7 @@ class Interpretation extends Fields // set the item default class $itemClass = 'hidden-phone'; // set the item row - $itemRow = $this->getListItemBuilder( + $itemRow = CFactory::_('Architecture.AdminViews.ListItemBuilder')->get( $item, $nameSingleCode, $nameListCode, $itemClass, $doNotEscape ); // check if buttons was already added @@ -8194,263 +8214,18 @@ class Interpretation extends Fields } /** - * Get the list item dynamic row + * Get the list field class * - * @param array $item The item array - * @param string $nameSingleCode The single view code name - * @param string $nameListCode The list view code name - * @param string $itemClass The table row default class - * @param bool $doNotEscape The do not escape global switch - * @param bool $class The dive class adding switch - * @param string $ref The link referral string - * @param string $classPointer The class pointer (this or displaydata) - * @param string $user The user code name - * @param string $refview The override of the referral view code name + * @param string $name The field code name + * @param string $nameListCode The list view code name + * @param string $default The default * - * @return string of the completer item value for the table row + * @return string The list field class * */ - protected function getListItemBuilder($item, $nameSingleCode, - $nameListCode, &$itemClass, $doNotEscape, - $class = true, $ref = null, $classPointer = '$this->', - $user = '$this->user', $refview = null - ) + protected function getListFieldClass($name, $nameListCode, $default = '') { - // check if we have relation fields - if (($field_relations = - CFactory::_('Compiler.Builder.Field.Relations')->get($nameListCode . '.' . (string) $item['guid'] . '.2')) !== null) - { - // set the fields array - $field = []; - // use custom code - $useCustomCode - = (isset($field_relations['join_type']) - && $field_relations['join_type'] - == 2 - && isset($field_relations['set']) - && StringHelper::check( - $field_relations['set'] - )); - // load the main list view field - $field_list_item = $this->getListItem( - $item, $nameSingleCode, $nameListCode, $itemClass, - $doNotEscape, false, $ref, $classPointer, $user, - $refview - ); - $field['[field=' . (int) $item['id'] . ']'] = $field_list_item; - $field['[field=' . (string) $item['guid'] . ']'] = $field_list_item; - // code name - if (isset($item['code'])) - { - $field['$item->{' . (int) $item['id'] . '}'] = '$item->' . $item['code']; - $field['$item->{' . (string) $item['guid'] . '}'] = '$item->' . $item['code']; - } - // now load the relations - if (isset($field_relations['joinfields']) - && ArrayHelper::check($field_relations['joinfields'])) - { - foreach ($field_relations['joinfields'] as $join) - { - $blankClass = ''; - if (($join_item = - CFactory::_('Compiler.Builder.List.Join')->get($nameListCode . '.' . (string) $join)) !== null && is_array($join_item)) - { - $join_id = CFactory::_('Compiler.Builder.List.Join')->get($nameListCode . '.' . (string) $join . '.id', 0); - // code block - $join_field_list_item = $this->getListItem( - $join_item, $nameSingleCode, $nameListCode, $blankClass, - $doNotEscape, false, $ref, - $classPointer, $user, $refview - ); - $field['[field=' . (int) $join_id . ']'] = $join_field_list_item; - $field['[field=' . (string) $join . ']'] = $join_field_list_item; - // code name - if (isset($join_item['code'])) - { - $field['$item->{' . (int) $join_id . '}'] = '$item->' . $join_item['code']; - $field['$item->{' . (string) $join . '}'] = '$item->' . $join_item['code']; - } - } - } - } - // join based on join type - if ($useCustomCode) - { - // custom code - return PHP_EOL . Indent::_(3) . "
    " - . CFactory::_('Placeholder')->update_( - str_replace( - array_keys($field), array_values($field), - (string) $field_relations['set'] - ) - ) . PHP_EOL . Indent::_(3) . "
    "; - } - elseif (isset($field_relations['set']) - && StringHelper::check( - $field_relations['set'] - )) - { - // concatenate - return PHP_EOL . Indent::_(3) . "
    " . implode( - $field_relations['set'], - $field - ) . PHP_EOL . Indent::_(3) . "
    "; - } - - // default - return PHP_EOL . Indent::_(3) . "
    " . implode('', $field) - . PHP_EOL . Indent::_(3) . "
    "; - } - - return $this->getListItem( - $item, $nameSingleCode, $nameListCode, $itemClass, $doNotEscape, - $class, $ref, $classPointer, $user, $refview - ); - } - - /** - * Get the list item row value - * - * @param array $item The item array - * @param string $nameSingleCode The single view code name - * @param string $nameListCode The list view code name - * @param string $itemClass The table row default class - * @param bool $doNotEscape The do not escape global switch - * @param bool $class The dive class adding switch - * @param string $ref The link referral string - * @param string $classPointer The class pointer - * @param string $user The user code name - * @param string $refview The override of the referral view code name - * - * @return string of the single item value for the table row - * - */ - protected function getListItem($item, $nameSingleCode, $nameListCode, - &$itemClass, $doNotEscape, $class = true, $ref = null, - $classPointer = '$this->', $user = '$this->user', $refview = null) - { - // get list item code - $itemCode = $this->getListItemCode( - $item, $nameListCode, $doNotEscape, $classPointer - ); - // add default links - $defaultLink = true; - if (StringHelper::check($refview) && isset($item['custom']) - && isset($item['custom']['view']) && $refview === $item['custom']['view']) - { - $defaultLink = false; - } - // is this a linked item - $extends_field = $item['custom']['extends'] ?? ''; - if (($item['link'] || $extends_field === 'user') && $defaultLink) - { - // set some defaults - $checkoutTriger = false; - // set the item default class - $itemClass = 'nowrap'; - // get list item link - $itemLink = $this->getListItemLink( - $item, $checkoutTriger, $nameSingleCode, $nameListCode, $ref - ); - // get list item link authority - $itemLinkAuthority = $this->getListItemLinkAuthority( - $item, $nameSingleCode, $nameListCode, $classPointer, $user - ); - - // set item row - return $this->getListItemLinkLogic( - $item, $itemCode, $itemLink, $itemLinkAuthority, $nameSingleCode, - $nameListCode, $classPointer, $checkoutTriger, $class - ); - } - - // return the default (no link) - return PHP_EOL . Indent::_(3) . ""; - } - - /** - * Get the list item link logic - * - * @param array $item The item - * @param string $itemCode The item code string - * @param string $itemLink The item link string - * @param string $itemLinkAuthority The link authority string - * @param string $nameSingleCode The single view code name - * @param string $nameListCode The list view code name - * @param bool $checkoutTriger The check out trigger - * @param string $classPointer The class pointer - * @param bool $class The dive class adding switch - * - * @return string of the complete link logic of row item - * - */ - protected function getListItemLinkLogic($item, $itemCode, $itemLink, - $itemLinkAuthority, $nameSingleCode, $nameListCode, $classPointer, $checkoutTriger, $class = true) - { - // set some local values - $code = $item['code']; - // build link - $link = ''; - // add class - $tab = ''; - if ($class) - { - $link .= PHP_EOL . Indent::_(3) . '
    '; - $tab = Indent::_(1); - } - // the link logic - $link .= PHP_EOL . $tab . Indent::_(3) . ""; - $link .= PHP_EOL . $tab . Indent::_(4) . ''; - $addModalFix = false; - if ($checkoutTriger) - { - $link .= PHP_EOL . $tab . Indent::_(4) - . "checked_out): ?>"; - $link .= PHP_EOL . $tab . Indent::_(5) - . "name, \$item->checked_out_time, '" - . $nameListCode . ".', \$canCheckin); ?>"; - $link .= PHP_EOL . $tab . Indent::_(4) . ""; - if (CFactory::_('Config')->get('joomla_version', 3) !== 3) - { - $addModalFix = true; - } - } - $link .= PHP_EOL . $tab . Indent::_(3) . ""; - if ($addModalFix) - { - $link .= PHP_EOL . $tab . Indent::_(4) . ""; - $link .= PHP_EOL . $tab . Indent::_(5) . ""; - $link .= PHP_EOL . $tab . Indent::_(4) . ""; - $link .= PHP_EOL . $tab . Indent::_(5) . "id}\";"; - $link .= PHP_EOL . $tab . Indent::_(6) . "\$dataId = \$item->{{$classPointer}getModalTitleKey()} ?? 0;"; - $link .= PHP_EOL . $tab . Indent::_(6) . "\$itemHtml = '' . {$classPointer}escape(\$item->{$code}, false) . '';"; - $link .= PHP_EOL . $tab . Indent::_(6) . "\$attribs = 'data-content-select data-content-type=\"com_" . CFactory::_('Config')->component_code_name . ".". $nameSingleCode . "\"'"; - $link .= PHP_EOL . $tab . Indent::_(7) . ". ' data-id=\"' . \$dataId . '\"'"; - $link .= PHP_EOL . $tab . Indent::_(7) . ". ' data-title=\"' . {$classPointer}escape(\$item->{$code}, false) . '\"'"; - $link .= PHP_EOL . $tab . Indent::_(7) . ". ' data-uri=\"' . {$classPointer}escape(\$link, false) . '\"'"; - $link .= PHP_EOL . $tab . Indent::_(7) . ". ' data-html=\"' . {$classPointer}escape(\$itemHtml, false) . '\"';"; - $link .= PHP_EOL . $tab . Indent::_(5) . "?>"; - $link .= PHP_EOL . $tab . Indent::_(5) . ">"; - $link .= PHP_EOL . $tab . Indent::_(6) . ""; - $link .= PHP_EOL . $tab . Indent::_(5) . ""; - $link .= PHP_EOL . $tab . Indent::_(4) . ""; - } - else - { - $link .= PHP_EOL . $tab . Indent::_(4) . ""; - } - $link .= PHP_EOL . $tab . Indent::_(3) . ""; - // add class - if ($class) - { - $link .= PHP_EOL . Indent::_(3) . "
    "; - } - - // return the link logic - return $link; + return CFactory::_('Compiler.Builder.List.Field.Class')->get($nameListCode . '.' . $name, $default); } /** @@ -8506,276 +8281,6 @@ class Interpretation extends Fields return $customAdminViewButton; } - /** - * Get the list item code value - * - * @param array $item The item array - * @param string $nameListCode The list view code name - * @param bool $doNotEscape The do not escape global switch - * @param string $classPointer The class pointer - * - * @return string of the single item code - * - */ - protected function getListItemCode(&$item, $nameListCode, $doNotEscape, $classPointer = '$this->') - { - // first update the code id needed - if (isset($item['custom']) - && ArrayHelper::check( - $item['custom'] - ) - && isset($item['custom']['table']) - && StringHelper::check($item['custom']['table'])) - { - $item['id_code'] = $item['code']; - if (!$item['multiple']) - { - $item['code'] = $item['code'] . '_' . $item['custom']['text']; - } - } - // set the extends value - $extends_field = $item['custom']['extends'] ?? ''; - $extends_text = $item['custom']['text'] ?? ''; - // check if category - if ($item['type'] === 'category' && !$item['title']) - { - return $classPointer . 'escape($item->category_title)'; - } - // check if user - elseif ($item['type'] === 'user') - { - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - return 'Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getUser((int)$item->' . $item['code'] . ')->name'; - } - else - { - return 'Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->' - . 'get(Joomla__'.'_c2980d12_c3ef_4e23_b4a2_e6af1f5900a9___Power::class)->' - . 'loadUserById((int) ($item->' . $item['code'] . ' ?? 0))->name'; - } - } - // check if custom user - elseif (isset($item['custom']) - && ArrayHelper::check($item['custom']) - && $extends_field === 'user' - && isset($item['id_code'])) - { - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - return 'Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getUser((int)$item->' . $item['id_code'] . ')->name'; - } - else - { - return 'Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->' - . 'get(Joomla__'.'_c2980d12_c3ef_4e23_b4a2_e6af1f5900a9___Power::class)->' - . 'loadUserById((int) ($item->' . $item['id_code'] . ' ?? 0))->name'; - } - } - // check if translated value is used - elseif (CFactory::_('Compiler.Builder.Selection.Translation')-> - exists($nameListCode . '.' . $item['code'])) - { - return 'Joomla__'.'_ba6326ef_cb79_4348_80f4_ab086082e3c5___Power::_($item->' . $item['code'] . ')'; - } - elseif (isset($item['custom']) - && ArrayHelper::check($item['custom']) - && ($extends_text === 'user' || $extends_field === 'user')) - { - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - return 'Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getUser((int)$item->' . $item['code'] . ')->name'; - } - else - { - return 'Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->' - . 'get(Joomla__'.'_c2980d12_c3ef_4e23_b4a2_e6af1f5900a9___Power::class)->' - . 'loadUserById((int) ($item->' . $item['code'] . ' ?? 0))->name'; - } - } - elseif ($doNotEscape) - { - if (CFactory::_('Compiler.Builder.Do.Not.Escape')->exists($nameListCode . '.' . $item['code'])) - { - return '$item->' . $item['code']; - } - } - - // default - return $classPointer . 'escape($item->' . $item['code'] . ')'; - } - - /** - * Get the list item link - * - * @param array $item The item array - * @param bool $checkoutTriger The checkout trigger switch - * @param string $nameSingleCode The single view code name - * @param string $nameListCode The list view code name - * @param string $ref The link referral string - * - * @return string of the single item link - * - */ - protected function getListItemLink($item, &$checkoutTriger, - $nameSingleCode, $nameListCode, $ref = null) - { - // set referal if not set - $referal = ''; - if (!$ref) - { - $ref = '&return=return_here; ?>'; - } - // in linked tab/view so must add ref to default - else - { - $referal = $ref; - } - // if to be linked - if ($item['type'] === 'category' && !$item['title']) - { - // return the link to category - return 'index.php?option=com_categories&task=category.edit&id=' - . $item['code'] . '; ?>&extension=' - . CFactory::_('Compiler.Builder.Category')->get("{$nameListCode}.extension", 'error'); - } - elseif ($item['type'] === 'user' && !$item['title']) - { - // return user link - return 'index.php?option=com_users&task=user.edit&id=' - . $item['code'] . ' ?>'; - } - elseif (isset($item['custom']) - && ArrayHelper::check( - $item['custom'] - ) - && $item['custom']['extends'] != 'user' - && !$item['title'] - && isset($item['id_code'])) - { - // build GUID link - if (isset($item['custom']['id']) && $item['custom']['id'] !== 'id') - { - // link to that linked item - return 'index.php?option=' . $item['custom']['component'] . '&view=' - . $item['custom']['views'] . '&task=' . $item['custom']['view'] - . '.edit&id=' . $item['id_code'] . '_id; ?>' - . $ref; - } - // link to that linked item - return 'index.php?option=' . $item['custom']['component'] . '&view=' - . $item['custom']['views'] . '&task=' . $item['custom']['view'] - . '.edit&id=' . $item['id_code'] . '; ?>' - . $ref; - } - elseif (isset($item['custom']) - && ArrayHelper::check( - $item['custom'] - ) - && $item['custom']['extends'] === 'user' - && !$item['title'] - && isset($item['id_code'])) - { - // return user link - return 'index.php?option=com_users&task=user.edit&id=' - . $item['id_code'] . ' ?>'; - } - // make sure to triger the checkout - $checkoutTriger = true; - - // basic default item link - return '&id=id; ?>' . $referal; - } - - /** - * Get the list item authority - * - * @param array $item The item array - * @param string $nameSingleCode The single view code name - * @param string $nameListCode The list view code name - * @param string $classPointer The class pointer - * @param string $user The user code name - * - * @return string of the single item link authority - * - */ - protected function getListItemLinkAuthority($item, $nameSingleCode, $nameListCode, $classPointer= '$this->', $user = '$this->user') - { - // add modal fix - $isModal = ''; - if (CFactory::_('Config')->get('joomla_version', 3) !== 3) - { - $isModal = "!{$classPointer}isModal && "; - } - // if to be linked - if ($item['type'] === 'category' && !$item['title']) - { - // get the other view - $otherView = CFactory::_('Compiler.Builder.Category.Code')->getString("{$nameSingleCode}.view", 'error'); - - // return the authority to category - return $isModal . $user . "->authorise('core.edit', 'com_" - . CFactory::_('Config')->component_code_name . "." . $otherView - . ".category.' . (int) (\$item->" . $item['code'] . " ?? 0))"; - } - elseif ($item['type'] === 'user' && !$item['title']) - { - // return user authority - return $isModal . $user . "->authorise('core.edit', 'com_users')"; - } - elseif (isset($item['custom']) - && ArrayHelper::check( - $item['custom'] - ) - && $item['custom']['extends'] != 'user' - && !$item['title'] - && isset($item['id_code'])) - { - // do this with GUID - if (isset($item['custom']['id']) && $item['custom']['id'] !== 'id') - { - return $isModal . $user . "->authorise('" . CFactory::_('Compiler.Creator.Permission')->getAction($item['custom']['view'], 'core.edit') - . "', 'com_" . CFactory::_('Config')->component_code_name . "." - . $item['custom']['view'] . ".' . (int) (\$item->" . $item['id_code'] . "_id ?? 0))"; - } - else - { - return $isModal . $user . "->authorise('" . CFactory::_('Compiler.Creator.Permission')->getAction($item['custom']['view'], 'core.edit') - . "', 'com_" . CFactory::_('Config')->component_code_name . "." - . $item['custom']['view'] . ".' . (int) (\$item->" . $item['id_code'] . " ?? 0))"; - } - } - elseif (isset($item['custom']) - && ArrayHelper::check( - $item['custom'] - ) - && $item['custom']['extends'] === 'user' - && !$item['title'] - && isset($item['id_code'])) - { - // return user link - return $isModal . $user . "->authorise('core.edit', 'com_users')"; - } - - // set core permissions. - return $isModal . "\$canDo->get('" . CFactory::_('Compiler.Creator.Permission')->getGlobal($nameSingleCode, 'core.edit') . "')"; - } - - /** - * Get the list field class - * - * @param string $name The field code name - * @param string $nameListCode The list view code name - * @param string $default The default - * - * @return string The list field class - * - */ - protected function getListFieldClass($name, $nameListCode, $default = '') - { - return CFactory::_('Compiler.Builder.List.Field.Class')->get($nameListCode . '.' . $name, $default); - } - /** * set the default views body * @@ -9346,7 +8851,7 @@ class Interpretation extends Fields foreach ($tabBucket as $tabCodeName => $positions) { // get lang string - $tabLangName = $positions['lang']; + $tabLangName = $positions['lang'] ?? 'error_missing_lang'; // build main center position $main = ''; $mainbottom = ''; @@ -10831,6 +10336,7 @@ class Interpretation extends Fields // make sure the custom links are only added once $firstTimeBeingAdded = true; $counter = 0; + $itemClass = ''; // add the default $body = PHP_EOL . ""; $body .= PHP_EOL . " \$item): ?>"; @@ -10871,7 +10377,7 @@ class Interpretation extends Fields // set some defaults $customAdminViewButtons = ''; // set the item row - $itemRow = $this->getListItemBuilder( + $itemRow = CFactory::_('Architecture.AdminViews.ListItemBuilder')->get( $item, $nameSingleCode, $nameListCode, $itemClass, $doNotEscape, false, $ref, '$displayData->', '$user', $refview @@ -16871,7 +16377,7 @@ class Interpretation extends Fields { foreach ($fields as $area => $field) { - if ($area == 1 && isset($field['code'])) + if ((int) $area === 1 && !empty($field['code'])) { $fix .= $this->setModelFieldRelation( $field, $nameListCode, $tab @@ -17226,7 +16732,7 @@ class Interpretation extends Fields { foreach ($fields as $area => $field) { - if ($area == 3 && isset($field['code'])) + if ((int) $area === 3 && !empty($field['code'])) { $fix .= $this->setModelFieldRelation( $field, $nameListCode, $tab @@ -17453,11 +16959,12 @@ class Interpretation extends Fields { $fix = ''; // set fields - $field = []; + $field_placeholders = []; // set list field name - $field['$item->{' . (int) $item['id'] . '}'] = '$item->' . $item['code']; - $field['$item->{' . (string) $item['guid'] . '}'] = '$item->' . $item['code']; + $field_placeholders['$item->{' . (int) $item['id'] . '}'] = '$item->' . $item['code']; + $field_placeholders['$item->{' . (string) $item['guid'] . '}'] = '$item->' . $item['code']; + $field_array[] = '$item->' . $item['code']; // load joint field names if (isset($item['joinfields']) @@ -17470,18 +16977,19 @@ class Interpretation extends Fields $join_id = CFactory::_('Compiler.Builder.List.Join')->get($nameListCode . '.' . (string) $join . '.id', 0); $join_string = '$item->' . CFactory::_('Compiler.Builder.List.Join')->get($nameListCode . '.' . (string) $join . '.code', 'error'); - $field['$item->{' . (int) $join_id . '}'] = $join_string; - $field['$item->{' . $join . '}'] = $join_string; + $field_placeholders['$item->{' . (int) $join_id . '}'] = $join_string; + $field_placeholders['$item->{' . $join . '}'] = $join_string; + $field_array[] = $join_string; } } // set based on join_type - if ($item['join_type'] == 2) + if ((int) $item['join_type'] === 2) { // code $code = (array) explode( PHP_EOL, str_replace( - array_keys($field), array_values($field), (string) $item['set'] + array_keys($field_placeholders), array_values($field_placeholders), (string) $item['set'] ) ); $fix .= PHP_EOL . Indent::_(1) . $tab . Indent::_(3) . implode( @@ -17496,7 +17004,7 @@ class Interpretation extends Fields $fix .= PHP_EOL . Indent::_(1) . $tab . Indent::_(3) . "\$item->" . $item['code'] . ' = ' . implode( " . '" . str_replace("'", ''', (string) $item['set']) . "' . ", - $field + $field_array ) . ';'; } @@ -17905,274 +17413,6 @@ class Interpretation extends Fields return ''; } - public function setDashboardDisplayData() - { - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - return $this->setDashboardDisplayDataJ3(); - } - return $this->setDashboardDisplayDataJ4(); - } - - public function setDashboardDisplayDataJ3() - { - // display array reset - $display = []; - $mainAccordianName = 'cPanel'; - $builder = []; - $tab = Indent::_(3); - $loadTabs = false; - $width_class = 'span'; - $row_class = 'row-fluid'; - $form_class = 'form-horizontal'; - $uitab = 'bootstrap'; - - // check if we have custom tabs - if (CFactory::_('Component')->isArray('dashboard_tab')) - { - // build the tabs and accordians - foreach (CFactory::_('Component')->get('dashboard_tab') as $data) - { - $builder[$data['name']][$data['header']] - = CFactory::_('Placeholder')->update_( - $data['html'] - ); - } - // since we have custom tabs we must load the tab structure around the cpanel - $display[] = '
    '; - $display[] = Indent::_(1) . '
    '; - $display[] = Indent::_(1) - . " 'cpanel')); ?>"; - $display[] = PHP_EOL . Indent::_(2) - . ""; - $display[] = Indent::_(2) . '
    '; - // change the name of the main tab - $mainAccordianName = 'Control Panel'; - $loadTabs = true; - } - else - { - $display[] = '
    '; - $display[] = Indent::_(1) . '
    '; - $display[] = Indent::_(2) . '
    '; - } - // set dashboard display - $display[] = $tab . '
    '; - $display[] = $tab . Indent::_(1) - . " 'main')); ?>"; - $display[] = $tab . Indent::_(2) - . ""; - $display[] = $tab . Indent::_(3) - . "loadTemplate('main');?>"; - $display[] = $tab . Indent::_(2) - . ""; - $display[] = $tab . Indent::_(1) - . ""; - $display[] = $tab . "
    "; - $display[] = $tab . '
    '; - $display[] = $tab . Indent::_(1) - . " 'vdm')); ?>"; - $display[] = $tab . Indent::_(2) - . "get('COMPANYNAME') - . "', 'vdm'); ?>"; - $display[] = $tab . Indent::_(3) - . "loadTemplate('vdm');?>"; - $display[] = $tab . Indent::_(2) - . ""; - $display[] = $tab . Indent::_(1) - . ""; - $display[] = $tab . "
    "; - - if ($loadTabs) - { - $display[] = Indent::_(2) . "
    "; - $display[] = Indent::_(2) - . ""; - // load the new tabs - foreach ($builder as $tabname => $accordians) - { - $alias = StringHelper::safe($tabname); - $display[] = PHP_EOL . Indent::_(2) - . ""; - $display[] = Indent::_(2) . '
    '; - $display[] = $tab . '
    '; - $display[] = $tab . Indent::_(1) - . " '" . $alias - . "_one')); ?>"; - $slidecounter = 1; - foreach ($accordians as $accordianname => $html) - { - $ac_alias = StringHelper::safe( - $accordianname - ); - $counterName = StringHelper::safe( - $slidecounter - ); - $tempName = $alias . '_' . $ac_alias; - $display[] = $tab . Indent::_(2) - . ""; - $display[] = $tab . Indent::_(3) - . "loadTemplate('" . $tempName - . "');?>"; - $display[] = $tab . Indent::_(2) - . ""; - $slidecounter++; - // build the template file - $target = array('custom_admin' => CFactory::_('Config')->component_code_name); - CFactory::_('Utilities.Structure')->build($target, 'template', $tempName); - // set the file data - $TARGET = StringHelper::safe( - CFactory::_('Config')->build_target, 'U' - ); - // CUSTOM_ADMIN_TEMPLATE_BODY <<>> - CFactory::_('Compiler.Builder.Content.Multi')->set(CFactory::_('Config')->component_code_name . '_' . $tempName . '|CUSTOM_ADMIN_TEMPLATE_BODY', PHP_EOL . $html); - // CUSTOM_ADMIN_TEMPLATE_CODE_BODY <<>> - CFactory::_('Compiler.Builder.Content.Multi')->set(CFactory::_('Config')->component_code_name . '_' . $tempName . '|CUSTOM_ADMIN_TEMPLATE_CODE_BODY', ''); - } - $display[] = $tab . Indent::_(1) - . ""; - $display[] = $tab . "
    "; - $display[] = Indent::_(2) . "
    "; - $display[] = Indent::_(2) - . ""; - } - - $display[] = PHP_EOL . Indent::_(1) - . ""; - } - else - { - $display[] = Indent::_(2) . "
    "; - } - $display[] = Indent::_(1) . "
    "; - $display[] = "
    "; - - // return the display - return PHP_EOL . implode(PHP_EOL, $display); - } - - public function setDashboardDisplayDataJ4() - { - // display array reset - $display = []; - $mainAccordianName = 'cPanel'; - $builder = []; - $tab = Indent::_(3); - $loadTabs = false; - $width_class = 'col-md-'; - $row_class = 'row'; - $form_class = 'main-card'; - $uitab = 'uitab'; - - // check if we have custom tabs - if (CFactory::_('Component')->isArray('dashboard_tab')) - { - // build the tabs and accordians - foreach (CFactory::_('Component')->get('dashboard_tab') as $data) - { - $builder[$data['name']][$data['header']] - = CFactory::_('Placeholder')->update_( - $data['html'] - ); - } - // since we have custom tabs we must load the tab structure around the cpanel - $display[] = '
    '; - $display[] = Indent::_(1) . '
    '; - $display[] = Indent::_(1) - . " 'cpanel')); ?>"; - $display[] = PHP_EOL . Indent::_(2) - . ""; - $display[] = Indent::_(2) . '
    '; - // change the name of the main tab - $mainAccordianName = 'Control Panel'; - $loadTabs = true; - } - else - { - $display[] = '
    '; - $display[] = Indent::_(1) . '
    '; - $display[] = Indent::_(2) . '
    '; - } - // set dashboard display - $display[] = $tab . '
    '; - $display[] = $tab . Indent::_(1) - . "loadTemplate('main');?>"; - $display[] = $tab . "
    "; - $display[] = $tab . '
    '; - $display[] = $tab . Indent::_(1) - . "loadTemplate('vdm');?>"; - $display[] = $tab . "
    "; - - if ($loadTabs) - { - $display[] = Indent::_(2) . "
    "; - $display[] = Indent::_(2) - . ""; - // load the new tabs - foreach ($builder as $tabname => $accordians) - { - $alias = StringHelper::safe($tabname); - $display[] = PHP_EOL . Indent::_(2) - . ""; - $display[] = Indent::_(2) . '
    '; - $display[] = $tab . '
    '; - $slidecounter = 1; - foreach ($accordians as $accordianname => $html) - { - $ac_alias = StringHelper::safe( - $accordianname - ); - $counterName = StringHelper::safe( - $slidecounter - ); - $tempName = $alias . '_' . $ac_alias; - $display[] = $tab . Indent::_(1) - . "loadTemplate('" . $tempName - . "');?>"; - $slidecounter++; - // build the template file - $target = array('custom_admin' => CFactory::_('Config')->component_code_name); - CFactory::_('Utilities.Structure')->build($target, 'template', $tempName); - // set the file data - $TARGET = StringHelper::safe( - CFactory::_('Config')->build_target, 'U' - ); - // SITE_TEMPLATE_BODY <<>> - CFactory::_('Compiler.Builder.Content.Multi')->set(CFactory::_('Config')->component_code_name . '_' . $tempName . '|CUSTOM_ADMIN_TEMPLATE_BODY', PHP_EOL . $html); - // SITE_TEMPLATE_CODE_BODY <<>> - CFactory::_('Compiler.Builder.Content.Multi')->set(CFactory::_('Config')->component_code_name . '_' . $tempName . '|CUSTOM_ADMIN_TEMPLATE_CODE_BODY', ''); - } - $display[] = $tab . "
    "; - $display[] = Indent::_(2) . "
    "; - $display[] = Indent::_(2) - . ""; - } - - $display[] = PHP_EOL . Indent::_(1) - . ""; - } - else - { - $display[] = Indent::_(2) . "
    "; - } - $display[] = Indent::_(1) . "
    "; - $display[] = "
    "; - - // return the display - return PHP_EOL . implode(PHP_EOL, $display); - } - public function addCustomDashboardIcons(&$view, &$counter) { $icon = ''; diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Dashboard/ViewInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Dashboard/ViewInterface.php new file mode 100644 index 000000000..de15e68e7 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Dashboard/ViewInterface.php @@ -0,0 +1,30 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Dashboard; + + +/** + * Dashboard View Interface + * + * @since 5.1.5 + */ +interface ViewInterface +{ + /** + * Build the admin dashboard display markup. + * + * @return string The compiled dashboard display markup. + * @since 5.1.5 + */ + public function get(): string; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Dashboard/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Dashboard/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Dashboard/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/Data.php index 02b3cfe4e..cb102500f 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/Data.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/Data.php @@ -120,7 +120,7 @@ class Data * @since 3.2.0 */ public function __construct(Config $config, Registry $registry, - Customcode $customcode = null, Gui $gui, + Customcode $customcode, Gui $gui, FieldData $field, Filesfolders $filesFolders, DatabaseInterface $db, Superpower $superpower) { diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Libraries.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Libraries.php index b8e87cc98..835bd6767 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Libraries.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Libraries.php @@ -78,7 +78,7 @@ class Libraries * @return void * @since 3.2.0 */ - public function set(string $key, object &$item, string $target = null) + public function set(string $key, object &$item, ?string $target = null) { // set the target $target = $target ?: $this->config->build_target; diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Power/Injector.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Power/Injector.php index 08bd614f3..58f4511a2 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Power/Injector.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Power/Injector.php @@ -101,15 +101,15 @@ class Injector implements InjectorInterface /** * Constructor. * - * @param Power|null $power The power object. - * @param Extractor|null $extractor The powers extractor object. - * @param Parser|null $parser The powers parser object. - * @param Placeholder|null $placeholder The compiler placeholder object. + * @param Power $power The power object. + * @param Extractor $extractor The powers extractor object. + * @param Parser $parser The powers parser object. + * @param Placeholder $placeholder The compiler placeholder object. * * @since 3.2.0 */ - public function __construct(Power $power = null, Extractor $extractor = null, - Parser $parser = null, Placeholder $placeholder = null) + public function __construct(Power $power, Extractor $extractor, + Parser $parser, Placeholder $placeholder) { $this->power = $power; $this->extractor = $extractor; diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureDashboard.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureDashboard.php new file mode 100644 index 000000000..843060d90 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureDashboard.php @@ -0,0 +1,160 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Service; + + +use Joomla\DI\Container; +use Joomla\DI\ServiceProviderInterface; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Dashboard\ViewInterface; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaSix\Dashboard\View as J6View; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Dashboard\View as J5View; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Dashboard\View as J4View; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Dashboard\View as J3View; + + +/** + * Architecture Dashboard Service Provider + * + * @since 5.1.5 + */ +class ArchitectureDashboard implements ServiceProviderInterface +{ + /** + * Current Joomla Version Being Build + * + * @var int + * @since 5.1.5 + **/ + protected $targetVersion; + + /** + * Registers the service provider with a DI container. + * + * @param Container $container The DI container. + * + * @return void + * @since 5.1.5 + */ + public function register(Container $container) + { + $container->alias(ViewInterface::class, 'Architecture.Dashboard.View') + ->share('Architecture.Dashboard.View', [$this, 'getViewInterface'], true); + + $container->alias(J6View::class, 'Architecture.Dashboard.J6.View') + ->share('Architecture.Dashboard.J6.View', [$this, 'getJ6View'], true); + + $container->alias(J5View::class, 'Architecture.Dashboard.J5.View') + ->share('Architecture.Dashboard.J5.View', [$this, 'getJ5View'], true); + + $container->alias(J4View::class, 'Architecture.Dashboard.J4.View') + ->share('Architecture.Dashboard.J4.View', [$this, 'getJ4View'], true); + + $container->alias(J3View::class, 'Architecture.Dashboard.J3.View') + ->share('Architecture.Dashboard.J3.View', [$this, 'getJ3View'], true); + } + + /** + * Get The ViewInterface Class. + * + * @param Container $container The DI container. + * + * @return ViewInterface + * @since 5.1.5 + */ + public function getViewInterface(Container $container): ViewInterface + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Architecture.Dashboard.J' . $this->targetVersion . '.View'); + } + + /** + * Get The View Class. + * + * @param Container $container The DI container. + * + * @return J6View + * @since 5.1.5 + */ + public function getJ6View(Container $container): J6View + { + return new J6View( + $container->get('Config'), + $container->get('Component'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.Multi'), + $container->get('Utilities.Structure') + ); + } + + /** + * Get The View Class. + * + * @param Container $container The DI container. + * + * @return J5View + * @since 5.1.5 + */ + public function getJ5View(Container $container): J5View + { + return new J5View( + $container->get('Config'), + $container->get('Component'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.Multi'), + $container->get('Utilities.Structure') + ); + } + + /** + * Get The View Class. + * + * @param Container $container The DI container. + * + * @return J4View + * @since 5.1.5 + */ + public function getJ4View(Container $container): J4View + { + return new J4View( + $container->get('Config'), + $container->get('Component'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.Multi'), + $container->get('Utilities.Structure') + ); + } + + /** + * Get The View Class. + * + * @param Container $container The DI container. + * + * @return J3View + * @since 5.1.5 + */ + public function getJ3View(Container $container): J3View + { + return new J3View( + $container->get('Config'), + $container->get('Component'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Content.Multi'), + $container->get('Utilities.Structure') + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureView.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureView.php index 282ab3c48..d4f9ac474 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureView.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureView.php @@ -46,6 +46,12 @@ use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaSix\CustomAdminViews use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\CustomAdminViews\AddToolBar as J5CustomAdminViewsAddToolBar; use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\CustomAdminViews\AddToolBar as J4CustomAdminViewsAddToolBar; use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\CustomAdminViews\AddToolBar as J3CustomAdminViewsAddToolBar; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItemBuilder; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem\ItemCode; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem\Link; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem\LinkAuthority; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\AdminViews\ListItem\LinkLogic; /** @@ -130,7 +136,6 @@ class ArchitectureView implements ServiceProviderInterface $container->alias(J3AdminViewsAddToolBar::class, 'Architecture.AdminViews.J3.AddToolBar') ->share('Architecture.AdminViews.J3.AddToolBar', [$this, 'getJ3AdminViewsAddToolBar'], true); - $container->alias(SiteViewAddToolBar::class, 'Architecture.SiteView.AddToolBar') ->share('Architecture.SiteView.AddToolBar', [$this, 'getSiteViewAddToolBar'], true); @@ -177,6 +182,25 @@ class ArchitectureView implements ServiceProviderInterface $container->alias(J3CustomAdminViewsAddToolBar::class, 'Architecture.CustomAdminViews.J3.AddToolBar') ->share('Architecture.CustomAdminViews.J3.AddToolBar', [$this, 'getJ3CustomAdminViewsAddToolBar'], true); + + + $container->alias(ListItemBuilder::class, 'Architecture.AdminViews.ListItemBuilder') + ->share('Architecture.AdminViews.ListItemBuilder', [$this, 'getAdminViewsListItemBuilder'], true); + + $container->alias(ListItem::class, 'Architecture.AdminViews.ListItem') + ->share('Architecture.AdminViews.ListItem', [$this, 'getAdminViewsListItem'], true); + + $container->alias(ItemCode::class, 'Architecture.AdminViews.ListItem.ItemCode') + ->share('Architecture.AdminViews.ListItem.ItemCode', [$this, 'getAdminViewsListItemItemCode'], true); + + $container->alias(Link::class, 'Architecture.AdminViews.ListItem.Link') + ->share('Architecture.AdminViews.ListItem.Link', [$this, 'getAdminViewsListItemLink'], true); + + $container->alias(LinkAuthority::class, 'Architecture.AdminViews.ListItem.LinkAuthority') + ->share('Architecture.AdminViews.ListItem.LinkAuthority', [$this, 'getAdminViewsListItemLinkAuthority'], true); + + $container->alias(LinkLogic::class, 'Architecture.AdminViews.ListItem.LinkLogic') + ->share('Architecture.AdminViews.ListItem.LinkLogic', [$this, 'getAdminViewsListItemLinkLogic'], true); } /** @@ -782,6 +806,106 @@ class ArchitectureView implements ServiceProviderInterface $container->get('Compiler.Builder.Content.One'), $container->get('Architecture.CustomButtons') ); + } + + /** + * Get The ListItemBuilder Class. + * + * @param Container $container The DI container. + * + * @return ListItemBuilder + * @since 5.1.5 + */ + public function getAdminViewsListItemBuilder(Container $container): ListItemBuilder + { + return new ListItemBuilder( + $container->get('Placeholder'), + $container->get('Architecture.AdminViews.ListItem'), + $container->get('Compiler.Builder.Field.Relations'), + $container->get('Compiler.Builder.List.Join') + ); + } + + /** + * Get The ListItem Class. + * + * @param Container $container The DI container. + * + * @return ListItem + * @since 5.1.5 + */ + public function getAdminViewsListItem(Container $container): ListItem + { + return new ListItem( + $container->get('Architecture.AdminViews.ListItem.ItemCode'), + $container->get('Architecture.AdminViews.ListItem.Link'), + $container->get('Architecture.AdminViews.ListItem.LinkAuthority'), + $container->get('Architecture.AdminViews.ListItem.LinkLogic') + ); + } + + /** + * Get The ItemCode Class. + * + * @param Container $container The DI container. + * + * @return ItemCode + * @since 5.1.5 + */ + public function getAdminViewsListItemItemCode(Container $container): ItemCode + { + return new ItemCode( + $container->get('Config'), + $container->get('Compiler.Builder.Selection.Translation'), + $container->get('Compiler.Builder.Do.Not.Escape') + ); + } + + /** + * Get The Link Class. + * + * @param Container $container The DI container. + * + * @return Link + * @since 5.1.5 + */ + public function getAdminViewsListItemLink(Container $container): Link + { + return new Link( + $container->get('Compiler.Builder.Category') + ); + } + + /** + * Get The LinkAuthority Class. + * + * @param Container $container The DI container. + * + * @return LinkAuthority + * @since 5.1.5 + */ + public function getAdminViewsListItemLinkAuthority(Container $container): LinkAuthority + { + return new LinkAuthority( + $container->get('Config'), + $container->get('Compiler.Builder.Category.Code'), + $container->get('Compiler.Creator.Permission') + ); + } + + /** + * Get The LinkLogic Class. + * + * @param Container $container The DI container. + * + * @return LinkLogic + * @since 5.1.5 + */ + public function getAdminViewsListItemLinkLogic(Container $container): LinkLogic + { + return new LinkLogic( + $container->get('Config') + ); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Paths.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Paths.php index c559dc2f2..71a9624b0 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Paths.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Utilities/Paths.php @@ -48,7 +48,7 @@ class Paths extends Registry * * @since 3.2.0 */ - public function __construct(Config $config = null, Component $component = null) + public function __construct(Config $config, Component $component) { $this->config = $config; $this->component = $component; diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Item.php index 312f5217a..49b3040f5 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Item.php @@ -69,7 +69,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Main.php index 8d82ba75f..747e78e5e 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Main.php @@ -106,7 +106,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Item.php index 203c14133..07d3180f9 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Item.php @@ -73,7 +73,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Main.php index a2522d8e9..11342473e 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Readme/Main.php @@ -95,7 +95,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Network/Resolve.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Network/Resolve.php index 85d423390..e82364f7d 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Network/Resolve.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Network/Resolve.php @@ -61,22 +61,22 @@ final class Resolve * * @param string $target The target network. * @param string &$domain The API base domain (passed by reference). - * @param string &$organisation The repository organisation (passed by reference). + * @param string &$organization The repository organization (passed by reference). * @param string &$repository The repository name (passed by reference). * * @return void * @since 5.0.4 */ - public function api(string $target, string &$domain, string &$organisation, string &$repository): void + public function api(string $target, string &$domain, string &$organization, string &$repository): void { try { // Check the status of the current API - $status = $this->status->get($target, $domain, $repository, $organisation); + $status = $this->status->get($target, $domain, $repository, $organization); // If the API is inactive, attempt to find another active URL if ($status == 0) { - $this->resolve($target, $domain, $organisation, $repository); + $this->resolve($target, $domain, $organization, $repository); } } catch (\Exception $e) { // ignore any none [in]active urls @@ -87,18 +87,18 @@ final class Resolve /** * Resolves an active API URL if the current API is inactive. * - * Updates the `$domain`, `$organisation`, and `$repository` parameters to point to an active API URL. + * Updates the `$domain`, `$organization`, and `$repository` parameters to point to an active API URL. * * @param string $target The target network. * @param string &$domain The API base domain (passed by reference). - * @param string &$organisation The repository organisation (passed by reference). + * @param string &$organization The repository organization (passed by reference). * @param string &$repository The repository name (passed by reference). * * @return void * @throws \Exception * @since 5.0.4 */ - private function resolve(string $target, string &$domain, string &$organisation, string &$repository): void + private function resolve(string $target, string &$domain, string &$organization, string &$repository): void { $activeRepo = $this->active($target); @@ -111,12 +111,12 @@ final class Resolve // Parse the active repository's URL and update the references $parsedUrl = $this->url->parse($activeRepo->url); - $noneActiveDomain = "{$domain}/{$organisation}/{$repository}"; - $activeDomain = "{$parsedUrl->scheme}://{$parsedUrl->domain}/{$parsedUrl->organisation}/{$parsedUrl->repository}"; + $noneActiveDomain = "{$domain}/{$organization}/{$repository}"; + $activeDomain = "{$parsedUrl->scheme}://{$parsedUrl->domain}/{$parsedUrl->organization}/{$parsedUrl->repository}"; // update the values passed by reference $domain = $parsedUrl->scheme . '://' . $parsedUrl->domain; - $organisation = $parsedUrl->organisation ?? $organisation; + $organization = $parsedUrl->organization ?? $organization; $repository = $parsedUrl->repository ?? $repository; // add info diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/AdminView/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/AdminView/Readme/Item.php index 8832121f4..1258d84f8 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/AdminView/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/AdminView/Readme/Item.php @@ -71,7 +71,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/AdminView/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/AdminView/Readme/Main.php index 1fbdf003e..16ec04b13 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/AdminView/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/AdminView/Readme/Main.php @@ -108,7 +108,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Component/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Component/Readme/Item.php index 191ed903b..4bb022254 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Component/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Component/Readme/Item.php @@ -147,7 +147,7 @@ MD; ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Component/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Component/Readme/Main.php index 445fc0207..e8e0cc1ef 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Component/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Component/Readme/Main.php @@ -119,7 +119,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomAdminView/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomAdminView/Readme/Item.php index ebc4a76af..d64da5a69 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomAdminView/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomAdminView/Readme/Item.php @@ -71,7 +71,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomAdminView/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomAdminView/Readme/Main.php index 6cd0962d0..45876a35c 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomAdminView/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomAdminView/Readme/Main.php @@ -117,7 +117,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomCode/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomCode/Readme/Item.php index 0907ee43c..e69ec3332 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomCode/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomCode/Readme/Item.php @@ -88,7 +88,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomCode/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomCode/Readme/Main.php index bc2f07133..cc11c74ae 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomCode/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/CustomCode/Readme/Main.php @@ -173,7 +173,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/DynamicGet/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/DynamicGet/Readme/Item.php index 9c0ed435c..2037d249b 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/DynamicGet/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/DynamicGet/Readme/Item.php @@ -125,7 +125,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/DynamicGet/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/DynamicGet/Readme/Main.php index da25edc06..763075062 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/DynamicGet/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/DynamicGet/Readme/Main.php @@ -122,7 +122,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Field/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Field/Readme/Item.php index 2762c7b45..9e6a5905e 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Field/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Field/Readme/Item.php @@ -106,7 +106,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Field/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Field/Readme/Main.php index 66f7083ea..29bf1b291 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Field/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Field/Readme/Main.php @@ -128,7 +128,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Item.php index c0ecd5d94..d667eebc0 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Item.php @@ -148,7 +148,7 @@ MD; ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Main.php index 3855e5536..09e93efb9 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Main.php @@ -110,7 +110,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaPlugin/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaPlugin/Readme/Item.php index 8711aca33..eb6005b33 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaPlugin/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaPlugin/Readme/Item.php @@ -116,7 +116,7 @@ MD; ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaPlugin/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaPlugin/Readme/Main.php index bb8754f3c..0017ce401 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaPlugin/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaPlugin/Readme/Main.php @@ -111,7 +111,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Layout/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Layout/Readme/Item.php index ec8bd5fc7..360fe36d9 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Layout/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Layout/Readme/Item.php @@ -79,7 +79,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Layout/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Layout/Readme/Main.php index 62eed0ea1..da1c32ae9 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Layout/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Layout/Readme/Main.php @@ -110,7 +110,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Library/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Library/Readme/Item.php index 822947c8f..999f3d356 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Library/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Library/Readme/Item.php @@ -56,7 +56,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Library/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Library/Readme/Main.php index 4166dacfb..bdcdf45cb 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Library/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Library/Readme/Main.php @@ -127,7 +127,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/SiteView/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/SiteView/Readme/Item.php index cd0537bfb..bde71531f 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/SiteView/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/SiteView/Readme/Item.php @@ -71,7 +71,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/SiteView/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/SiteView/Readme/Main.php index 501960cd1..22aaf1c3d 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/SiteView/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/SiteView/Readme/Main.php @@ -119,7 +119,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Template/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Template/Readme/Item.php index 942c3f8c5..cd4f2e12a 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Template/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Template/Readme/Item.php @@ -79,7 +79,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Template/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Template/Readme/Main.php index e0a00ab04..43216570c 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Template/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Template/Readme/Main.php @@ -106,7 +106,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/ValidationRule/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/ValidationRule/Readme/Item.php index 921ca71ef..08af14467 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/ValidationRule/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/ValidationRule/Readme/Item.php @@ -66,7 +66,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/ValidationRule/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/ValidationRule/Readme/Main.php index 1c6ec0814..9a39d5236 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/ValidationRule/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/ValidationRule/Readme/Main.php @@ -160,7 +160,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Readme/Item.php index 87a1a9f5b..e601c7308 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Readme/Item.php @@ -119,7 +119,7 @@ MD; ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Readme/Main.php index b12fad221..c808ff1d6 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Readme/Main.php @@ -110,7 +110,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Repository/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Repository/Readme/Item.php index f65bc067f..31e842c0b 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Repository/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Repository/Readme/Item.php @@ -91,7 +91,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Repository/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Repository/Readme/Main.php index d8f3e193f..e929d80bd 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Repository/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Repository/Readme/Main.php @@ -130,7 +130,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Database/Insert.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Database/Insert.php index 89106bf0a..7369f92cc 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Database/Insert.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Database/Insert.php @@ -157,7 +157,7 @@ class Insert implements InsertInterface * @return bool * @since 3.2.0 */ - public function items(?array $items, string $table = null): bool + public function items(?array $items, ?string $table = null): bool { // load the table if (empty($table)) diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Database/Load.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Database/Load.php index bfba84c42..8996fed9c 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Database/Load.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Database/Load.php @@ -98,7 +98,7 @@ class Load implements LoadInterface * @return mixed * @since 3.2.0 */ - public function value(int $id, string $field, string $table = null) + public function value(int $id, string $field, ?string $table = null) { // load the table if (empty($table)) @@ -132,7 +132,7 @@ class Load implements LoadInterface * @return object|null * @since 3.2.0 */ - public function item(int $id, string $table = null): ?object + public function item(int $id, ?string $table = null): ?object { // load the table if (empty($table)) @@ -165,7 +165,7 @@ class Load implements LoadInterface * @return array|null * @since 3.2.0 */ - public function items(string $table = null, int $bundle = 0): ?array + public function items(?string $table = null, int $bundle = 0): ?array { // load the table if (empty($table)) diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Interfaces/InsertInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Interfaces/InsertInterface.php index 171b1e5d5..6bd7b826f 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Interfaces/InsertInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Interfaces/InsertInterface.php @@ -55,6 +55,6 @@ interface InsertInterface * @return bool * @since 3.2.0 */ - public function items(array $items, string $table = null): bool; + public function items(array $items, ?string $table = null): bool; } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Interfaces/LoadInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Interfaces/LoadInterface.php index 6c38fcc42..eec02cecc 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Interfaces/LoadInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Search/Interfaces/LoadInterface.php @@ -30,7 +30,7 @@ interface LoadInterface * @return mixed * @since 3.2.0 */ - public function value(int $id, string $field, string $table = null); + public function value(int $id, string $field, ?string $table = null); /** * Get values from a given table @@ -42,7 +42,7 @@ interface LoadInterface * @return object|null * @since 3.2.0 */ - public function item(int $id, string $table = null): ?object; + public function item(int $id, ?string $table = null): ?object; /** * Get values from a given table @@ -54,7 +54,7 @@ interface LoadInterface * @return array|null * @since 3.2.0 */ - public function items(string $table = null, int $bundle = 0): ?array; + public function items(?string $table = null, int $bundle = 0): ?array; } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Snippet/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Snippet/Readme/Item.php index c8a8420b2..79f06f342 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Snippet/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Snippet/Readme/Item.php @@ -117,7 +117,7 @@ final class Item implements ItemInterface ### Used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Snippet/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Snippet/Readme/Main.php index d9ed82dd4..ce7333f2e 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Snippet/Readme/Main.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Snippet/Readme/Main.php @@ -107,7 +107,7 @@ MD; ### All used in [Joomla Component Builder](https://www.joomlacomponentbuilder.com) - [Source](https://git.vdm.dev/joomla/Component-Builder) - [Mirror](https://github.com/vdm-io/Joomla-Component-Builder) - [Download](https://git.vdm.dev/joomla/pkg-component-builder/releases) --- -[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/u/llewellyn "Llewellyn on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") +[![Joomla Volunteer Portal](https://img.shields.io/badge/-Joomla-gold?logo=joomla)](https://volunteers.joomla.org/joomlers/1396-llewellyn-van-der-merwe "Join Llewellyn on the Joomla Volunteer Portal: Shaping the Future Together!") [![GitHub](https://img.shields.io/badge/-Git-181717?logo=git)](https://github.com/joomengine "Build premium Joomla extensions with JoomEngine on GitHub: Help us raise Joomla extension standards!") [![Octoleo](https://img.shields.io/badge/-Octoleo-black?logo=linux)](https://git.vdm.dev/octoleo "--quiet") [![Llewellyn](https://img.shields.io/badge/-Llewellyn-ffffff?logo=gitea)](https://git.vdm.dev/Llewellyn "Collaborate and Innovate with Llewellyn on Git: Building a Better Code Future!") [![Telegram](https://img.shields.io/badge/-Telegram-blue?logo=telegram)](https://t.me/Joomla_component_builder "Join Llewellyn and the Community on Telegram: Building Joomla Components Together!") [![Mastodon](https://img.shields.io/badge/-Mastodon-9e9eec?logo=mastodon)](https://joomla.social/@llewellyn "Connect and Engage with Llewellyn on Joomla Social: Empowering Communities, One Post at a Time!") [![X (Twitter)](https://img.shields.io/badge/-X-black?logo=x)](https://x.com/llewellynvdm "Join the Conversation with Llewellyn on X: Where Ideas Take Flight!") [![GitHub](https://img.shields.io/badge/-GitHub-181717?logo=github)](https://github.com/Llewellynvdm "Build, Innovate, and Thrive with Llewellyn on GitHub: Turning Ideas into Impact!") [![YouTube](https://img.shields.io/badge/-YouTube-ff0000?logo=youtube)](https://www.youtube.com/@OctoYou "Explore, Learn, and Create with Llewellyn on YouTube: Your Gateway to Inspiration!") [![n8n](https://img.shields.io/badge/-n8n-black?logo=n8n)](https://n8n.io/creators/octoleo "Effortless Automation and Impactful Workflows with Llewellyn on n8n!") [![Docker Hub](https://img.shields.io/badge/-Docker-grey?logo=docker)](https://hub.docker.com/r/octoleo/joomengine "JoomEngine on Docker: Containerize Your Creativity!") [![Open Collective](https://img.shields.io/badge/-Donate-green?logo=opencollective)](https://opencollective.com/joomla-component-builder "Donate towards JCB: Help Llewellyn financially so he can continue developing this great tool!") [![GPG Key](https://img.shields.io/badge/-GPG-blue?logo=gnupg)](https://git.vdm.dev/Llewellyn/gpg "Unlock Trust and Security with Llewellyn's GPG Key: Your Gateway to Verified Connections!") MD; return implode("\n", $readme); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/File/HandlerInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/File/HandlerInterface.php index 3d5d69e05..bef0714f2 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/File/HandlerInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/File/HandlerInterface.php @@ -80,7 +80,7 @@ interface HandlerInterface * @return array|null File details or false on failure. * @since 3.0.11 */ - public function getFile(string $field, string $type, string $filter = null, string $path = null): ?array; + public function getFile(string $field, string $type, ?string $filter = null, ?string $path = null): ?array; /** * Remove a previously uploaded file. diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Git/Repository/ContentsInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Git/Repository/ContentsInterface.php index 186bcc565..da73758d5 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Git/Repository/ContentsInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Git/Repository/ContentsInterface.php @@ -192,7 +192,7 @@ interface ContentsInterface extends ApiInterface * @return string|null * @since 3.2.0 **/ - public function editor(string $owner, string $repo, string $filepath, string $ref = null): ?string; + public function editor(string $owner, string $repo, string $filepath, ?string $ref = null): ?string; /** * Get the blob of a repository. diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Git/Repository/WikiInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Git/Repository/WikiInterface.php index bf169569f..fc0e3b82b 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Git/Repository/WikiInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Git/Repository/WikiInterface.php @@ -111,7 +111,7 @@ interface WikiInterface extends ApiInterface string $pageName, string $title, string $content, - string $message = null + ?string $message = null ): ?object; /** diff --git a/media/js/admin_fields_relations.js b/media/js/admin_fields_relations.js index 33b828b35..b1ce18e45 100644 --- a/media/js/admin_fields_relations.js +++ b/media/js/admin_fields_relations.js @@ -17,74 +17,270 @@ jQuery(document).ready(function() getEditCustomCodeButtons(); }); -// the isSet function +/** + * Track active requests per subform row so stale responses + * do not overwrite newer values. + * + * @type {Object.} + */ +var codeGlueOptionsControllers = {}; + +/** + * Check whether a value is set. + * + * @param {*} value + * @returns {boolean} + */ function _isSet(value) { return value !== undefined && value !== null && value !== ''; } -// Function to set the value -function getCodeGlueOptions(field) { - // Get the ID - var id = field.id; - var target = id.split('__'); +/** + * Get a DOM element by ID. + * + * @param {string} id + * @returns {HTMLElement|null} + */ +function getElement(id) { + return document.getElementById(id); +} - // Set the subID - var subID = target[0] + '__' + target[1]; +/** + * Get the subform row prefix from a field element. + * + * Expected field ID format: + * prefix__rowindex__fieldname + * + * @param {HTMLElement} field + * @returns {string} + */ +function getSubformRowId(field) { + if (!field || !field.id || typeof field.id !== 'string') { + return ''; + } - // Get listfield value - var listfield = document.getElementById(subID + '__listfield')?.value || ''; - // Get type value - var type = document.getElementById(subID + '__join_type')?.value || ''; - // Get area value - var area = document.getElementById(subID + '__area')?.value || ''; + var parts = field.id.split('__'); - // Check that values are set - if (_isSet(listfield) && _isSet(type) && _isSet(area)) { - // Get joinfields values - var joinfields = document.getElementById(subID + '__joinfields')?.value || ''; + if (parts.length < 3) { + return ''; + } - // Fetch CodeGlueOptions - getCodeGlueOptions_server(listfield, joinfields, type, area) - .then(result => { - document.getElementById(subID + '__set').value = result || ''; - }) - .catch(() => { - document.getElementById(subID + '__set').value = ''; - }); - } else { - document.getElementById(subID + '__set').value = ''; + return parts[0] + '__' + parts[1]; +} + +/** + * Get a trimmed field value by ID. + * + * @param {string} id + * @returns {string} + */ +function getFieldValue(id) { + var element = getElement(id); + + if (!element || element.value === undefined || element.value === null) { + return ''; + } + + return String(element.value).trim(); +} + +/** + * Extract selected values from a select element. + * + * For a multiple select, all selected values are returned. + * For a normal select, the selected value is returned as a one-item array. + * + * @param {HTMLSelectElement|null} selectElement + * @returns {string[]} + */ +function getSelectedValues(selectElement) { + if (!selectElement || !selectElement.selectedOptions) { + return []; + } + + return Array.from(selectElement.selectedOptions, function(option) { + return String(option.value || '').trim(); + }).filter(function(value) { + return value !== ''; + }); +} + +/** + * Convert selected join field values into the exact format + * expected by the PHP server method: + * + * - "guid1,guid2,guid3" when values exist + * - "none" when no values are selected + * + * @param {string[]} values + * @returns {string} + */ +function buildJoinfieldsString(values) { + if (!Array.isArray(values) || values.length === 0) { + return 'none'; + } + + return values.join(','); +} + +/** + * Normalize the AJAX response into a string. + * + * Your PHP method returns a string or false. + * Depending on the Joomla AJAX wrapper, the JSON response may contain + * that value directly or inside a property like result/data/value. + * + * @param {*} result + * @returns {string} + */ +function normalizeCodeGlueResponse(result) { + if (result === false || result === null || result === undefined) { + return ''; + } + + if (typeof result === 'string') { + return result; + } + + if (typeof result === 'object') { + if (_isSet(result.result)) { + return String(result.result); + } + + if (_isSet(result.data)) { + return String(result.data); + } + + if (_isSet(result.value)) { + return String(result.value); + } + } + + return ''; +} + +/** + * Abort an in-flight request for a given subform row. + * + * @param {string} subID + * @returns {void} + */ +function abortCodeGlueOptionsRequest(subID) { + if (codeGlueOptionsControllers[subID]) { + codeGlueOptionsControllers[subID].abort(); + delete codeGlueOptionsControllers[subID]; } } -// Function to fetch data from the server -function getCodeGlueOptions_server(listfield, joinfields, type, area) { - var getUrl = JRouter("index.php?option=com_componentbuilder&task=ajax.getCodeGlueOptions&format=json"); +/** + * Triggered on subform field change. + * Reads sibling field values, fetches CodeGlue options, + * and writes the result into the set field. + * + * @param {HTMLElement} field + * @returns {void} + */ +function getCodeGlueOptions(field) { + var subID = getSubformRowId(field); - // Ensure joinfields is set - if (!_isSet(joinfields)) { - joinfields = 'none'; + if (!subID) { + console.warn('getCodeGlueOptions: could not determine subform row ID.', field); + return; } - if (typeof token !== 'undefined' && token.length > 0 && listfield.length > 0 && type > 0 && area > 0) { - var params = new URLSearchParams({ - [token]: '1', - listfield: listfield, - type: type, - area: area, - joinfields: joinfields - }); + var setField = getElement(subID + '__set'); - return fetch(getUrl + '&' + params.toString(), { - method: 'GET', - headers: { - 'Accept': 'application/json' - } + if (!setField) { + console.warn('getCodeGlueOptions: target "set" field not found for row:', subID); + return; + } + + var listfield = getFieldValue(subID + '__listfield'); + var type = getFieldValue(subID + '__join_type'); + var area = getFieldValue(subID + '__area'); + var joinfieldsSelect = getElement(subID + '__joinfields'); + var joinfields = buildJoinfieldsString(getSelectedValues(joinfieldsSelect)); + + if (!_isSet(listfield) || !_isSet(type) || !_isSet(area)) { + abortCodeGlueOptionsRequest(subID); + setField.value = ''; + return; + } + + getCodeGlueOptions_server(subID, listfield, joinfields, type, area) + .then(function(result) { + setField.value = normalizeCodeGlueResponse(result); }) - .then(response => response.json()) - .catch(() => null); + .catch(function(error) { + if (error && error.name === 'AbortError') { + return; + } + + console.error('getCodeGlueOptions failed:', error); + setField.value = ''; + }); +} + +/** + * Fetch CodeGlue options from the server. + * + * The PHP side expects: + * - joinfields = "guid1,guid2,guid3" + * - or joinfields = "none" + * + * @param {string} subID + * @param {string} listfield + * @param {string} joinfields + * @param {string} type + * @param {string} area + * @returns {Promise<*>} + */ +function getCodeGlueOptions_server(subID, listfield, joinfields, type, area) { + if ( + typeof token === 'undefined' || + !_isSet(token) || + !_isSet(listfield) || + !_isSet(type) || + !_isSet(area) + ) { + return Promise.resolve(null); } - return Promise.resolve(null); + var getUrl = JRouter('index.php?option=com_componentbuilder&task=ajax.getCodeGlueOptions&format=json'); + var params = new URLSearchParams(); + + params.append(token, '1'); + params.append('listfield', listfield); + params.append('joinfields', _isSet(joinfields) ? joinfields : 'none'); + params.append('type', type); + params.append('area', area); + + abortCodeGlueOptionsRequest(subID); + + var controller = new AbortController(); + codeGlueOptionsControllers[subID] = controller; + + return fetch(getUrl + '&' + params.toString(), { + method: 'GET', + headers: { + 'Accept': 'application/json', + 'X-Requested-With': 'XMLHttpRequest' + }, + credentials: 'same-origin', + signal: controller.signal + }) + .then(function(response) { + if (!response.ok) { + throw new Error('Server responded with status ' + response.status); + } + + return response.json(); + }) + .finally(function() { + if (codeGlueOptionsControllers[subID] === controller) { + delete codeGlueOptionsControllers[subID]; + } + }); } /** @@ -218,5 +414,4 @@ async function getEditCustomCodeButtons() { } catch (error) { console.error('[getEditCustomCodeButtons] Error rendering buttons:', error); } -} - +}