diff --git a/CHANGELOG.md b/CHANGELOG.md index d693cc71d..065f2354b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -67,6 +67,18 @@ - Fix a bug that caused language filters to malfunction because of a broken field configuration. #1278 - Fix issue where components without a layout added to the Component failed to compile correctly. #1132 +# v5.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. + # v5.1.4 - Fix the linked [new] button to use the correct init_default params. diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php index 634e42105..f5858d790 100644 --- a/ComponentbuilderInstallerScript.php +++ b/ComponentbuilderInstallerScript.php @@ -3293,7 +3293,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface echo '
-

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

'; +

Upgrade to Version 5.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 fa4f827db..fd2303eff 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This is a professional-grade [Joomla 5.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 (**5.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 (**5.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:** 5.1.4 +* **Created:** 30th April, 2015 · **Last Build:** 24th March, 2026 · **Version:** 5.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:** 1337582 · **Fields:** 2129 · **Files:** 8798 · **Folders:** 804 +* **Lines:** 1347955 · **Fields:** 2129 · **Files:** 8837 · **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 fa4f827db..fd2303eff 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -9,7 +9,7 @@ This is a professional-grade [Joomla 5.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 (**5.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 (**5.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:** 5.1.4 +* **Created:** 30th April, 2015 · **Last Build:** 24th March, 2026 · **Version:** 5.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:** 1337582 · **Fields:** 2129 · **Files:** 8798 · **Folders:** 804 +* **Lines:** 1347955 · **Fields:** 2129 · **Files:** 8837 · **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): ?> -
-
- - <?php echo $icon->alt; ?> - name); ?> - -
-
- -
- -

+icons['main']) && is_array($this->icons['main']) && !empty($this->icons['main'])) : ?> +
+ icons['main'] as $icon) : ?> +
+ + + <?php echo $icon->alt; ?> + + + name); ?> + + +
+ +
+ +
+

+ +

+
+ +
+
\ 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 12401c274..f3861ee48 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), diff --git a/admin/sql/updates/mysql/5_1_4.sql b/admin/sql/updates/mysql/5_1_4.sql new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/admin/sql/updates/mysql/5_1_4.sql @@ -0,0 +1 @@ + diff --git a/admin/src/Model/AjaxModel.php b/admin/src/Model/AjaxModel.php index a6b3c5a5e..e50a6cd06 100644 --- a/admin/src/Model/AjaxModel.php +++ b/admin/src/Model/AjaxModel.php @@ -5340,57 +5340,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..35db90d41 100644 --- a/admin/tmpl/componentbuilder/default.php +++ b/admin/tmpl/componentbuilder/default.php @@ -23,35 +23,35 @@ defined('_JEXEC') or die; 'cpanel')); ?> -
    -
    +
    +
    loadTemplate('main');?>
    -
    +
    loadTemplate('vdm');?>
    -
    -
    +
    +
    loadTemplate('doc_start_here');?>
    -
    -
    +
    +
    loadTemplate('notice_board_vast_development_method');?>
    -
    -
    +
    +
    loadTemplate('readme_information');?>
    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'])) : ?> +
    + +
    +

    + +

    +
    + +
    +
    \ 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 be59b2e05..f26de7556 100644 --- a/changelog.xml +++ b/changelog.xml @@ -495,6 +495,24 @@ Rename Custom Buttons tab to Toolbar for clearer grouping of toolbar functions. #1268 + + com_componentbuilder + component + 5.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. + + com_componentbuilder component diff --git a/componentbuilder.xml b/componentbuilder.xml index 941244c69..b0ebe23b8 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 - 5.1.4 + 5.1.5 Component Builder (v.5.1.4) +

      Component Builder (v.5.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 3c2cfdb73..ae50c0502 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 - f3781cbb4e9e190df38c3fe7fa80ba69bf6f9dbafb158e0426dd4604f2f1ba794450679005a38d0f9f1dad0696e2f22b8b086b2d7d08a0f99bb4fd3b0f7ed5d8 Component Builder @@ -74,7 +71,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 6211bbd23261095398a204c79a198222d7321fb7343356595429de8a610826a80eeacb5b11e29dc0bbeaad805c51fa5f4c4983b8a1dd2394054e077c5d1665c0 Component Builder @@ -93,7 +89,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 371ead73a2e5193beb39d9b55477b8afb9909f915a77d25af2833c095f5384b1398d52e8befd6439de67506180fd145699df4096dbb80eeb1150941c4dca06e4 Component Builder @@ -112,7 +107,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 28449716b4c744e4310542d519e53419ac4a7f4caaa2caa3c15540a78a4d0890996b50213c27cc54b7a4bc12a143be08ee9ce4a362c62e5c0031ba3a794f7b8e Component Builder @@ -131,7 +125,6 @@ Llewellyn van der Merwe https://dev.vdm.io - d92fb41e0b084ff467ea9200428076730ada684b19d74bfd59bf11cfc35a6efb5208a2ceedd23377bcdd16f193853f263fdc074d5414f630295fc9998bd731eb Component Builder @@ -150,7 +143,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 0d7fcca2fba251bd27164c71bb0be566c49f302f619f6540ebf9d050b216e8395e1b96b341a5b7c9db7d35404a269858486d0edb316b3034f864e72c1d4199aa Component Builder @@ -169,7 +161,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 3664879942f54ecda3325f10dfc3f38b3e3604129443bca41a6cb06833881b0d2091e8f4d08164467018ef47c1b6e90a76fb9da019576c0cbe61044df2a99b3f Component Builder @@ -188,7 +179,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 7ed631cb1604123aa039ccd60590387205757a810ac2a2e80d4f91543817bd025ec2b87316e2bdb0f971931e6c9995cf632efa64b8e5cae22790138c091298df Component Builder @@ -207,7 +197,6 @@ Llewellyn van der Merwe https://dev.vdm.io - 7ed631cb1604123aa039ccd60590387205757a810ac2a2e80d4f91543817bd025ec2b87316e2bdb0f971931e6c9995cf632efa64b8e5cae22790138c091298df Component Builder @@ -226,6 +215,23 @@ Llewellyn van der Merwe https://dev.vdm.io - 8ee66ec4040b40ca6c051b069d946f883cc741c91d75d7edad0fe17f06a3001dc6e5c09aa9dbf4f35d0d08b524f0e4fdc63683571c68c8651ea6bb521169fbca - + + Component Builder + Builds Complex Joomla Components + pkg_component_builder + package + admininstrator + 5.1.5 + https://dev.vdm.io + + https://github.com/joomengine/pkg-component-builder/archive/refs/tags/v5.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); } -} - +}