forked from joomla/Component-Builder
Release of v4.0.1-alpha6
Add new subform classes. Fix registry class methods return type. Update all list and custom fields to use the new layouts.
This commit is contained in:
parent
5a2e137f31
commit
017d6a6299
13
CHANGELOG.md
13
CHANGELOG.md
@ -1,8 +1,8 @@
|
||||
# v4.0.1-alpha5
|
||||
# v4.0.1-alpha6
|
||||
|
||||
- Add repositories for better integration with gitea
|
||||
- Refactored the Data classes
|
||||
- Add new Data classes
|
||||
- Add new subform classes
|
||||
- Fix registry class methods return type
|
||||
- Update all list and custom fields to use the new layouts
|
||||
|
||||
# v4.0.1-alpha
|
||||
|
||||
@ -11,7 +11,10 @@
|
||||
- Add in JCB gitea push feature to help maintain JCB core features.
|
||||
- Add extending options to interfaces.
|
||||
- Change the extendsinterfaces field to allow null, #1139
|
||||
- Update the Schema class to also update null mismatching if needed
|
||||
- Update the Schema class to also update null mismatching if needed
|
||||
- Add repositories for better integration with gitea
|
||||
- Refactored the Data classes
|
||||
- Add new Data classes
|
||||
|
||||
# v4.0.0
|
||||
|
||||
|
@ -3266,7 +3266,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface
|
||||
echo '<div style="background-color: #fff;" class="alert alert-info"><a target="_blank" href="https://dev.vdm.io" title="Component Builder">
|
||||
<img src="components/com_componentbuilder/assets/images/vdm-component.jpg"/>
|
||||
</a>
|
||||
<h3>Upgrade to Version 4.0.1-alpha5 Was Successful! Let us know if anything is not working as expected.</h3></div>';
|
||||
<h3>Upgrade to Version 4.0.1-alpha6 Was Successful! Let us know if anything is not working as expected.</h3></div>';
|
||||
|
||||
// Add/Update component in the action logs extensions table.
|
||||
$this->setActionLogsExtensions();
|
||||
|
12
README.md
12
README.md
@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
|
||||
|
||||
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!
|
||||
|
||||
You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.1-alpha5) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.1-alpha6) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
|
||||
|
||||
@ -144,14 +144,14 @@ TODO
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 20th June, 2024
|
||||
+ *Version*: 4.0.1-alpha5
|
||||
+ *Last Build*: 28th June, 2024
|
||||
+ *Version*: 4.0.1-alpha6
|
||||
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||
+ *Line count*: **758355**
|
||||
+ *Line count*: **762546**
|
||||
+ *Field count*: **2104**
|
||||
+ *File count*: **5355**
|
||||
+ *Folder count*: **532**
|
||||
+ *File count*: **5392**
|
||||
+ *Folder count*: **534**
|
||||
|
||||
> This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
|
@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
|
||||
|
||||
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!
|
||||
|
||||
You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.1-alpha5) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.1-alpha6) with **ALL** its features and **ALL** concepts totally open-source and free!
|
||||
|
||||
> Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45)
|
||||
|
||||
@ -144,14 +144,14 @@ TODO
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
+ *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 20th June, 2024
|
||||
+ *Version*: 4.0.1-alpha5
|
||||
+ *Last Build*: 28th June, 2024
|
||||
+ *Version*: 4.0.1-alpha6
|
||||
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
|
||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||
+ *Line count*: **758355**
|
||||
+ *Line count*: **762546**
|
||||
+ *Field count*: **2104**
|
||||
+ *File count*: **5355**
|
||||
+ *Folder count*: **532**
|
||||
+ *File count*: **5392**
|
||||
+ *Folder count*: **534**
|
||||
|
||||
> This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com).
|
||||
> Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io)
|
||||
|
@ -202,6 +202,7 @@
|
||||
label="COM_COMPONENTBUILDER_CONFIG_JCB_PACKAGE_DIRECTORIES_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_JCB_PACKAGE_DIRECTORIES_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="true"
|
||||
default=""
|
||||
showon="manage_jcb_package_directories:1">
|
||||
@ -235,6 +236,7 @@
|
||||
label="COM_COMPONENTBUILDER_CONFIG_STORAGE_TIME_TO_LIVE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_STORAGE_TIME_TO_LIVE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="global"
|
||||
showon="set_browser_storage:1">
|
||||
@ -789,6 +791,7 @@
|
||||
label="COM_COMPONENTBUILDER_CONFIG_BUILDER_GIF_SIZE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_BUILDER_GIF_SIZE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="480-272">
|
||||
@ -914,6 +917,7 @@
|
||||
label="COM_COMPONENTBUILDER_CONFIG_ASSETS_TABLE_FIX_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_ASSETS_TABLE_FIX_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="2">
|
||||
<!-- Option Set. -->
|
||||
@ -931,6 +935,7 @@
|
||||
label="COM_COMPONENTBUILDER_CONFIG_COMPILER_FIELD_BUILDER_TYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_COMPILER_FIELD_BUILDER_TYPE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
filter="INT"
|
||||
required="true"
|
||||
default="2">
|
||||
@ -1138,6 +1143,7 @@
|
||||
label="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_SERVER_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_SERVER_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
showon="cronjob_backup_type:2"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_CUSTOM_TABS_ADMIN_VIEW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_CUSTOM_TABS_ADMIN_VIEW_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="true"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_FIELDS_ADMIN_VIEW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_FIELDS_ADMIN_VIEW_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="true"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_FIELDS_CONDITIONS_ADMIN_VIEW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_FIELDS_CONDITIONS_ADMIN_VIEW_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="true"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_FIELDS_RELATIONS_ADMIN_VIEW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_FIELDS_RELATIONS_ADMIN_VIEW_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="true"
|
||||
|
@ -311,6 +311,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_VIEW_MYSQL_TABLE_CHARSET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_VIEW_MYSQL_TABLE_CHARSET_DESCRIPTION"
|
||||
class="list_class bestview"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="CMD"
|
||||
required="true"
|
||||
@ -422,6 +423,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_VIEW_TYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_VIEW_TYPE_DESCRIPTION"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
filter="INT"
|
||||
default="1">
|
||||
<!-- Option Set. -->
|
||||
@ -852,6 +854,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_VIEW_MYSQL_TABLE_ROW_FORMAT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_VIEW_MYSQL_TABLE_ROW_FORMAT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="DYNAMIC">
|
||||
@ -1918,6 +1921,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_VIEW_MYSQL_TABLE_ENGINE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_VIEW_MYSQL_TABLE_ENGINE_DESCRIPTION"
|
||||
class="list_class bestview"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="CMD"
|
||||
required="true"
|
||||
@ -1957,6 +1961,7 @@
|
||||
label="COM_COMPONENTBUILDER_ADMIN_VIEW_MYSQL_TABLE_COLLATE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_ADMIN_VIEW_MYSQL_TABLE_COLLATE_DESCRIPTION"
|
||||
class="list_class bestview"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="CMD"
|
||||
required="true"
|
||||
|
@ -120,6 +120,7 @@
|
||||
label="COM_COMPONENTBUILDER_CLASS_EXTENDS_EXTENSION_TYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CLASS_EXTENDS_EXTENSION_TYPE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true">
|
||||
<!-- Option Set. -->
|
||||
|
@ -120,6 +120,7 @@
|
||||
label="COM_COMPONENTBUILDER_CLASS_METHOD_VISIBILITY_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CLASS_METHOD_VISIBILITY_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="STRING"
|
||||
required="true">
|
||||
@ -144,6 +145,7 @@
|
||||
label="COM_COMPONENTBUILDER_CLASS_METHOD_EXTENSION_TYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CLASS_METHOD_EXTENSION_TYPE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true">
|
||||
<!-- Option Set. -->
|
||||
@ -207,6 +209,7 @@
|
||||
name="joomla_plugin_group"
|
||||
label="COM_COMPONENTBUILDER_CLASS_METHOD_JOOMLA_PLUGIN_GROUP_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
|
@ -120,6 +120,7 @@
|
||||
label="COM_COMPONENTBUILDER_CLASS_PROPERTY_VISIBILITY_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CLASS_PROPERTY_VISIBILITY_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="STRING"
|
||||
required="true">
|
||||
@ -144,6 +145,7 @@
|
||||
label="COM_COMPONENTBUILDER_CLASS_PROPERTY_EXTENSION_TYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CLASS_PROPERTY_EXTENSION_TYPE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true">
|
||||
<!-- Option Set. -->
|
||||
@ -191,6 +193,7 @@
|
||||
name="joomla_plugin_group"
|
||||
label="COM_COMPONENTBUILDER_CLASS_PROPERTY_JOOMLA_PLUGIN_GROUP_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_ADMIN_VIEWS_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_ADMIN_VIEWS_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_ADMIN_VIEWS_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_CONFIG_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_CONFIG_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_CONFIG_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_CUSTOM_ADMIN_MENUS_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_CUSTOM_ADMIN_MENUS_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_CUSTOM_ADMIN_MENUS_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_CUSTOM_ADMIN_VIEWS_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_CUSTOM_ADMIN_VIEWS_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_CUSTOM_ADMIN_VIEWS_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_DASHBOARD_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_DASHBOARD_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_DASHBOARD_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_FILES_FOLDERS_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_MODULES_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_MODULES_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_MODULES_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_MYSQL_TWEAKS_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_MYSQL_TWEAKS_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_MYSQL_TWEAKS_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_PLACEHOLDERS_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_PLACEHOLDERS_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_PLACEHOLDERS_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_PLUGINS_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_PLUGINS_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_PLUGINS_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_ROUTER_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_ROUTER_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_SITE_VIEWS_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_SITE_VIEWS_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_SITE_VIEWS_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_UPDATES_JOOMLA_COMPONENT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_COMPONENT_UPDATES_JOOMLA_COMPONENT_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
readonly="true"
|
||||
@ -115,6 +116,7 @@
|
||||
name="clone_me"
|
||||
label="COM_COMPONENTBUILDER_COMPONENT_UPDATES_CLONE_ME_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
|
@ -149,6 +149,7 @@
|
||||
name="main_get"
|
||||
label="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_MAIN_GET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_MAIN_GET_DESCRIPTION"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="true"
|
||||
@ -277,6 +278,7 @@
|
||||
label="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_SNIPPET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_SNIPPET_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="false"
|
||||
button="true"
|
||||
@ -607,6 +609,7 @@
|
||||
name="dynamic_get"
|
||||
label="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_DYNAMIC_GET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_CUSTOM_ADMIN_VIEW_DYNAMIC_GET_DESCRIPTION"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="false"
|
||||
|
@ -103,6 +103,7 @@
|
||||
name="component"
|
||||
label="COM_COMPONENTBUILDER_CUSTOM_CODE_COMPONENT_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
|
@ -120,6 +120,7 @@
|
||||
label="COM_COMPONENTBUILDER_DYNAMIC_GET_MAIN_SOURCE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_DYNAMIC_GET_MAIN_SOURCE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
@ -141,6 +142,7 @@
|
||||
label="COM_COMPONENTBUILDER_DYNAMIC_GET_GETTYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_DYNAMIC_GET_GETTYPE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
@ -307,6 +309,7 @@
|
||||
label="COM_COMPONENTBUILDER_DYNAMIC_GET_PLUGIN_EVENTS_LABEL"
|
||||
description="COM_COMPONENTBUILDER_DYNAMIC_GET_PLUGIN_EVENTS_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="true">
|
||||
<!-- Option Set. -->
|
||||
<option value="onContentAfterTitle">
|
||||
@ -335,6 +338,7 @@
|
||||
name="view_table_main"
|
||||
label="COM_COMPONENTBUILDER_DYNAMIC_GET_VIEW_TABLE_MAIN_LABEL"
|
||||
description="COM_COMPONENTBUILDER_DYNAMIC_GET_VIEW_TABLE_MAIN_DESCRIPTION"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="true"
|
||||
|
@ -119,7 +119,7 @@
|
||||
name="fieldtype"
|
||||
label="COM_COMPONENTBUILDER_FIELD_FIELDTYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELD_FIELDTYPE_DESCRIPTION"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="true"
|
||||
@ -132,6 +132,7 @@
|
||||
label="COM_COMPONENTBUILDER_FIELD_DATATYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELD_DATATYPE_DESCRIPTION"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="">
|
||||
@ -181,6 +182,7 @@
|
||||
name="indexes"
|
||||
label="COM_COMPONENTBUILDER_FIELD_INDEXES_LABEL"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
@ -214,6 +216,7 @@
|
||||
label="COM_COMPONENTBUILDER_FIELD_STORE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELD_STORE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
@ -298,6 +301,7 @@
|
||||
label="COM_COMPONENTBUILDER_FIELD_DATALENGHT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELD_DATALENGHT_DESCRIPTION"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="">
|
||||
@ -398,6 +402,7 @@
|
||||
label="COM_COMPONENTBUILDER_FIELD_DATADEFAULT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELD_DATADEFAULT_DESCRIPTION"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="">
|
||||
<!-- Option Set. -->
|
||||
|
@ -120,6 +120,7 @@
|
||||
label="COM_COMPONENTBUILDER_FIELDTYPE_STORE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELDTYPE_STORE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
@ -158,6 +159,7 @@
|
||||
name="indexes"
|
||||
label="COM_COMPONENTBUILDER_FIELDTYPE_INDEXES_LABEL"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
@ -193,6 +195,7 @@
|
||||
label="COM_COMPONENTBUILDER_FIELDTYPE_DATADEFAULT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELDTYPE_DATADEFAULT_DESCRIPTION"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="">
|
||||
<!-- Option Set. -->
|
||||
@ -232,6 +235,7 @@
|
||||
label="COM_COMPONENTBUILDER_FIELDTYPE_DATATYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELDTYPE_DATATYPE_DESCRIPTION"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="">
|
||||
@ -399,6 +403,7 @@
|
||||
label="COM_COMPONENTBUILDER_FIELDTYPE_DATALENGHT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_FIELDTYPE_DATALENGHT_DESCRIPTION"
|
||||
class="btn-group"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="">
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_HELP_DOCUMENT_TYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_HELP_DOCUMENT_TYPE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="">
|
||||
|
@ -265,6 +265,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_MVC_VERSIONDATE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_MVC_VERSIONDATE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="int"
|
||||
required="true"
|
||||
@ -762,6 +763,7 @@
|
||||
name="translation_tool"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_TRANSLATION_TOOL_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0">
|
||||
<!-- Option Set. -->
|
||||
@ -1280,6 +1282,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_ASSETS_TABLE_FIX_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_ASSETS_TABLE_FIX_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="3">
|
||||
<!-- Option Set. -->
|
||||
@ -1364,6 +1367,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_UPDATE_SERVER_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_UPDATE_SERVER_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
button="true"
|
||||
@ -1377,6 +1381,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_SALES_SERVER_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_SALES_SERVER_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
showon="add_sales_server:1"
|
||||
@ -1421,6 +1426,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_ADDUIKIT_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_ADDUIKIT_DESCRIPTION"
|
||||
class="btn-group btn-group-yesno"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
default="0">
|
||||
<!-- Option Set. -->
|
||||
<option value="0">
|
||||
@ -1456,6 +1462,7 @@
|
||||
name="addfootable"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_COMPONENT_ADDFOOTABLE_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
|
@ -246,6 +246,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_MODULE_SNIPPET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_MODULE_SNIPPET_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="false"
|
||||
button="true"
|
||||
@ -304,6 +305,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_MODULE_UPDATE_SERVER_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_MODULE_UPDATE_SERVER_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
button="true"
|
||||
@ -359,6 +361,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_MODULE_SALES_SERVER_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_MODULE_SALES_SERVER_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
showon="add_sales_server:1"
|
||||
@ -450,6 +453,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_CLASS_HELPER_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_CLASS_HELPER_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="0">
|
||||
|
@ -103,6 +103,7 @@
|
||||
name="joomla_module"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_MODULE_FILES_FOLDERS_URLS_JOOMLA_MODULE_LABEL"
|
||||
class="list_class span12"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
readonly="true"
|
||||
|
@ -103,6 +103,7 @@
|
||||
name="joomla_module"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_MODULE_UPDATES_JOOMLA_MODULE_LABEL"
|
||||
class="list_class span12"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
readonly="true"
|
||||
|
@ -117,6 +117,7 @@
|
||||
name="class_extends"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_CLASS_EXTENDS_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
@ -128,6 +129,7 @@
|
||||
name="joomla_plugin_group"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_JOOMLA_PLUGIN_GROUP_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
@ -196,6 +198,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_SALES_SERVER_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_SALES_SERVER_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
showon="add_sales_server:1"
|
||||
@ -370,6 +373,7 @@
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_UPDATE_SERVER_LABEL"
|
||||
description="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_UPDATE_SERVER_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
button="true"
|
||||
|
@ -103,6 +103,7 @@
|
||||
name="joomla_plugin"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FILES_FOLDERS_URLS_JOOMLA_PLUGIN_LABEL"
|
||||
class="list_class span12"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
readonly="true"
|
||||
|
@ -119,6 +119,7 @@
|
||||
name="class_extends"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_GROUP_CLASS_EXTENDS_LABEL"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
|
@ -103,6 +103,7 @@
|
||||
name="joomla_plugin"
|
||||
label="COM_COMPONENTBUILDER_JOOMLA_PLUGIN_UPDATES_JOOMLA_PLUGIN_LABEL"
|
||||
class="list_class span12"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
readonly="true"
|
||||
|
@ -135,6 +135,7 @@
|
||||
name="dynamic_get"
|
||||
label="COM_COMPONENTBUILDER_LAYOUT_DYNAMIC_GET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_LAYOUT_DYNAMIC_GET_DESCRIPTION"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
@ -147,6 +148,7 @@
|
||||
label="COM_COMPONENTBUILDER_LAYOUT_SNIPPET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_LAYOUT_SNIPPET_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="false"
|
||||
button="true"
|
||||
|
@ -135,6 +135,7 @@
|
||||
label="COM_COMPONENTBUILDER_LIBRARY_HOW_LABEL"
|
||||
description="COM_COMPONENTBUILDER_LIBRARY_HOW_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="1"
|
||||
required="true"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_LIBRARY_CONFIG_LIBRARY_LABEL"
|
||||
description="COM_COMPONENTBUILDER_LIBRARY_CONFIG_LIBRARY_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
|
@ -104,6 +104,7 @@
|
||||
label="COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_LIBRARY_LABEL"
|
||||
description="COM_COMPONENTBUILDER_LIBRARY_FILES_FOLDERS_URLS_LIBRARY_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
|
@ -133,6 +133,7 @@
|
||||
label="COM_COMPONENTBUILDER_POWER_TYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_POWER_TYPE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="true"
|
||||
default="class">
|
||||
|
@ -120,6 +120,7 @@
|
||||
label="COM_COMPONENTBUILDER_SERVER_PROTOCOL_LABEL"
|
||||
description="COM_COMPONENTBUILDER_SERVER_PROTOCOL_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
@ -219,6 +220,7 @@
|
||||
label="COM_COMPONENTBUILDER_SERVER_AUTHENTICATION_LABEL"
|
||||
description="COM_COMPONENTBUILDER_SERVER_AUTHENTICATION_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
|
@ -149,6 +149,7 @@
|
||||
name="main_get"
|
||||
label="COM_COMPONENTBUILDER_SITE_VIEW_MAIN_GET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_SITE_VIEW_MAIN_GET_DESCRIPTION"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="true"
|
||||
@ -292,6 +293,7 @@
|
||||
label="COM_COMPONENTBUILDER_SITE_VIEW_SNIPPET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_SITE_VIEW_SNIPPET_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="false"
|
||||
button="true"
|
||||
@ -445,6 +447,7 @@
|
||||
name="dynamic_get"
|
||||
label="COM_COMPONENTBUILDER_SITE_VIEW_DYNAMIC_GET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_SITE_VIEW_DYNAMIC_GET_DESCRIPTION"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default=""
|
||||
required="false"
|
||||
@ -642,6 +645,7 @@
|
||||
label="COM_COMPONENTBUILDER_SITE_VIEW_BUTTON_POSITION_LABEL"
|
||||
description="COM_COMPONENTBUILDER_SITE_VIEW_BUTTON_POSITION_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
filter="INT"
|
||||
required="true"
|
||||
|
@ -136,6 +136,7 @@
|
||||
label="COM_COMPONENTBUILDER_SNIPPET_TYPE_LABEL"
|
||||
description="COM_COMPONENTBUILDER_SNIPPET_TYPE_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
@ -161,6 +162,7 @@
|
||||
label="COM_COMPONENTBUILDER_SNIPPET_LIBRARY_LABEL"
|
||||
description="COM_COMPONENTBUILDER_SNIPPET_LIBRARY_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="true"
|
||||
|
@ -135,6 +135,7 @@
|
||||
name="dynamic_get"
|
||||
label="COM_COMPONENTBUILDER_TEMPLATE_DYNAMIC_GET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_TEMPLATE_DYNAMIC_GET_DESCRIPTION"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
default="0"
|
||||
required="false"
|
||||
@ -203,6 +204,7 @@
|
||||
label="COM_COMPONENTBUILDER_TEMPLATE_SNIPPET_LABEL"
|
||||
description="COM_COMPONENTBUILDER_TEMPLATE_SNIPPET_DESCRIPTION"
|
||||
class="list_class"
|
||||
layout="joomla.form.field.list-fancy-select"
|
||||
multiple="false"
|
||||
required="false"
|
||||
button="true"
|
||||
|
@ -925,7 +925,7 @@ COM_COMPONENTBUILDER_ADMIN_VIEW_PARAGRAPH_CENTER="Paragraph Center"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_PARAGRAPH_JUSTIFY="Paragraph Justify"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_PARAGRAPH_LEFT="Paragraph Left"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_PARAGRAPH_RIGHT="Paragraph Right"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_PARENTKEY_DESCRIPTION="The key to use to link the parent view."
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_PARENTKEY_DESCRIPTION="The key to use to link <b>this</b> parent view."
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_PARENTKEY_HINT="id"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_PARENTKEY_LABEL="Parent Key"
|
||||
COM_COMPONENTBUILDER_ADMIN_VIEW_PARENTKEY_MESSAGE="Error! Please add key here."
|
||||
|
@ -42,24 +42,25 @@ class DynamicgetsField extends ListField
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name','a.gettype'),array('id','dynamic_get_name','type')));
|
||||
$query->from($db->quoteName('#__componentbuilder_dynamic_get', 'a'));
|
||||
$query->where($db->quoteName('a.published') . ' = 1');
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$model = ComponentbuilderHelper::getModel('dynamic_gets');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$type = $model->selectionTranslation($item->type,'gettype');
|
||||
$options[] = Html::_('select.option', $item->id, $item->dynamic_get_name . ' (' . Text::_($type) . ')' );
|
||||
}
|
||||
}
|
||||
return $options;
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name','a.gettype'),array('id','dynamic_get_name','type')));
|
||||
$query->from($db->quoteName('#__componentbuilder_dynamic_get', 'a'));
|
||||
$query->where($db->quoteName('a.published') . ' = 1');
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$model = ComponentbuilderHelper::getModel('dynamic_gets');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$type = $model->selectionTranslation($item->type,'gettype');
|
||||
$options[] = Html::_('select.option', $item->id, $item->dynamic_get_name . ' (' . Text::_($type) . ')' );
|
||||
}
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ class FilebehaviourField extends ListField
|
||||
}
|
||||
$options[] = Html::_('select.option', '2', Text::_('COM_COMPONENTBUILDER_CONDITIONS'));
|
||||
$options[] = Html::_('select.option', '3', Text::_('COM_COMPONENTBUILDER_CUSTOM_SCRIPT'));
|
||||
$options[] = Html::_('select.option', '0', Text::_('COM_COMPONENTBUILDER_DO_NOT_ADD'));
|
||||
return $options;
|
||||
$options[] = Html::_('select.option', '0', Text::_('COM_COMPONENTBUILDER_DO_NOT_ADD'));
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
|
@ -42,22 +42,23 @@ class LibraryreadonlyField extends ListField
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name'),array('id','library_name')));
|
||||
$query->from($db->quoteName('#__componentbuilder_library', 'a'));
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$options[] = Html::_('select.option', '', 'Select an option');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$options[] = Html::_('select.option', $item->id, $item->library_name);
|
||||
}
|
||||
}
|
||||
return $options;
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name'),array('id','library_name')));
|
||||
$query->from($db->quoteName('#__componentbuilder_library', 'a'));
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$options[] = Html::_('select.option', '', 'Select an option');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$options[] = Html::_('select.option', $item->id, $item->library_name);
|
||||
}
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
|
@ -148,25 +148,25 @@ class MaingetsField extends ListField
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name','a.gettype'),array('id','main_get_name','type')));
|
||||
$query->from($db->quoteName('#__componentbuilder_dynamic_get', 'a'));
|
||||
$query->where($db->quoteName('a.published') . ' = 1');
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name','a.gettype'),array('id','main_get_name','type')));
|
||||
$query->from($db->quoteName('#__componentbuilder_dynamic_get', 'a'));
|
||||
$query->where($db->quoteName('a.published') . ' = 1');
|
||||
$query->where('( '.$db->quoteName('a.gettype') . ' = 1 OR ' . $db->quoteName('a.gettype') . ' = 2 )');
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$model = ComponentbuilderHelper::getModel('dynamic_gets');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$type = $model->selectionTranslation($item->type,'gettype');
|
||||
$options[] = Html::_('select.option', $item->id, $item->main_get_name . ' (' . Text::_($type) . ')' );
|
||||
}
|
||||
}
|
||||
return $options;
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$model = ComponentbuilderHelper::getModel('dynamic_gets');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$type = $model->selectionTranslation($item->type,'gettype');
|
||||
$options[] = Html::_('select.option', $item->id, $item->main_get_name . ' (' . Text::_($type) . ')' );
|
||||
}
|
||||
}
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
|
@ -148,24 +148,25 @@ class ServersField extends ListField
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name','a.protocol'),array('id','name', 'protocol')));
|
||||
$query->from($db->quoteName('#__componentbuilder_server', 'a'));
|
||||
$query->where($db->quoteName('a.published') . ' >= 1');
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$options[] = Html::_('select.option', '', 'Select an option');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$item->protocol = ($item->protocol == 2) ? Text::_('SFTP') : Text::_('FTP');
|
||||
$options[] = Html::_('select.option', $item->id, $item->name.' ['.$item->protocol.']');
|
||||
}
|
||||
}
|
||||
return $options;
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name','a.protocol'),array('id','name', 'protocol')));
|
||||
$query->from($db->quoteName('#__componentbuilder_server', 'a'));
|
||||
$query->where($db->quoteName('a.published') . ' >= 1');
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$options[] = Html::_('select.option', '', 'Select an option');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$item->protocol = ($item->protocol == 2) ? Text::_('SFTP') : Text::_('FTP');
|
||||
$options[] = Html::_('select.option', $item->id, $item->name.' ['.$item->protocol.']');
|
||||
}
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
|
@ -148,29 +148,30 @@ class SnippetsField extends ListField
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name','b.name','c.name'),array('id','snippet_name','type','library')));
|
||||
$query->from($db->quoteName('#__componentbuilder_snippet', 'a'));
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name','b.name','c.name'),array('id','snippet_name','type','library')));
|
||||
$query->from($db->quoteName('#__componentbuilder_snippet', 'a'));
|
||||
// From the componentbuilder_snippet_type table.
|
||||
$query->join('LEFT', $db->quoteName('#__componentbuilder_snippet_type', 'b') . ' ON (' . $db->quoteName('a.type') . ' = ' . $db->quoteName('b.id') . ')');
|
||||
// From the componentbuilder_library table.
|
||||
$query->join('LEFT', $db->quoteName('#__componentbuilder_library', 'c') . ' ON (' . $db->quoteName('a.library') . ' = ' . $db->quoteName('c.id') . ')');
|
||||
$query->where($db->quoteName('a.published') . ' >= 1');
|
||||
$query->join('LEFT', $db->quoteName('#__componentbuilder_library', 'c') . ' ON (' . $db->quoteName('a.library') . ' = ' . $db->quoteName('c.id') . ')');
|
||||
$query->where($db->quoteName('a.published') . ' >= 1');
|
||||
$query->order('c.ordering ASC');
|
||||
$query->order('b.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
foreach($items as $item)
|
||||
{
|
||||
$query->order('b.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
foreach($items as $item)
|
||||
{
|
||||
$lib = (isset($item->library) && ComponentbuilderHelper::checkString($item->library)) ? ' (' . $item->library . ')' :'';
|
||||
$type = (isset($item->type) && ComponentbuilderHelper::checkString($item->type)) ? $item->type :Text::_('COM_COMPONENTBUILDER_NO_TYPE');
|
||||
$options[] = Html::_('select.option', $item->id, $type . ' - ' . $item->snippet_name . $lib );
|
||||
}
|
||||
}
|
||||
return $options;
|
||||
$type = (isset($item->type) && ComponentbuilderHelper::checkString($item->type)) ? $item->type :Text::_('COM_COMPONENTBUILDER_NO_TYPE');
|
||||
$options[] = Html::_('select.option', $item->id, $type . ' - ' . $item->snippet_name . $lib );
|
||||
}
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
|
@ -42,23 +42,24 @@ class SnippettypeField extends ListField
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name'),array('id','type_name')));
|
||||
$query->from($db->quoteName('#__componentbuilder_snippet_type', 'a'));
|
||||
$query->where($db->quoteName('a.published') . ' >= 1');
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$options[] = Html::_('select.option', '', 'Select an option');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$options[] = Html::_('select.option', $item->id, $item->type_name);
|
||||
}
|
||||
}
|
||||
return $options;
|
||||
$db = Factory::getDBO();
|
||||
$query = $db->getQuery(true);
|
||||
$query->select($db->quoteName(array('a.id','a.name'),array('id','type_name')));
|
||||
$query->from($db->quoteName('#__componentbuilder_snippet_type', 'a'));
|
||||
$query->where($db->quoteName('a.published') . ' >= 1');
|
||||
$query->order('a.name ASC');
|
||||
$db->setQuery((string)$query);
|
||||
$items = $db->loadObjectList();
|
||||
$options = array();
|
||||
if ($items)
|
||||
{
|
||||
$options[] = Html::_('select.option', '', 'Select an option');
|
||||
foreach($items as $item)
|
||||
{
|
||||
$options[] = Html::_('select.option', $item->id, $item->type_name);
|
||||
}
|
||||
}
|
||||
|
||||
return $options;
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<extension type="component" version="4.0" method="upgrade">
|
||||
<name>COM_COMPONENTBUILDER</name>
|
||||
<creationDate>20th June, 2024</creationDate>
|
||||
<creationDate>28th June, 2024</creationDate>
|
||||
<author>Llewellyn van der Merwe</author>
|
||||
<authorEmail>joomla@vdm.io</authorEmail>
|
||||
<authorUrl>https://dev.vdm.io</authorUrl>
|
||||
<copyright>Copyright (C) 2015 Vast Development Method. All rights reserved.</copyright>
|
||||
<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
|
||||
<version>4.0.1-alpha5</version>
|
||||
<version>4.0.1-alpha6</version>
|
||||
<description><![CDATA[
|
||||
<h1>Component Builder (v.4.0.1-alpha5)</h1>
|
||||
<h1>Component Builder (v.4.0.1-alpha6)</h1>
|
||||
<div style="clear: both;"></div>
|
||||
<p>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.
|
||||
|
||||
|
@ -44,7 +44,7 @@
|
||||
<version>4.0.1-alpha</version>
|
||||
<infourl title="Component Builder!">https://dev.vdm.io</infourl>
|
||||
<downloads>
|
||||
<downloadurl type="full" format="zip">https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v4.0.1-alpha5.zip</downloadurl>
|
||||
<downloadurl type="full" format="zip">https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v4.0.1-alpha6.zip</downloadurl>
|
||||
</downloads>
|
||||
<tags>
|
||||
<tag>alpha</tag>
|
||||
@ -59,10 +59,10 @@
|
||||
<element>pkg_component_builder</element>
|
||||
<type>package</type>
|
||||
<client>site</client>
|
||||
<version>4.0.1-alpha5</version>
|
||||
<version>4.0.1-alpha6</version>
|
||||
<infourl title="Component Builder!">https://dev.vdm.io</infourl>
|
||||
<downloads>
|
||||
<downloadurl type="full" format="zip">https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v4.0.1-alpha5.zip</downloadurl>
|
||||
<downloadurl type="full" format="zip">https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v4.0.1-alpha6.zip</downloadurl>
|
||||
</downloads>
|
||||
<tags>
|
||||
<tag>alpha</tag>
|
||||
|
@ -25,6 +25,7 @@ use VDM\Joomla\Gitea\Service\Notifications;
|
||||
use VDM\Joomla\Gitea\Service\Miscellaneous;
|
||||
use VDM\Joomla\Gitea\Service\Admin;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
|
||||
|
||||
|
||||
/**
|
||||
@ -32,45 +33,8 @@ use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Factory implements FactoryInterface
|
||||
abstract class Factory extends ExtendingFactory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Package Container
|
||||
*
|
||||
* @var Container
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected static $container = null;
|
||||
|
||||
/**
|
||||
* Get any class from the package container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function _($key)
|
||||
{
|
||||
return self::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global package container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!self::$container)
|
||||
{
|
||||
self::$container = self::createContainer();
|
||||
}
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
|
@ -16,6 +16,7 @@ use Joomla\DI\Container;
|
||||
use VDM\Joomla\Openai\Service\Api;
|
||||
use VDM\Joomla\Openai\Service\Utilities;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
|
||||
|
||||
|
||||
/**
|
||||
@ -23,45 +24,8 @@ use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Factory implements FactoryInterface
|
||||
abstract class Factory extends ExtendingFactory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Package Container
|
||||
*
|
||||
* @var Container
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected static $container = null;
|
||||
|
||||
/**
|
||||
* Get any class from the package container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function _($key)
|
||||
{
|
||||
return self::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global package container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!self::$container)
|
||||
{
|
||||
self::$container = self::createContainer();
|
||||
}
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
|
83
libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Factory.php
Normal file
83
libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Factory.php
Normal file
@ -0,0 +1,83 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/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\Abstraction;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
|
||||
|
||||
/** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
|
||||
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
|
||||
**
|
||||
** In realms of code where purists frown, the anti-pattern wears a crown,
|
||||
** A paradox of chaos bright, where complex paths lose all its slight.
|
||||
** For in its tangled, wild embrace, lies raw creativity's face,
|
||||
** No rigid forms, no strict decree, just boundless, daring artistry.
|
||||
** In flaws, we find the freedom's key, where messy code and brilliance spree,
|
||||
** A dance of thought, unchained, unbound, in anti-pattern, beauty's found.
|
||||
**
|
||||
** Perfect Paradox and True Nature of the Anti-Pattern by ChatGPT
|
||||
**
|
||||
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
|
||||
** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** **
|
||||
**
|
||||
** @since 0.0.0
|
||||
**/
|
||||
abstract class Factory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Package Container
|
||||
*
|
||||
* @var Container|null
|
||||
* @since 0.0.0
|
||||
**/
|
||||
protected static ?Container $container = null;
|
||||
|
||||
/**
|
||||
* Get any class from the package container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 0.0.0
|
||||
*/
|
||||
public static function _($key)
|
||||
{
|
||||
return static::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global package container
|
||||
*
|
||||
* @return Container
|
||||
* @since 0.0.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!static::$container)
|
||||
{
|
||||
static::$container = static::createContainer();
|
||||
}
|
||||
|
||||
return static::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
* @return Container
|
||||
* @since 0.0.0
|
||||
*/
|
||||
abstract protected static function createContainer(): Container;
|
||||
}
|
||||
|
@ -107,6 +107,69 @@ abstract class Model implements ModelInterface
|
||||
*/
|
||||
abstract public function value($value, string $field, ?string $table = null);
|
||||
|
||||
/**
|
||||
* Model a value of multiple items
|
||||
* Example: $this->items(Array, 'value_key', 'table_name');
|
||||
*
|
||||
* @param array|null $items The array of values
|
||||
* @param string $field The field key
|
||||
* @param string|null $table The table
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function values(?array $items = null, string $field, ?string $table = null): ?array
|
||||
{
|
||||
// check if this is a valid table
|
||||
if (ArrayHelper::check($items))
|
||||
{
|
||||
// set the table name
|
||||
if (empty($table))
|
||||
{
|
||||
$table = $this->getTable();
|
||||
}
|
||||
|
||||
// validate if field exist in table
|
||||
if (!$this->table->exist($table, $field))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// value counter
|
||||
$value_number = 0;
|
||||
|
||||
// check if this is a valid table
|
||||
$item_bucket = [];
|
||||
|
||||
foreach ($items as $value)
|
||||
{
|
||||
if (!$this->validateBefore($value, $field, $table))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$value = $this->value($value, $field, $table);
|
||||
|
||||
if (!$this->validateAfter($value, $field, $table))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$item_bucket[] = $value;
|
||||
|
||||
$value_number++;
|
||||
}
|
||||
|
||||
// do we have any values left
|
||||
if ($value_number > 0)
|
||||
{
|
||||
return $item_bucket;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Model the values of an item
|
||||
* Example: $this->item(Object, 'table_name');
|
||||
|
@ -40,10 +40,10 @@ abstract class Registry extends ActiveRegistry implements Registryinterface
|
||||
* @param mixed $value Value of entry
|
||||
*
|
||||
* @throws \InvalidArgumentException If any of the path values are not a number or string.
|
||||
* @return $this
|
||||
* @return self
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(string $path, $value): static
|
||||
public function set(string $path, $value): self
|
||||
{
|
||||
if (($keys = $this->getActiveKeys($path)) === null)
|
||||
{
|
||||
@ -66,10 +66,10 @@ abstract class Registry extends ActiveRegistry implements Registryinterface
|
||||
* Override in child class allowed set class property $addAsArray = true.
|
||||
*
|
||||
* @throws \InvalidArgumentException If any of the path values are not a number or string.
|
||||
* @return $this
|
||||
* @return self
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function add(string $path, $value, ?bool $asArray = null): static
|
||||
public function add(string $path, $value, ?bool $asArray = null): self
|
||||
{
|
||||
if (($keys = $this->getActiveKeys($path)) === null)
|
||||
{
|
||||
@ -107,10 +107,10 @@ abstract class Registry extends ActiveRegistry implements Registryinterface
|
||||
* @param string $path Registry path (e.g. vdm.content.builder)
|
||||
*
|
||||
* @throws \InvalidArgumentException If any of the path values are not a number or string.
|
||||
* @return $this
|
||||
* @return self
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function remove(string $path): static
|
||||
public function remove(string $path): self
|
||||
{
|
||||
if (($keys = $this->getActiveKeys($path)) === null)
|
||||
{
|
||||
@ -146,10 +146,10 @@ abstract class Registry extends ActiveRegistry implements Registryinterface
|
||||
*
|
||||
* @param string|null $value The value to set.
|
||||
*
|
||||
* @return $this
|
||||
* @return self
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function setSeparator(?string $value): static
|
||||
public function setSeparator(?string $value): self
|
||||
{
|
||||
$this->separator = $value;
|
||||
|
||||
|
@ -56,6 +56,7 @@ use VDM\Joomla\Gitea\Service\Notifications as GiteNotifi;
|
||||
use VDM\Joomla\Gitea\Service\Miscellaneous as GiteaMisc;
|
||||
use VDM\Joomla\Gitea\Service\Admin as GiteaAdmin;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
|
||||
|
||||
|
||||
/**
|
||||
@ -63,16 +64,8 @@ use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Factory implements FactoryInterface
|
||||
abstract class Factory extends ExtendingFactory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Compiler Container
|
||||
*
|
||||
* @var Container
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected static ?Container $container = null;
|
||||
|
||||
/**
|
||||
* Current Joomla Version Being Build
|
||||
*
|
||||
@ -81,19 +74,6 @@ abstract class Factory implements FactoryInterface
|
||||
**/
|
||||
protected static int $JoomlaVersion;
|
||||
|
||||
/**
|
||||
* Get any class from the compiler container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return mixed
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function _($key)
|
||||
{
|
||||
return self::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get array of all keys in container
|
||||
*
|
||||
@ -123,22 +103,6 @@ abstract class Factory implements FactoryInterface
|
||||
return self::getContainer()->get('J' . self::$JoomlaVersion . '.' . $key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global compiler container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!self::$container)
|
||||
{
|
||||
self::$container = self::createContainer();
|
||||
}
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
|
@ -21,6 +21,7 @@ use VDM\Joomla\Componentbuilder\Service\Gitea;
|
||||
use VDM\Joomla\Componentbuilder\Power\Service\Gitea as GiteaPower;
|
||||
use VDM\Joomla\Gitea\Service\Utilities as GiteaUtilities;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
|
||||
|
||||
|
||||
/**
|
||||
@ -28,45 +29,8 @@ use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Factory implements FactoryInterface
|
||||
abstract class Factory extends ExtendingFactory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Package Container
|
||||
*
|
||||
* @var Container
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected static $container = null;
|
||||
|
||||
/**
|
||||
* Get any class from the package container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function _($key)
|
||||
{
|
||||
return self::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global package container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!self::$container)
|
||||
{
|
||||
self::$container = self::createContainer();
|
||||
}
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
|
@ -18,6 +18,7 @@ use VDM\Joomla\Componentbuilder\Package\Service\Database;
|
||||
use VDM\Joomla\Componentbuilder\Service\Server;
|
||||
use VDM\Joomla\Componentbuilder\Package\Service\Display;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
|
||||
|
||||
|
||||
/**
|
||||
@ -25,45 +26,8 @@ use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Factory implements FactoryInterface
|
||||
abstract class Factory extends ExtendingFactory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Package Container
|
||||
*
|
||||
* @var Container
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected static $container = null;
|
||||
|
||||
/**
|
||||
* Get any class from the package container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function _($key)
|
||||
{
|
||||
return self::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global package container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!self::$container)
|
||||
{
|
||||
self::$container = self::createContainer();
|
||||
}
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
|
@ -240,6 +240,17 @@ class Config extends BaseConfig
|
||||
}
|
||||
|
||||
return array_values($approved);
|
||||
}
|
||||
|
||||
/**
|
||||
* get indentation value
|
||||
*
|
||||
* @return string Indentation value
|
||||
* @since 3.2.2
|
||||
*/
|
||||
protected function getIndentationvalue(): string
|
||||
{
|
||||
return "\t";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,6 +22,7 @@ use VDM\Joomla\Componentbuilder\Service\Gitea;
|
||||
use VDM\Joomla\Componentbuilder\Power\Service\Gitea as GiteaPower;
|
||||
use VDM\Joomla\Gitea\Service\Utilities as GiteaUtilities;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
|
||||
|
||||
|
||||
/**
|
||||
@ -29,45 +30,8 @@ use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Factory implements FactoryInterface
|
||||
abstract class Factory extends ExtendingFactory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Package Container
|
||||
*
|
||||
* @var Container
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected static $container = null;
|
||||
|
||||
/**
|
||||
* Get any class from the package container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function _($key)
|
||||
{
|
||||
return self::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global package container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!self::$container)
|
||||
{
|
||||
self::$container = self::createContainer();
|
||||
}
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
|
@ -18,6 +18,7 @@ use VDM\Joomla\Componentbuilder\Search\Service\Model;
|
||||
use VDM\Joomla\Componentbuilder\Search\Service\Database;
|
||||
use VDM\Joomla\Componentbuilder\Search\Service\Agent;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
|
||||
|
||||
|
||||
/**
|
||||
@ -25,45 +26,8 @@ use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
abstract class Factory implements FactoryInterface
|
||||
abstract class Factory extends ExtendingFactory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Global Search Container
|
||||
*
|
||||
* @var Container
|
||||
* @since 3.2.0
|
||||
**/
|
||||
protected static $container = null;
|
||||
|
||||
/**
|
||||
* Get any class from the search container
|
||||
*
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function _(string $key)
|
||||
{
|
||||
return self::getContainer()->get($key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the global search container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public static function getContainer(): Container
|
||||
{
|
||||
if (!self::$container)
|
||||
{
|
||||
self::$container = self::createContainer();
|
||||
}
|
||||
|
||||
return self::$container;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
|
@ -17,11 +17,11 @@ use VDM\Joomla\Abstraction\BaseTable;
|
||||
|
||||
|
||||
/**
|
||||
* JCB Tables
|
||||
* Componentbuilder Tables
|
||||
*
|
||||
* @since 3.2.0
|
||||
*/
|
||||
class Table extends BaseTable implements Tableinterface
|
||||
final class Table extends BaseTable implements Tableinterface
|
||||
{
|
||||
/**
|
||||
* All areas/views/tables with their field details
|
||||
|
@ -18,7 +18,7 @@ use VDM\Joomla\Abstraction\Schema as ExtendingSchema;
|
||||
|
||||
|
||||
/**
|
||||
* JCB Tables Schema
|
||||
* Componentbuilder Tables Schema
|
||||
*
|
||||
* @since 3.2.1
|
||||
*/
|
||||
|
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -112,6 +112,33 @@ class Load implements LoadInterface
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a value from multiple rows from a given table
|
||||
* Example: $this->values(
|
||||
* [
|
||||
* 'guid' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
|
||||
* ], 'value_key'
|
||||
* );
|
||||
*
|
||||
* @param array $keys The item keys
|
||||
* @param string $field The field key
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function values(array $keys, string $field): ?array
|
||||
{
|
||||
return $this->model->values(
|
||||
$this->load->values(
|
||||
["a.{$field}" => $field],
|
||||
['a' => $this->getTable()],
|
||||
$this->prefix($keys)
|
||||
),
|
||||
$field,
|
||||
$this->getTable()
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get values from a given table
|
||||
* Example: $this->item(
|
||||
|
46
libraries/vendor_jcb/VDM.Joomla/src/Data/Factory.php
Normal file
46
libraries/vendor_jcb/VDM.Joomla/src/Data/Factory.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/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\Data;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use VDM\Joomla\Service\Table;
|
||||
use VDM\Joomla\Service\Database;
|
||||
use VDM\Joomla\Service\Model;
|
||||
use VDM\Joomla\Service\Data;
|
||||
use VDM\Joomla\Interfaces\FactoryInterface;
|
||||
use VDM\Joomla\Abstraction\Factory as ExtendingFactory;
|
||||
|
||||
|
||||
/**
|
||||
* Data Factory
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
abstract class Factory extends ExtendingFactory implements FactoryInterface
|
||||
{
|
||||
/**
|
||||
* Create a container object
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.2
|
||||
*/
|
||||
protected static function createContainer(): Container
|
||||
{
|
||||
return (new Container())
|
||||
->registerServiceProvider(new Table())
|
||||
->registerServiceProvider(new Database())
|
||||
->registerServiceProvider(new Model())
|
||||
->registerServiceProvider(new Data());
|
||||
}
|
||||
}
|
||||
|
@ -142,22 +142,7 @@ final class Item implements ItemInterface
|
||||
*/
|
||||
public function value(string $value, string $key = 'guid', string $get = 'id')
|
||||
{
|
||||
// Perform the database query
|
||||
$value = $this->database->value(
|
||||
["a.$get" => $get],
|
||||
["a" => $this->getTable()],
|
||||
["a.$key" => $value]
|
||||
);
|
||||
|
||||
// Check if rows are found
|
||||
if ($value !== null)
|
||||
{
|
||||
// Return the value
|
||||
return $value;
|
||||
}
|
||||
|
||||
// Return null if no rows are found
|
||||
return null;
|
||||
return $this->load->table($this->getTable())->value([$key => $value], $get);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -243,7 +228,13 @@ final class Item implements ItemInterface
|
||||
*/
|
||||
private function action(string $value, string $key): string
|
||||
{
|
||||
if (($id = $this->value($value, $key, 'id')) !== null && $id > 0)
|
||||
$id = $this->database->value(
|
||||
["a.id" => 'id'],
|
||||
["a" => $this->getTable()],
|
||||
["a.$key" => $value]
|
||||
);
|
||||
|
||||
if ($id !== null && $id > 0)
|
||||
{
|
||||
return 'update';
|
||||
}
|
||||
|
@ -142,32 +142,18 @@ final class Items implements ItemsInterface
|
||||
* @param string $key The key on which the values being searched.
|
||||
* @param string $get The key of the values we want back
|
||||
*
|
||||
* @return array|null The array of found values.
|
||||
* @return array|null The array of found values.
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function values(array $values, string $key = 'guid', string $get = 'id'): ?array
|
||||
{
|
||||
// Perform the database query
|
||||
$rows = $this->database->rows(
|
||||
["a.$get" => $get],
|
||||
["a" => $this->getTable()],
|
||||
["a.$key" => ['operator' => 'IN', 'value' => $values]]
|
||||
);
|
||||
|
||||
// Check if rows are found
|
||||
if ($rows !== null)
|
||||
{
|
||||
// Return the values from the found rows
|
||||
return array_values(
|
||||
array_map(
|
||||
fn($row) => $row[$get],
|
||||
$rows
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
// Return null if no rows are found
|
||||
return null;
|
||||
return $this->load->table($this->getTable())->values([
|
||||
$key => [
|
||||
'operator' => 'IN',
|
||||
'value' => array_values($values)
|
||||
]
|
||||
], $get);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -202,7 +188,7 @@ final class Items implements ItemsInterface
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function delete(string $values, string $key = 'guid'): bool
|
||||
public function delete(array $values, string $key = 'guid'): bool
|
||||
{
|
||||
return $this->delete->table($this->getTable())->items([$key => ['operator' => 'IN', 'value' => $values]]);
|
||||
}
|
||||
@ -269,7 +255,12 @@ final class Items implements ItemsInterface
|
||||
];
|
||||
|
||||
// Check for existing items.
|
||||
$existingItems = $this->values($values, $key, $key);
|
||||
$existingItems = $this->database->values(
|
||||
["a.$key" => $key],
|
||||
["a" => $this->getTable()],
|
||||
["a.$key" => ['operator' => 'IN', 'value' => $values]]
|
||||
);
|
||||
|
||||
if ($existingItems !== null)
|
||||
{
|
||||
$sets['update'] = $this->extractSet($items, $existingItems, $key) ?? [];
|
||||
|
511
libraries/vendor_jcb/VDM.Joomla/src/Data/MultiSubform.php
Normal file
511
libraries/vendor_jcb/VDM.Joomla/src/Data/MultiSubform.php
Normal file
@ -0,0 +1,511 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 3rd September, 2020
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/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\Data;
|
||||
|
||||
|
||||
use VDM\Joomla\Interfaces\Data\SubformInterface as Subform;
|
||||
use VDM\Joomla\Interfaces\Data\MultiSubformInterface;
|
||||
|
||||
|
||||
/**
|
||||
* CRUD the data of multi subform to another views (tables)
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
final class MultiSubform implements MultiSubformInterface
|
||||
{
|
||||
/**
|
||||
* The Subform Class.
|
||||
*
|
||||
* @var Subform
|
||||
* @since 3.2.2
|
||||
*/
|
||||
protected Subform $subform;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param Subform $subform The Subform Class.
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function __construct(Subform $subform)
|
||||
{
|
||||
$this->subform = $subform;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a subform items
|
||||
*
|
||||
* @param array $getMap The the map to get the subfrom data
|
||||
*
|
||||
* Example:
|
||||
* $getMap = [
|
||||
* '_core' => [
|
||||
* 'table' =>'data',
|
||||
* 'linkValue' => $item->guid ?? '',
|
||||
* 'linkKey' => 'look',
|
||||
* 'field' => 'data',
|
||||
* 'get' => ['guid','email','image','mobile_phone','website','dateofbirth']
|
||||
* ],
|
||||
* 'countries' => [
|
||||
* 'table' =>'data_country',
|
||||
* 'linkValue' => 'data:guid', // coretable:fieldname
|
||||
* 'linkKey' => 'data',
|
||||
* 'get' => ['guid','country','currency']
|
||||
* ]
|
||||
* ];
|
||||
*
|
||||
* @return array|null The subform
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function get(array $getMap): ?array
|
||||
{
|
||||
// Validate the core map presence and structure
|
||||
if (!isset($getMap['_core']) || !is_array($getMap['_core']) || !$this->validGetMap($getMap['_core']))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Initialize the core data
|
||||
$coreData = $this->getSubformData($getMap['_core']);
|
||||
|
||||
// Return null if fetching core data fails
|
||||
if (null === $coreData)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
$table = $getMap['_core']['table'];
|
||||
unset($getMap['_core']);
|
||||
|
||||
// Recursively get data for all nested subforms
|
||||
return $this->getNestedSubforms($getMap, $coreData, $table);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a subform items
|
||||
*
|
||||
* @param array $items The list of items from the subform to set
|
||||
* @param array $setMap The the map to set the subfrom data
|
||||
*
|
||||
* Example:
|
||||
* $items,
|
||||
* $setMap = [
|
||||
* '_core' => [
|
||||
* 'table' =>'data',
|
||||
* 'indexKey' => 'guid',
|
||||
* 'linkKey' => 'look',
|
||||
* 'linkValue' => $data['guid'] ?? ''
|
||||
* ],
|
||||
* 'countries' => [
|
||||
* 'table' =>'data_country',
|
||||
* 'indexKey' => 'guid',
|
||||
* 'linkKey' => 'data',
|
||||
* 'linkValue' => 'data:guid' // coretable:fieldname
|
||||
* ]
|
||||
* ];
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function set(array $items, array $setMap): bool
|
||||
{
|
||||
// Validate the core map presence and structure
|
||||
if (!isset($setMap['_core']) || !is_array($setMap['_core']) || !$this->validSetMap($setMap['_core']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Save the core data
|
||||
if (!$this->setSubformData($items, $setMap['_core']))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
$table = $setMap['_core']['table'];
|
||||
unset($setMap['_core']);
|
||||
|
||||
// Recursively set data for all nested subforms
|
||||
return $this->setNestedSubforms($setMap, $items, $table);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch data based on provided map configuration.
|
||||
*
|
||||
* @param array $map Map configuration
|
||||
* @param array|null $coreData The core data to be appended with subform data
|
||||
*
|
||||
* @return array|null Fetched data or null on failure
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function getSubformData(array $map, ?array $coreData = null): ?array
|
||||
{
|
||||
$map['linkValue'] = $this->setLinkValue($map['linkValue'], $coreData);
|
||||
|
||||
if (empty($map['linkValue']) || strpos($map['linkValue'], ':') !== false)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
return $this->subform->table($map['table'])->get(
|
||||
$map['linkValue'],
|
||||
$map['linkKey'],
|
||||
$map['field'],
|
||||
$map['get']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set data based on provided map configuration.
|
||||
*
|
||||
* @param array $items The list of items from the subform to set
|
||||
* @param array $map The the map to set the subfrom data
|
||||
* @param array|null $coreData The core data to be appended with subform data
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function setSubformData(array $items, array $map, ?array $coreData = null): bool
|
||||
{
|
||||
$map['linkValue'] = $this->setLinkValue($map['linkValue'], $coreData);
|
||||
|
||||
if (empty($map['linkValue']) || strpos($map['linkValue'], ':') !== false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->subform->table($map['table'])->set(
|
||||
$items,
|
||||
$map['indexKey'],
|
||||
$map['linkKey'],
|
||||
$map['linkValue']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the linked value if needed, and posible.
|
||||
*
|
||||
* @param string $linkValue The current linkValue
|
||||
* @param array|null $data The already found data as table => dataSet[field] => value
|
||||
*
|
||||
* @return string|null The actual linkValue
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function setLinkValue(string $linkValue, ?array $data = null): ?string
|
||||
{
|
||||
if ($data !== null && strpos($linkValue, ':') !== false)
|
||||
{
|
||||
[$table, $field] = explode(':', $linkValue);
|
||||
$linkValue = $data[$table][$field] ?? null;
|
||||
}
|
||||
|
||||
return $linkValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively process additional subform data.
|
||||
*
|
||||
* @param array $getMap The nested map of data to process
|
||||
* @param array $subformData The core subform data
|
||||
* @param string $table The core table
|
||||
*
|
||||
* @return array The core data with nested subforms included
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function getNestedSubforms(array $getMap, array $subformData, string $table): array
|
||||
{
|
||||
foreach ($subformData as &$subform)
|
||||
{
|
||||
$subform = $this->processGetSubform($getMap, $subform, $table);
|
||||
}
|
||||
|
||||
return $subformData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively process additional subform data.
|
||||
*
|
||||
* @param array $setMap The nested map of data to process
|
||||
* @param array $subformData The core subform data
|
||||
* @param string $table The core table
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function setNestedSubforms(array $setMap, array $subformData, string $table): bool
|
||||
{
|
||||
$status = true;
|
||||
foreach ($subformData as $subform)
|
||||
{
|
||||
if (!$this->processSetSubform($setMap, $subform, $table))
|
||||
{
|
||||
$status = false;
|
||||
}
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process each subform entry based on the map.
|
||||
*
|
||||
* @param array $getMap Mapping data for processing subforms
|
||||
* @param array $subform A single subform entry
|
||||
* @param string $table The table name used for linking values
|
||||
*
|
||||
* @return array Updated subform
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function processGetSubform(array $getMap, array $subform, string $table): array
|
||||
{
|
||||
foreach ($getMap as $key => $map)
|
||||
{
|
||||
if (!is_array($map) || isset($subform[$key]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->processGetMap($subform, $map, $key, $table);
|
||||
}
|
||||
|
||||
return $subform;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process each subform entry based on the map.
|
||||
*
|
||||
* @param array $setMap Mapping data for processing subforms
|
||||
* @param array $subform A single subform entry
|
||||
* @param string $table The table name used for linking values
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function processSetSubform(array $setMap, array $subform, string $table): bool
|
||||
{
|
||||
$status = true;
|
||||
foreach ($setMap as $key => $map)
|
||||
{
|
||||
if (!is_array($map) || !isset($subform[$key]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!$this->processSetMap($subform, $map, $key, $table))
|
||||
{
|
||||
$status = false;
|
||||
}
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a given map by either fetching nested subforms or handling them directly.
|
||||
*
|
||||
* @param array &$subform Reference to subform data
|
||||
* @param array $map Map configuration for subform processing
|
||||
* @param string $key Key associated with the map
|
||||
* @param string $table Core table name for linking values
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function processGetMap(array &$subform, array $map, string $key, string $table): void
|
||||
{
|
||||
if (isset($map['_core']))
|
||||
{
|
||||
$this->handleCoreGetMap($subform, $map, $key, $table);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->handleRegularGetMap($subform, $map, $key, $table);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Process a given map by either setting nested subforms or handling them directly.
|
||||
*
|
||||
* @param array $subform Subform data
|
||||
* @param array $map Map configuration for subform processing
|
||||
* @param string $key Key associated with the map
|
||||
* @param string $table Core table name for linking values
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function processSetMap(array $subform, array $map, string $key, string $table): bool
|
||||
{
|
||||
if (isset($map['_core']))
|
||||
{
|
||||
return $this->handleCoreSetMap($subform, $map, $key, $table);
|
||||
}
|
||||
|
||||
return $this->handleRegularSetMap($subform, $map, $key, $table);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the processing of '_core' maps in a subform.
|
||||
*
|
||||
* @param array &$subform Reference to subform data
|
||||
* @param array $map Map configuration for core subform processing
|
||||
* @param string $key Key associated with the map
|
||||
* @param string $table Core table name for linking values
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function handleCoreGetMap(array &$subform, array $map, string $key, string $table): void
|
||||
{
|
||||
if (is_array($map['_core']) && $this->validGetMap($map['_core']))
|
||||
{
|
||||
$map['_core']['linkValue'] = $this->setLinkValue($map['_core']['linkValue'], [$table => $subform]);
|
||||
|
||||
$subCoreData = $this->get($map);
|
||||
if ($subCoreData !== null)
|
||||
{
|
||||
$subform[$key] = $subCoreData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the processing of '_core' maps in a subform.
|
||||
*
|
||||
* @param array $subform Subform data
|
||||
* @param array $map Map configuration for core subform processing
|
||||
* @param string $key Key associated with the map
|
||||
* @param string $table Core table name for linking values
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function handleCoreSetMap(array $subform, array $map, string $key, string $table): bool
|
||||
{
|
||||
if (is_array($map['_core']) && $this->validGetMap($map['_core']))
|
||||
{
|
||||
$map['_core']['linkValue'] = $this->setLinkValue($map['_core']['linkValue'], [$table => $subform]);
|
||||
|
||||
return $this->set($subform[$key], $map);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the processing of regular maps in a subform.
|
||||
*
|
||||
* @param array &$subform Reference to subform data
|
||||
* @param array $map Map configuration for regular subform processing
|
||||
* @param string $key Key associated with the map
|
||||
* @param string $table Core table name for linking values
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function handleRegularGetMap(array &$subform, array $map, string $key, string $table): void
|
||||
{
|
||||
$map['field'] = $key;
|
||||
if ($this->validGetMap($map))
|
||||
{
|
||||
$subformData = $this->getSubformData($map, [$table => $subform]);
|
||||
if ($subformData !== null)
|
||||
{
|
||||
$subform[$key] = $subformData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the processing of regular maps in a subform.
|
||||
*
|
||||
* @param array $subform Subform data
|
||||
* @param array $map Map configuration for regular subform processing
|
||||
* @param string $key Key associated with the map
|
||||
* @param string $table Core table name for linking values
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function handleRegularSetMap(array $subform, array $map, string $key, string $table): bool
|
||||
{
|
||||
if ($this->validSetMap($map))
|
||||
{
|
||||
return $this->setSubformData($subform[$key], $map, [$table => $subform]);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the get map configuration for fetching subform data.
|
||||
* Ensures all required keys are present and have valid values.
|
||||
*
|
||||
* @param array $map The map configuration to validate.
|
||||
*
|
||||
* @return bool Returns true if the map is valid, false otherwise.
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function validGetMap(array $map): bool
|
||||
{
|
||||
// List of required keys with their expected types or validation functions
|
||||
$requiredKeys = [
|
||||
'table' => 'is_string',
|
||||
'linkValue' => 'is_string',
|
||||
'linkKey' => 'is_string',
|
||||
'field' => 'is_string',
|
||||
'get' => 'is_array'
|
||||
];
|
||||
|
||||
// Iterate through each required key and validate
|
||||
foreach ($requiredKeys as $key => $validator)
|
||||
{
|
||||
if (empty($map[$key]) || !$validator($map[$key]))
|
||||
{
|
||||
return false; // Key missing or validation failed
|
||||
}
|
||||
}
|
||||
|
||||
return true; // All checks passed
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the set map configuration for fetching subform data.
|
||||
* Ensures all required keys are present and have valid values.
|
||||
*
|
||||
* @param array $map The map configuration to validate.
|
||||
*
|
||||
* @return bool Returns true if the map is valid, false otherwise.
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function validSetMap(array $map): bool
|
||||
{
|
||||
// List of required keys with their expected types or validation functions
|
||||
$requiredKeys = [
|
||||
'table' => 'is_string',
|
||||
'indexKey' => 'is_string',
|
||||
'linkKey' => 'is_string',
|
||||
'linkValue' => 'is_string'
|
||||
];
|
||||
|
||||
// Iterate through each required key and validate
|
||||
foreach ($requiredKeys as $key => $validator)
|
||||
{
|
||||
if (empty($map[$key]) || !$validator($map[$key]))
|
||||
{
|
||||
return false; // Key missing or validation failed
|
||||
}
|
||||
}
|
||||
|
||||
return true; // All checks passed
|
||||
}
|
||||
}
|
||||
|
310
libraries/vendor_jcb/VDM.Joomla/src/Data/Subform.php
Normal file
310
libraries/vendor_jcb/VDM.Joomla/src/Data/Subform.php
Normal file
@ -0,0 +1,310 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 3rd September, 2020
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/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\Data;
|
||||
|
||||
|
||||
use VDM\Joomla\Interfaces\Data\ItemsInterface as Items;
|
||||
use VDM\Joomla\Interfaces\Data\SubformInterface;
|
||||
|
||||
|
||||
/**
|
||||
* CRUD the data of any sub-form to another view (table)
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
final class Subform implements SubformInterface
|
||||
{
|
||||
/**
|
||||
* The ItemsInterface Class.
|
||||
*
|
||||
* @var Items
|
||||
* @since 3.2.2
|
||||
*/
|
||||
protected Items $items;
|
||||
|
||||
/**
|
||||
* Table Name
|
||||
*
|
||||
* @var string
|
||||
* @since 3.2.1
|
||||
*/
|
||||
protected string $table;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param Items $items The ItemsInterface Class.
|
||||
* @param string|null $table The table name.
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function __construct(Items $items, ?string $table = null)
|
||||
{
|
||||
$this->items = $items;
|
||||
if ($table !== null)
|
||||
{
|
||||
$this->table = $table;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the current active table
|
||||
*
|
||||
* @param string $table The table that should be active
|
||||
*
|
||||
* @return self
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function table(string $table): self
|
||||
{
|
||||
$this->table = $table;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a subform items
|
||||
*
|
||||
* @param string $linkValue The value of the link key in child table.
|
||||
* @param string $linkKey The link key on which the items where linked in the child table.
|
||||
* @param string $field The parent field name of the subform in the parent view.
|
||||
* @param array $get The array get:set of the keys of each row in the subform.
|
||||
*
|
||||
* @return array|null The subform
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function get(string $linkValue, string $linkKey, string $field, array $get): ?array
|
||||
{
|
||||
if (($items = $this->items->table($this->getTable())->get([$linkValue], $linkKey)) !== null)
|
||||
{
|
||||
return $this->converter($items, $get, $field);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a subform items
|
||||
*
|
||||
* @param array $items The list of items from the subform to set
|
||||
* @param string $indexKey The index key on which the items should be observed as it relates to insert/update/delete.
|
||||
* @param string $linkKey The link key on which the items where linked in the child table.
|
||||
* @param string $linkValue The value of the link key in child table.
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function set(array $items, string $indexKey, string $linkKey, string $linkValue): bool
|
||||
{
|
||||
$items = $this->process($items, $indexKey, $linkKey, $linkValue);
|
||||
|
||||
$this->purge($items, $indexKey, $linkKey, $linkValue);
|
||||
|
||||
return $this->items->table($this->getTable())->set(
|
||||
$items, $indexKey
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current active table
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function getTable(): string
|
||||
{
|
||||
return $this->table;
|
||||
}
|
||||
|
||||
/**
|
||||
* Purge all items no longer in subform
|
||||
*
|
||||
* @param array $items The list of items to set.
|
||||
* @param string $indexKey The index key on which the items should be observed as it relates to insert/update/delete
|
||||
* @param string $linkKey The link key on which the items where linked in the child table.
|
||||
* @param string $linkValue The value of the link key in child table.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function purge(array $items, string $indexKey, string $linkKey, string $linkValue): void
|
||||
{
|
||||
// Get the current index values from the database
|
||||
$currentIndexValues = $this->items->table($this->getTable())->values([$linkValue], $linkKey, $indexKey);
|
||||
|
||||
if ($currentIndexValues !== null)
|
||||
{
|
||||
// Extract the index values from the items array
|
||||
$activeIndexValues = array_values(array_map(function($item) use ($indexKey) {
|
||||
return $item[$indexKey] ?? null;
|
||||
}, $items));
|
||||
|
||||
// Find the index values that are no longer in the items array
|
||||
$inactiveIndexValues = array_diff($currentIndexValues, $activeIndexValues);
|
||||
|
||||
// Delete the inactive index values
|
||||
if (!empty($inactiveIndexValues))
|
||||
{
|
||||
$this->items->table($this->getTable())->delete($inactiveIndexValues, $indexKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters the specified keys from an array of objects or arrays, converts them to arrays,
|
||||
* and sets them by association with a specified key and an incrementing integer.
|
||||
*
|
||||
* @param array $items Array of objects or arrays to be filtered.
|
||||
* @param array $keySet Array of keys to retain in each item.
|
||||
* @param string $field The field prefix for the resulting associative array.
|
||||
*
|
||||
* @return array Array of filtered arrays set by association.
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function converter(array $items, array $keySet, string $field): array
|
||||
{
|
||||
/**
|
||||
* Filters keys for a single item and converts it to an array.
|
||||
*
|
||||
* @param object|array $item The item to filter.
|
||||
* @param array $keySet The keys to retain.
|
||||
*
|
||||
* @return array The filtered array.
|
||||
* @since 3.2.2
|
||||
*/
|
||||
$filterKeys = function ($item, array $keySet) {
|
||||
$filteredArray = [];
|
||||
foreach ($keySet as $key) {
|
||||
if (is_object($item) && property_exists($item, $key)) {
|
||||
$filteredArray[$key] = $item->{$key};
|
||||
} elseif (is_array($item) && array_key_exists($key, $item)) {
|
||||
$filteredArray[$key] = $item[$key];
|
||||
}
|
||||
}
|
||||
return $filteredArray;
|
||||
};
|
||||
|
||||
$result = [];
|
||||
foreach ($items as $index => $item)
|
||||
{
|
||||
$filteredArray = $filterKeys($item, $keySet);
|
||||
$result[$field . $index] = $filteredArray;
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes an array of arrays based on the specified key.
|
||||
*
|
||||
* @param array $items Array of arrays to be processed.
|
||||
* @param string $indexKey The index key on which the items should be observed as it relates to insert/update/delete
|
||||
* @param string $linkKey The link key on which the items where linked in the child table.
|
||||
* @param string $linkValue The value of the link key in child table.
|
||||
*
|
||||
* @return array The processed array of arrays.
|
||||
* @since 3.2.2
|
||||
*/
|
||||
private function process(array $items, string $indexKey, string $linkKey, string $linkValue): array
|
||||
{
|
||||
foreach ($items as &$item)
|
||||
{
|
||||
$value = $item[$indexKey] ?? '';
|
||||
switch ($indexKey) {
|
||||
case 'guid':
|
||||
if (empty($value))
|
||||
{
|
||||
// set INDEX
|
||||
$item[$indexKey] = $this->setGuid($indexKey);
|
||||
}
|
||||
break;
|
||||
case 'id':
|
||||
if (empty($value))
|
||||
{
|
||||
$item[$indexKey] = 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// No action for other keys if empty
|
||||
break;
|
||||
}
|
||||
// set LINK
|
||||
$item[$linkKey] = $linkValue;
|
||||
}
|
||||
|
||||
return array_values($items);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a GUIDv4 string
|
||||
*
|
||||
* Thanks to Dave Pearson (and other)
|
||||
* https://www.php.net/manual/en/function.com-create-guid.php#119168
|
||||
*
|
||||
* Uses the best cryptographically secure method
|
||||
* for all supported platforms with fallback to an older,
|
||||
* less secure version.
|
||||
*
|
||||
* @param string $key The key to check and modify values.
|
||||
* @param bool $trim
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 3.0.9
|
||||
*/
|
||||
private function setGuid(string $key, bool $trim = true): string
|
||||
{
|
||||
// Windows
|
||||
if (function_exists('com_create_guid'))
|
||||
{
|
||||
if ($trim)
|
||||
{
|
||||
return trim(\com_create_guid(), '{}');
|
||||
}
|
||||
return \com_create_guid();
|
||||
}
|
||||
|
||||
// set the braces if needed
|
||||
$lbrace = $trim ? "" : chr(123); // "{"
|
||||
$rbrace = $trim ? "" : chr(125); // "}"
|
||||
|
||||
// OSX/Linux
|
||||
if (function_exists('openssl_random_pseudo_bytes'))
|
||||
{
|
||||
$data = \openssl_random_pseudo_bytes(16);
|
||||
$data[6] = chr( ord($data[6]) & 0x0f | 0x40); // set version to 0100
|
||||
$data[8] = chr( ord($data[8]) & 0x3f | 0x80); // set bits 6-7 to 10
|
||||
return $lbrace . vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4)) . $lbrace;
|
||||
}
|
||||
|
||||
// Fallback (PHP 4.2+)
|
||||
mt_srand((double) microtime() * 10000);
|
||||
$charid = strtolower( md5( uniqid( rand(), true)));
|
||||
$hyphen = chr(45); // "-"
|
||||
$guidv4 = $lbrace.
|
||||
substr($charid, 0, 8). $hyphen.
|
||||
substr($charid, 8, 4). $hyphen.
|
||||
substr($charid, 12, 4). $hyphen.
|
||||
substr($charid, 16, 4). $hyphen.
|
||||
substr($charid, 20, 12).
|
||||
$rbrace;
|
||||
|
||||
// check that it does not already exist (one in a billion chance ;)
|
||||
// but we do it any way...
|
||||
if ($this->items->table($this->getTable())->values([$guidv4], $key))
|
||||
{
|
||||
return $this->setGuid($key);
|
||||
}
|
||||
|
||||
return $guidv4;
|
||||
}
|
||||
}
|
||||
|
1
libraries/vendor_jcb/VDM.Joomla/src/Data/index.html
Normal file
1
libraries/vendor_jcb/VDM.Joomla/src/Data/index.html
Normal file
@ -0,0 +1 @@
|
||||
<html><body bgcolor="#FFFFFF"></body></html>
|
@ -216,6 +216,31 @@ final class Load extends Database implements LoadInterface
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load values from multiple rows
|
||||
*
|
||||
* @param array $select Array of selection keys
|
||||
* @param array $tables Array of tables to search
|
||||
* @param array|null $where Array of where key=>value match exist
|
||||
* @param array|null $order Array of how to order the data
|
||||
* @param int|null $limit Limit the number of values returned
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.2
|
||||
**/
|
||||
public function values(array $select, array $tables, ?array $where = null,
|
||||
?array $order = null, ?int $limit = null): ?array
|
||||
{
|
||||
// check if we can get many rows
|
||||
if ($this->many($select, $tables, $where, $order, $limit))
|
||||
{
|
||||
return $this->db->loadColumn();
|
||||
}
|
||||
|
||||
// data does not exist
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Load many
|
||||
*
|
||||
|
@ -72,7 +72,7 @@ interface ItemsInterface
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function delete(string $values, string $key = 'guid'): bool;
|
||||
public function delete(array $values, string $key = 'guid'): bool;
|
||||
|
||||
/**
|
||||
* Get the current active table
|
||||
|
@ -45,6 +45,22 @@ interface LoadInterface
|
||||
*/
|
||||
public function value(array $keys, string $field);
|
||||
|
||||
/**
|
||||
* Get a value from multiple rows from a given table
|
||||
* Example: $this->values(
|
||||
* [
|
||||
* 'guid' => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
|
||||
* ], 'value_key'
|
||||
* );
|
||||
*
|
||||
* @param array $keys The item keys
|
||||
* @param string $field The field key
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function values(array $keys, string $field): ?array;
|
||||
|
||||
/**
|
||||
* Get values from a given table
|
||||
* Example: $this->item(
|
||||
|
@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/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\Interfaces\Data;
|
||||
|
||||
|
||||
/**
|
||||
* Data Multi Subform Interface
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
interface MultiSubformInterface
|
||||
{
|
||||
/**
|
||||
* Get a subform items
|
||||
*
|
||||
* @param array $getMap The the map to get the subfrom data
|
||||
*
|
||||
* Example:
|
||||
* $getMap = [
|
||||
* '_core' => [
|
||||
* 'table' =>'data',
|
||||
* 'linkValue' => $item->guid ?? '',
|
||||
* 'linkKey' => 'look',
|
||||
* 'field' => 'data',
|
||||
* 'get' => ['guid','email','image','mobile_phone','website','dateofbirth']
|
||||
* ],
|
||||
* 'countries' => [
|
||||
* 'table' =>'data_country',
|
||||
* 'linkValue' => 'data:guid', // coretable:fieldname
|
||||
* 'linkKey' => 'data',
|
||||
* 'get' => ['guid','country','currency']
|
||||
* ]
|
||||
* ];
|
||||
*
|
||||
* @return array|null The subform
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function get(array $getMap): ?array;
|
||||
|
||||
/**
|
||||
* Set a subform items
|
||||
*
|
||||
* @param array $items The list of items from the subform to set
|
||||
* @param array $setMap The the map to set the subfrom data
|
||||
*
|
||||
* Example:
|
||||
* $items,
|
||||
* $setMap = [
|
||||
* '_core' => [
|
||||
* 'table' =>'data',
|
||||
* 'indexKey' => 'guid',
|
||||
* 'linkKey' => 'look',
|
||||
* 'linkValue' => $data['guid'] ?? ''
|
||||
* ],
|
||||
* 'countries' => [
|
||||
* 'table' =>'data_country',
|
||||
* 'indexKey' => 'guid',
|
||||
* 'linkKey' => 'data',
|
||||
* 'linkValue' => 'data:guid' // coretable:fieldname
|
||||
* ]
|
||||
* ];
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function set(array $items, array $setMap): bool;
|
||||
}
|
||||
|
@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/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\Interfaces\Data;
|
||||
|
||||
|
||||
/**
|
||||
* Data Subform Interface
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
interface SubformInterface
|
||||
{
|
||||
/**
|
||||
* Set the current active table
|
||||
*
|
||||
* @param string $table The table that should be active
|
||||
*
|
||||
* @return self
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function table(string $table): self;
|
||||
|
||||
/**
|
||||
* Get a subform items
|
||||
*
|
||||
* @param string $linkValue The value of the link key in child table.
|
||||
* @param string $linkKey The link key on which the items where linked in the child table.
|
||||
* @param string $field The parent field name of the subform in the parent view.
|
||||
* @param array $set The array SET of the keys of each row in the subform.
|
||||
*
|
||||
* @return array|null The subform
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function get(string $linkValue, string $linkKey, string $field, array $set): ?array;
|
||||
|
||||
/**
|
||||
* Set a subform items
|
||||
*
|
||||
* @param array $items The list of items from the subform to set
|
||||
* @param string $indexKey The index key on which the items should be observed as it relates to insert/update/delete.
|
||||
* @param string $linkKey The link key on which the items where linked in the child table.
|
||||
* @param string $linkValue The value of the link key in child table.
|
||||
*
|
||||
* @return bool
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function set(array $items, string $indexKey, string $linkKey, string $linkValue): bool;
|
||||
|
||||
/**
|
||||
* Get the current active table
|
||||
*
|
||||
* @return string
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function getTable(): string;
|
||||
}
|
||||
|
@ -16,7 +16,9 @@ use Joomla\DI\Container;
|
||||
|
||||
|
||||
/**
|
||||
* The Container Factory Interface
|
||||
* The Container Factory Interface
|
||||
*
|
||||
* @since 0.0.0
|
||||
*/
|
||||
interface FactoryInterface
|
||||
{
|
||||
@ -26,7 +28,7 @@ interface FactoryInterface
|
||||
* @param string $key The container class key
|
||||
*
|
||||
* @return Mixed
|
||||
* @since 3.2.0
|
||||
* @since 0.0.0
|
||||
*/
|
||||
public static function _(string $key);
|
||||
|
||||
@ -34,7 +36,7 @@ interface FactoryInterface
|
||||
* Get the global container
|
||||
*
|
||||
* @return Container
|
||||
* @since 3.2.0
|
||||
* @since 0.0.0
|
||||
*/
|
||||
public static function getContainer(): Container;
|
||||
}
|
||||
|
@ -109,6 +109,21 @@ interface LoadInterface
|
||||
* @return mixed
|
||||
* @since 3.2.0
|
||||
**/
|
||||
public function value(array $select, array $tables, ?array $where = null, ?array $order = null);
|
||||
public function value(array $select, array $tables, ?array $where = null, ?array $order = null);
|
||||
|
||||
/**
|
||||
* Load values from multiple rows
|
||||
*
|
||||
* @param array $select Array of selection keys
|
||||
* @param array $tables Array of tables to search
|
||||
* @param array|null $where Array of where key=>value match exist
|
||||
* @param array|null $order Array of how to order the data
|
||||
* @param int|null $limit Limit the number of values returned
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.2
|
||||
**/
|
||||
public function values(array $select, array $tables, ?array $where = null,
|
||||
?array $order = null, ?int $limit = null): ?array;
|
||||
}
|
||||
|
||||
|
@ -42,6 +42,19 @@ interface ModelInterface
|
||||
*/
|
||||
public function value($value, string $field, ?string $table = null);
|
||||
|
||||
/**
|
||||
* Model a value of multiple items
|
||||
* Example: $this->items(Array, 'value_key', 'table_name');
|
||||
*
|
||||
* @param array|null $items The array of values
|
||||
* @param string $field The field key
|
||||
* @param string|null $table The table
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function values(?array $items = null, string $field, ?string $table = null): ?array;
|
||||
|
||||
/**
|
||||
* Model the values of an item
|
||||
* Example: $this->item(Object, 'table_name');
|
||||
|
@ -29,10 +29,10 @@ interface Registryinterface extends Activeregistryinterface
|
||||
* @param mixed $value Value of entry
|
||||
*
|
||||
* @throws \InvalidArgumentException If any of the path values are not a number or string.
|
||||
* @return $this
|
||||
* @return self
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function set(string $path, $value): static;
|
||||
public function set(string $path, $value): self;
|
||||
|
||||
/**
|
||||
* Adds content into the registry. If a key exists,
|
||||
@ -45,10 +45,10 @@ interface Registryinterface extends Activeregistryinterface
|
||||
* Override in child class allowed set class property $addAsArray = true.
|
||||
*
|
||||
* @throws \InvalidArgumentException If any of the path values are not a number or string.
|
||||
* @return $this
|
||||
* @return self
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function add(string $path, $value, ?bool $asArray = null): static;
|
||||
public function add(string $path, $value, ?bool $asArray = null): self;
|
||||
|
||||
/**
|
||||
* Retrieves a value (or sub-array) from the registry using multiple keys.
|
||||
@ -68,10 +68,10 @@ interface Registryinterface extends Activeregistryinterface
|
||||
* @param string $path Registry path (e.g. vdm.content.builder)
|
||||
*
|
||||
* @throws \InvalidArgumentException If any of the path values are not a number or string.
|
||||
* @return $this
|
||||
* @return self
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function remove(string $path): static;
|
||||
public function remove(string $path): self;
|
||||
|
||||
/**
|
||||
* Checks the existence of a particular location in the registry using multiple keys.
|
||||
@ -89,9 +89,9 @@ interface Registryinterface extends Activeregistryinterface
|
||||
*
|
||||
* @param string|null $value The value to set.
|
||||
*
|
||||
* @return $this
|
||||
* @return self
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function setSeparator(?string $value): static;
|
||||
public function setSeparator(?string $value): self;
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,8 @@ use VDM\Joomla\Data\Action\Update;
|
||||
use VDM\Joomla\Data\Action\Delete;
|
||||
use VDM\Joomla\Data\Item;
|
||||
use VDM\Joomla\Data\Items;
|
||||
use VDM\Joomla\Data\Subform;
|
||||
use VDM\Joomla\Data\MultiSubform;
|
||||
|
||||
|
||||
/**
|
||||
@ -56,6 +58,12 @@ class Data implements ServiceProviderInterface
|
||||
|
||||
$container->alias(Items::class, 'Data.Items')
|
||||
->share('Data.Items', [$this, 'getItems'], true);
|
||||
|
||||
$container->alias(Subform::class, 'Data.Subform')
|
||||
->share('Data.Subform', [$this, 'getSubform'], true);
|
||||
|
||||
$container->alias(MultiSubform::class, 'Data.MultiSubform')
|
||||
->share('Data.MultiSubform', [$this, 'getMultiSubform'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -157,6 +165,36 @@ class Data implements ServiceProviderInterface
|
||||
$container->get('Data.Delete'),
|
||||
$container->get('Load')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get The Subform Class.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Subform
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getSubform(Container $container): Subform
|
||||
{
|
||||
return new Subform(
|
||||
$container->get('Data.Items')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get The MultiSubform Class.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return MultiSubform
|
||||
* @since 3.2.0
|
||||
*/
|
||||
public function getMultiSubform(Container $container): MultiSubform
|
||||
{
|
||||
return new MultiSubform(
|
||||
$container->get('Data.Subform')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
73
libraries/vendor_jcb/VDM.Joomla/src/Service/Table.php
Normal file
73
libraries/vendor_jcb/VDM.Joomla/src/Service/Table.php
Normal file
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
/**
|
||||
* @package Joomla.Component.Builder
|
||||
*
|
||||
* @created 4th September, 2022
|
||||
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
||||
* @git Joomla Component Builder <https://git.vdm.dev/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\Service;
|
||||
|
||||
|
||||
use Joomla\DI\Container;
|
||||
use Joomla\DI\ServiceProviderInterface;
|
||||
use VDM\Joomla\Componentbuilder\Table as DataTable;
|
||||
use VDM\Joomla\Componentbuilder\Table\Schema;
|
||||
|
||||
|
||||
/**
|
||||
* Table Service Provider
|
||||
*
|
||||
* @since 3.2.2
|
||||
*/
|
||||
class Table implements ServiceProviderInterface
|
||||
{
|
||||
/**
|
||||
* Registers the service provider with a DI container.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return void
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function register(Container $container)
|
||||
{
|
||||
$container->alias(DataTable::class, 'Table')
|
||||
->share('Table', [$this, 'getTable'], true);
|
||||
|
||||
$container->alias(Schema::class, 'Table.Schema')
|
||||
->share('Table.Schema', [$this, 'getSchema'], true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get The Componentbuilder Data Table Class.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return DataTable
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function getTable(Container $container): DataTable
|
||||
{
|
||||
return new DataTable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get The Schema Class.
|
||||
*
|
||||
* @param Container $container The DI container.
|
||||
*
|
||||
* @return Schema
|
||||
* @since 3.2.2
|
||||
*/
|
||||
public function getSchema(Container $container): Schema
|
||||
{
|
||||
return new Schema(
|
||||
$container->get('Table')
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ namespace VDM\Joomla\Utilities;
|
||||
|
||||
use Joomla\CMS\Factory;
|
||||
use VDM\Joomla\Utilities\Component\Helper;
|
||||
use VDM\Joomla\Data\Factory as Data;
|
||||
|
||||
|
||||
/**
|
||||
@ -35,6 +36,8 @@ abstract class GetHelper
|
||||
*
|
||||
* @return mixed string/int/float
|
||||
* @since 3.0.9
|
||||
*
|
||||
* @deprecated 5.1 Use Data::_('Load')->table($table)->value(...)
|
||||
*/
|
||||
public static function var(?string $table = null, $where = null,
|
||||
string $whereString = 'user', string $what = 'id',
|
||||
@ -103,6 +106,8 @@ abstract class GetHelper
|
||||
*
|
||||
* @return array|null
|
||||
* @since 3.0.9
|
||||
*
|
||||
* @deprecated 5.1 Use Data::_('Load')->table($table)->values(...)
|
||||
*/
|
||||
public static function vars(?string $table = null, $where = null,
|
||||
string $whereString = 'user', string $what = 'id', string $operator = 'IN',
|
||||
|
Loading…
Reference in New Issue
Block a user