Release of v5.0.0-beta5

Fix the media field size limitation. #1109. Add dynamic datatype update to schema field check. Fix version_update column size. Improved the Schema Table update engine.
This commit is contained in:
Robot 2024-04-24 21:38:12 +02:00
parent 0193ab735c
commit 59af18e13a
Signed by untrusted user: Robot
GPG Key ID: 14DECD44E7E1BB95
16 changed files with 555 additions and 191 deletions

View File

@ -1,3 +1,10 @@
# v5.0.0-beta5
- Fix the media field size limitation. #1109
- Add dynamic datatype update to schema field check.
- Fix version_update column size.
- Improved the Schema Table update engine.
# v5.0.0-beta4
- Add fallback option to ensure that all JCB tables and fields exist.

View File

@ -706,7 +706,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_componentbuilder/forms/admin_view.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","add_fadein","type","source","add_category_submenu","add_php_getlistquery","add_css_view","add_php_getform","add_php_before_save","add_css_views","add_php_save","add_php_postsavehook","add_javascript_view_file","add_php_allowadd","add_php_allowedit","add_javascript_view_footer","add_php_before_cancel","add_php_after_cancel","add_javascript_views_file","add_php_batchcopy","add_php_batchmove","add_javascript_views_footer","add_php_before_publish","add_php_after_publish","add_custom_button","add_php_before_delete","add_php_after_delete","add_php_document","add_sql","add_php_ajax","add_custom_import","add_php_getitem","add_php_getitems","add_php_getitems_after_all"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "alias_builder","targetTable": "#__componentbuilder_field","targetColumn": "id","displayColumn": "name"}]}'
'{"formFile": "administrator/components/com_componentbuilder/forms/admin_view.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","add_fadein","type","source","alias_builder_type","add_category_submenu","add_php_getlistquery","add_css_view","add_php_getform","add_php_before_save","add_css_views","add_php_save","add_php_postsavehook","add_javascript_view_file","add_php_allowadd","add_php_allowedit","add_javascript_view_footer","add_php_before_cancel","add_php_after_cancel","add_javascript_views_file","add_php_batchcopy","add_php_batchmove","add_javascript_views_footer","add_php_before_publish","add_php_after_publish","add_custom_button","add_php_before_delete","add_php_after_delete","add_php_document","add_sql","add_php_ajax","add_custom_import","add_php_getitem","add_php_getitems","add_php_getitems_after_all"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "alias_builder","targetTable": "#__componentbuilder_field","targetColumn": "id","displayColumn": "name"}]}'
);
// Install Custom admin view Content Types.
$this->setContentType(
@ -791,7 +791,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_componentbuilder/forms/dynamic_get.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","main_source","gettype","add_php_after_getitems","add_php_router_parse","add_php_before_getitems","add_php_before_getitem","add_php_after_getitem","view_table_main","add_php_getlistquery","select_all","pagination"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "view_table_main","targetTable": "#__componentbuilder_admin_view","targetColumn": "id","displayColumn": "system_name"}]}'
'{"formFile": "administrator/components/com_componentbuilder/forms/dynamic_get.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","main_source","gettype","add_php_after_getitems","add_php_router_parse","add_php_before_getitems","add_php_before_getitem","add_php_after_getitem","view_table_main","add_php_getlistquery","select_all","pagination","addcalculation"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "view_table_main","targetTable": "#__componentbuilder_admin_view","targetColumn": "id","displayColumn": "system_name"}]}'
);
// Install Custom code Content Types.
$this->setContentType(
@ -2416,7 +2416,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_componentbuilder/forms/admin_view.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","add_fadein","type","source","add_category_submenu","add_php_getlistquery","add_css_view","add_php_getform","add_php_before_save","add_css_views","add_php_save","add_php_postsavehook","add_javascript_view_file","add_php_allowadd","add_php_allowedit","add_javascript_view_footer","add_php_before_cancel","add_php_after_cancel","add_javascript_views_file","add_php_batchcopy","add_php_batchmove","add_javascript_views_footer","add_php_before_publish","add_php_after_publish","add_custom_button","add_php_before_delete","add_php_after_delete","add_php_document","add_sql","add_php_ajax","add_custom_import","add_php_getitem","add_php_getitems","add_php_getitems_after_all"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "alias_builder","targetTable": "#__componentbuilder_field","targetColumn": "id","displayColumn": "name"}]}'
'{"formFile": "administrator/components/com_componentbuilder/forms/admin_view.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","add_fadein","type","source","alias_builder_type","add_category_submenu","add_php_getlistquery","add_css_view","add_php_getform","add_php_before_save","add_css_views","add_php_save","add_php_postsavehook","add_javascript_view_file","add_php_allowadd","add_php_allowedit","add_javascript_view_footer","add_php_before_cancel","add_php_after_cancel","add_javascript_views_file","add_php_batchcopy","add_php_batchmove","add_javascript_views_footer","add_php_before_publish","add_php_after_publish","add_custom_button","add_php_before_delete","add_php_after_delete","add_php_document","add_sql","add_php_ajax","add_custom_import","add_php_getitem","add_php_getitems","add_php_getitems_after_all"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "alias_builder","targetTable": "#__componentbuilder_field","targetColumn": "id","displayColumn": "name"}]}'
);
// Update Custom admin view Content Types.
$this->setContentType(
@ -2501,7 +2501,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface
// router
'',
// contentHistoryOptions
'{"formFile": "administrator/components/com_componentbuilder/forms/dynamic_get.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","main_source","gettype","add_php_after_getitems","add_php_router_parse","add_php_before_getitems","add_php_before_getitem","add_php_after_getitem","view_table_main","add_php_getlistquery","select_all","pagination"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "view_table_main","targetTable": "#__componentbuilder_admin_view","targetColumn": "id","displayColumn": "system_name"}]}'
'{"formFile": "administrator/components/com_componentbuilder/forms/dynamic_get.xml","hideFields": ["asset_id","checked_out","checked_out_time"],"ignoreChanges": ["modified_by","modified","checked_out","checked_out_time","version","hits"],"convertToInt": ["published","ordering","version","hits","main_source","gettype","add_php_after_getitems","add_php_router_parse","add_php_before_getitems","add_php_before_getitem","add_php_after_getitem","view_table_main","add_php_getlistquery","select_all","pagination","addcalculation"],"displayLookup": [{"sourceColumn": "created_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "access","targetTable": "#__viewlevels","targetColumn": "id","displayColumn": "title"},{"sourceColumn": "modified_by","targetTable": "#__users","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "view_table_main","targetTable": "#__componentbuilder_admin_view","targetColumn": "id","displayColumn": "system_name"}]}'
);
// Update Custom code Content Types.
$this->setContentType(
@ -3210,7 +3210,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 5.0.0-beta4 Was Successful! Let us know if anything is not working as expected.</h3></div>';
<h3>Upgrade to Version 5.0.0-beta5 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();
@ -4984,16 +4984,17 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface
/**
* Ensures that a class in the namespace is available.
* If the class is not already loaded, it attempts to load it.
* If the class is not already loaded, it attempts to load it via the power autoloader.
*
* @param mixed $className The class name to load.
* @param mixed $nameClass The name::class we are looking for.
*
* @return void
* @since 3.2.1
* @throws \Exception If the class could not be loaded.
*/
protected function ensureClassExists($className): void
protected function ensureClassExists($nameClass): void
{
if (!class_exists($className, true))
if (!class_exists($nameClass, true))
{
// The power autoloader for this project admin area.
$power_autoloader = JPATH_ADMINISTRATOR . '/componenents/com_componentbuilder/src/Helper/PowerloaderHelper.php';
@ -5003,9 +5004,9 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface
}
// Check again if the class now exists after requiring it
if (!class_exists($className, true))
if (!class_exists($nameClass, true))
{
throw new \Exception($errorMessage);
throw new \Exception("We failed to find/load the $nameClass");
}
}
}

View File

@ -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 (5.0.0-beta4) 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 (5.0.0-beta5) 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,13 +144,13 @@ 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*: 21st April, 2024
+ *Version*: 5.0.0-beta4
+ *Last Build*: 24th April, 2024
+ *Version*: 5.0.0-beta5
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
+ *Line count*: **754312**
+ *Line count*: **755378**
+ *Field count*: **2097**
+ *File count*: **5298**
+ *File count*: **5299**
+ *Folder count*: **531**
> This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com).

View File

@ -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 (5.0.0-beta4) 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 (5.0.0-beta5) 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,13 +144,13 @@ 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*: 21st April, 2024
+ *Version*: 5.0.0-beta4
+ *Last Build*: 24th April, 2024
+ *Version*: 5.0.0-beta5
+ *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved.
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
+ *Line count*: **754312**
+ *Line count*: **755378**
+ *Field count*: **2097**
+ *File count*: **5298**
+ *File count*: **5299**
+ *Folder count*: **531**
> This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com).

View File

@ -62,7 +62,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_component` (
`export_key` TEXT NOT NULL,
`git_folder_path` VARCHAR(255) NOT NULL DEFAULT '',
`guid` VARCHAR(36) NOT NULL DEFAULT '',
`image` CHAR(64) NOT NULL DEFAULT '',
`image` VARCHAR(255) NOT NULL DEFAULT '',
`javascript` TEXT NOT NULL,
`jcb_powers_path` VARCHAR(255) NOT NULL DEFAULT '',
`joomla_source_link` VARCHAR(255) NOT NULL DEFAULT '',
@ -452,16 +452,16 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_admin_view` (
`addtabs` TEXT NOT NULL,
`ajax_input` TEXT NOT NULL,
`alias_builder` VARCHAR(255) NOT NULL DEFAULT '',
`alias_builder_type` CHAR NOT NULL DEFAULT '',
`alias_builder_type` TINYINT(1) NOT NULL DEFAULT 0,
`css_view` TEXT NOT NULL,
`css_views` TEXT NOT NULL,
`custom_button` TEXT NOT NULL,
`description` TEXT NULL,
`guid` VARCHAR(36) NOT NULL DEFAULT '',
`html_import_view` MEDIUMTEXT NOT NULL,
`icon` CHAR(64) NOT NULL DEFAULT '',
`icon_add` CHAR(64) NOT NULL DEFAULT '',
`icon_category` CHAR(64) NOT NULL DEFAULT '',
`icon` VARCHAR(255) NOT NULL DEFAULT '',
`icon_add` VARCHAR(255) NOT NULL DEFAULT '',
`icon_category` VARCHAR(255) NOT NULL DEFAULT '',
`javascript_view_file` TEXT NOT NULL,
`javascript_view_footer` TEXT NOT NULL,
`javascript_views_file` TEXT NOT NULL,
@ -591,7 +591,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_custom_admin_view` (
`description` VARCHAR(255) NOT NULL DEFAULT '',
`dynamic_get` INT(11) NOT NULL DEFAULT 0,
`guid` VARCHAR(36) NOT NULL DEFAULT '',
`icon` CHAR(64) NOT NULL DEFAULT '',
`icon` VARCHAR(255) NOT NULL DEFAULT '',
`javascript_file` TEXT NOT NULL,
`js_document` TEXT NOT NULL,
`libraries` TEXT NOT NULL,
@ -799,7 +799,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_dynamic_get` (
`add_php_before_getitems` TINYINT(1) NOT NULL DEFAULT 0,
`add_php_getlistquery` TINYINT(1) NOT NULL DEFAULT 0,
`add_php_router_parse` TINYINT(1) NOT NULL DEFAULT 0,
`addcalculation` CHAR NOT NULL DEFAULT '',
`addcalculation` TINYINT(1) NOT NULL DEFAULT 0,
`db_selection` TEXT NOT NULL,
`db_table_main` VARCHAR(255) NOT NULL DEFAULT '',
`filter` TEXT NOT NULL,
@ -1528,7 +1528,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_component_updates` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`joomla_component` INT(11) NOT NULL DEFAULT 0,
`version_update` TEXT NOT NULL,
`version_update` MEDIUMTEXT NOT NULL,
`params` TEXT NULL,
`published` TINYINT(3) NOT NULL DEFAULT 1,
`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
@ -1908,7 +1908,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module_updates` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`joomla_module` INT(11) NOT NULL DEFAULT 0,
`version_update` TEXT NOT NULL,
`version_update` MEDIUMTEXT NOT NULL,
`params` TEXT NULL,
`published` TINYINT(3) NOT NULL DEFAULT 1,
`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
@ -1991,7 +1991,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_plugin_updates` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`asset_id` INT(10) unsigned NOT NULL DEFAULT 0 COMMENT 'FK to the #__assets table.',
`joomla_plugin` INT(11) NOT NULL DEFAULT 0,
`version_update` TEXT NOT NULL,
`version_update` MEDIUMTEXT NOT NULL,
`params` TEXT NULL,
`published` TINYINT(3) NOT NULL DEFAULT 1,
`created_by` INT(10) unsigned NOT NULL DEFAULT 0,
@ -2268,7 +2268,7 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`,
(7, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add CSS (view)', 'NOT NULL', '', 17, '\"<field \\r\\n\\ttype=\\\"radio\\\" \\r\\n\\tname=\\\"add_css_view\\\" \\r\\n\\tlabel=\\\"Add CSS (view)\\\" \\r\\n\\tdescription=\\\"\\\" \\r\\n\\tclass=\\\"btn-group btn-group-yesno\\\" \\r\\n\\toption=\\\"1|Yes,0|No\\\" \\r\\n\\tdefault=\\\"0\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 196, '6746d3ba-b120-4918-8bba-2a14260e99c8', '', '', '', '', ''),
(8, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add CSS (views)', 'NOT NULL', '', 17, '\"<field \\r\\n\\ttype=\\\"radio\\\" \\r\\n\\tname=\\\"add_css_views\\\" \\r\\n\\tlabel=\\\"Add CSS (views)\\\" \\r\\n\\tdescription=\\\"\\\" \\r\\n\\tclass=\\\"btn-group btn-group-yesno\\\" \\r\\n\\toption=\\\"1|Yes,0|No\\\" \\r\\n\\tdefault=\\\"0\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 195, 'a2098911-926a-42b6-8498-d8a453c34d93', '', '', '', '', ''),
(9, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'Add Fields (for views)', 'NOT NULL', '', 35, '\"<field\\n\\ttype=\\\"subform\\\"\\n\\tname=\\\"addfields\\\"\\n\\tlabel=\\\"Fields\\\"\\n\\tlayout=\\\"repeatablejcb\\\"\\n\\tmultiple=\\\"true\\\"\\n\\tfields=\\\"143,38,223,166,161,165,164,162,163,1829,24,222,700\\\"\\n\\tdescription=\\\"Setup fields for this view.\\\"\\n\\tdefault=\\\"\\\"\\n\\ticon=\\\"list\\\"\\n\\tmin=\\\"1\\\"\\n\\/>\"', 1, '2015-05-09 22:50:20', '2020-05-28 18:58:31', 9, '', 194, '15e1f13d-25db-46a4-ae7c-fb616140338e', '', '', '', '', ''),
(10, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Add Icon', 'NOT NULL', '', 12, '\"<field \\r\\n\\ttype=\\\"media\\\" \\r\\n\\tname=\\\"icon_add\\\" \\r\\n\\tlabel=\\\"Add Icon\\\" \\r\\n\\tdescription=\\\"Must be 128px x 128px and a png format..\\\" \\r\\n\\tdirectory=\\\"\\\" \\r\\n\\/>\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 193, '92ff3e2c-081b-4b84-a10c-e1a9f3245063', '', '', '', '', ''),
(10, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Add Icon', 'NOT NULL', '', 12, '\"<field\\n\\ttype=\\\"media\\\"\\n\\tname=\\\"icon_add\\\"\\n\\tlabel=\\\"Add Icon\\\"\\n\\tdescription=\\\"Must be 128px x 128px and a png format..\\\"\\n\\tdirectory=\\\"\\\"\\n\\/>\"', 1, '2015-04-29 14:00:56', '2024-04-22 12:31:19', 2, '', 193, '92ff3e2c-081b-4b84-a10c-e1a9f3245063', '', '', '', '', ''),
(11, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Javascript (view-file)', 'NOT NULL', '', 17, '\"<field \\r\\n\\ttype=\\\"radio\\\" \\r\\n\\tname=\\\"add_javascript_view_file\\\" \\r\\n\\tlabel=\\\"Add JavaScript (view-file)\\\" \\r\\n\\tdescription=\\\"\\\" \\r\\n\\tclass=\\\"btn-group btn-group-yesno\\\" \\r\\n\\toption=\\\"1|Yes,0|No\\\" \\r\\n\\tdefault=\\\"0\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 192, '42991cef-d988-4ad9-b3d2-f29d9809f0b3', '', '', '', '', ''),
(12, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Javascript (views-file)', 'NOT NULL', '', 17, '\"<field \\r\\n\\ttype=\\\"radio\\\" \\r\\n\\tname=\\\"add_javascript_views_file\\\" \\r\\n\\tlabel=\\\"Add JavaScript (views-file)\\\" \\r\\n\\tdescription=\\\"\\\" \\r\\n\\tclass=\\\"btn-group btn-group-yesno\\\" \\r\\n\\toption=\\\"1|Yes,0|No\\\" \\r\\n\\tdefault=\\\"0\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-05-11 12:36:14', '2015-08-25 21:15:22', 1, '', 191, 'e19c4fa4-804f-488b-90d7-1ea827bba52e', '', '', '', '', ''),
(13, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add MySql - (Install)', 'NOT NULL', '', 17, '\"<field\\n\\ttype=\\\"radio\\\"\\n\\tname=\\\"add_sql\\\"\\n\\tlabel=\\\"Add MySQL - (Install)\\\"\\n\\tdescription=\\\"\\\"\\n\\tclass=\\\"btn-group btn-group-yesno\\\"\\n\\toption=\\\"1|Yes,0|No\\\"\\n\\tdefault=\\\"0\\\"\\n\\trequired=\\\"true\\\"\\n\\/>\"', 1, '2015-05-11 12:36:14', '2018-05-11 03:28:51', 3, '', 190, '7c652c71-e00e-45ff-8acb-e1bc0344e4c0', '', '', '', '', ''),
@ -2301,10 +2301,10 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`,
(40, '', '', '', '', '', '', '', '', 11, '', 'CHAR', '', '', '', 'Background', 'NOT NULL', '', 5, '\"<field type=\\\"color\\\" name=\\\"background\\\" default=\\\"#FFFFFF\\\" label=\\\"Background\\\" description=\\\"Select the background color here.\\\" \\/>\"', 1, '2015-03-30 11:33:34', '2015-08-25 21:15:22', 1, '', 163, '89d225cd-00c0-4540-a714-056b04f6cf93', '', '', '', '', ''),
(41, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Banner', 'NOT NULL', '', 12, '\"<field \\r\\n\\ttype=\\\"media\\\" \\r\\n\\tname=\\\"banner\\\" \\r\\n\\tlabel=\\\"Banner\\\" \\r\\n\\tdescription=\\\"\\\" \\r\\n\\tdirectory=\\\"\\\"\\r\\n\\/>\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 162, '744b4ffc-961c-4e62-adff-495256479798', '', '', '', '', ''),
(42, '', '', '', '', '', '', '', '', 11, '', 'INT', '', '', '', 'Book', 'NOT NULL', '', 6, '\"<field\\n\\ttype=\\\"books\\\"\\n\\tname=\\\"book\\\"\\n\\tlabel=\\\"Select a Book\\\"\\n\\tclass=\\\"list_class\\\"\\n\\trequired=\\\"true\\\"\\n\\textends=\\\"list\\\"\\n\\tbutton=\\\"true\\\"\\n\\ttable=\\\"#__###component###_book\\\"\\n\\tcomponent=\\\"com_###component###\\\"\\n\\tview=\\\"book\\\"\\n\\tviews=\\\"books\\\"\\n\\tvalue_field=\\\"name\\\"\\n\\tkey_field=\\\"id\\\"\\n\\ttype_php_1=\\\"__.o0=base64=Oo.__JGRiID0gSkZhY3Rvcnk6OmdldERCTygpOw0KJHF1ZXJ5ID0gJGRiLT5nZXRRdWVyeSh0cnVlKTsNCiRxdWVyeS0+c2VsZWN0KCRkYi0+cXVvdGVOYW1lKGFycmF5KCdhLiMjI0lEIyMjJywnYS4jIyNURVhUIyMjJyksYXJyYXkoJyMjI0lEIyMjJywnIyMjQ09ERV9URVhUIyMjJykpKTsNCiRxdWVyeS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnIyMjVEFCTEUjIyMnLCAnYScpKTsNCiRxdWVyeS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2EucHVibGlzaGVkJykgLiAnID0gMScpOw0KJHF1ZXJ5LT5vcmRlcignYS4jIyNURVhUIyMjIEFTQycpOw0KJGRiLT5zZXRRdWVyeSgoc3RyaW5nKSRxdWVyeSk7DQokaXRlbXMgPSAkZGItPmxvYWRPYmplY3RMaXN0KCk7DQokb3B0aW9ucyA9IGFycmF5KCk7DQppZiAoJGl0ZW1zKQ0Kew0KXHQkb3B0aW9uc1tdID0gSkh0bWw6Ol8oJ3NlbGVjdC5vcHRpb24nLCAnJywgJ1NlbGVjdCBhbiBvcHRpb24nKTsNClx0Zm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pDQpcdHsNClx0XHQkb3B0aW9uc1tdID0gSkh0bWw6Ol8oJ3NlbGVjdC5vcHRpb24nLCAkaXRlbS0+IyMjSUQjIyMsICRpdGVtLT4jIyNDT0RFX1RFWFQjIyMpOw0KXHR9DQp9DQoNCnJldHVybiAkb3B0aW9uczs=\\\"\\n\\/>\"', 1, '2015-04-24 07:50:46', '2018-09-21 00:00:44', 9, '', 161, 'e2bbda81-a6c1-41be-907b-24b9d5b97492', '', '', '', '', ''),
(43, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Category Icon', 'NOT NULL', '', 12, '\"<field \\r\\n\\ttype=\\\"media\\\" \\r\\n\\tname=\\\"icon_category\\\" \\r\\n\\tlabel=\\\"Category Icon\\\" \\r\\n\\tdescription=\\\"Must be 128px x 128px and a png format..\\\" \\r\\n\\tdirectory=\\\"\\\" \\r\\n\\/>\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 160, '0d2bdd49-7559-4cc1-a25b-56aacb830760', '', '', '', '', ''),
(43, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Category Icon', 'NOT NULL', '', 12, '\"<field\\n\\ttype=\\\"media\\\"\\n\\tname=\\\"icon_category\\\"\\n\\tlabel=\\\"Category Icon\\\"\\n\\tdescription=\\\"Must be 128px x 128px and a png format..\\\"\\n\\tdirectory=\\\"\\\"\\n\\/>\"', 1, '2015-04-29 14:00:56', '2024-04-22 12:31:09', 2, '', 160, '0d2bdd49-7559-4cc1-a25b-56aacb830760', '', '', '', '', ''),
(44, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Company Name (name)', 'NOT NULL', '', 24, '\"<field\\r\\n\\ttype=\\\"text\\\" \\r\\n\\tname=\\\"name\\\" \\r\\n\\tlabel=\\\"Company Name\\\" \\r\\n\\tsize=\\\"40\\\" \\r\\n\\tmaxlength=\\\"150\\\" \\r\\n\\tdescription=\\\"Enter Company Name Here\\\" \\r\\n\\tclass=\\\"text_area\\\" \\r\\n\\treadonly=\\\"false\\\" \\r\\n\\tdisabled=\\\"false\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\tfilter=\\\"STRING\\\" \\r\\n\\tmessage=\\\"Error! Please add company name here.\\\" \\r\\n\\thint=\\\"Company Name Here\\\" \\r\\n\\/>\"', 1, '2015-03-19 17:30:59', '2015-08-25 21:15:22', 4, '', 159, 'bb5ba507-fd8d-4a99-950c-a541c3fbeb60', '', '', '', '', ''),
(45, '', '', '', '', '', '', '', '', 7, '', 'INT', '', '', '', 'Completion Point', 'NOT NULL', '', 10, '\"<field \\r\\n\\ttype=\\\"integer\\\" \\r\\n\\tname=\\\"completion_point\\\" \\r\\n\\tlabel=\\\"Completion Point\\\" \\r\\n\\tdefault=\\\"\\\" \\r\\n\\tdescription=\\\"Set the completion point\\\" \\r\\n\\tclass=\\\"text_area\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\tfirst=\\\"0\\\" \\r\\n\\tlast=\\\"20\\\" \\r\\n\\tstep=\\\"1\\\" \\r\\n\\tfilter=\\\"INT\\\"\\r\\n\\/>\"', 1, '2015-04-28 10:52:33', '2015-08-25 21:15:22', 1, '', 158, '863482f3-98b7-4db2-a039-c9704a332e9a', '', '', '', '', ''),
(46, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Component Image', 'NOT NULL', '', 12, '\"<field \\r\\n\\ttype=\\\"media\\\" \\r\\n\\tname=\\\"image\\\" \\r\\n\\tlabel=\\\"Component Image\\\" \\r\\n\\tdescription=\\\"The component image (product box) for the dashboard and install page, must be 300px X 300px.\\\"\\r\\n\\tdirectory=\\\"\\\"\\r\\n\\/>\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 157, '4003ab3f-70d8-4092-a11b-b23215844ffa', '', '', '', '', ''),
(46, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Component Image', 'NOT NULL', '', 12, '\"<field\\n\\ttype=\\\"media\\\"\\n\\tname=\\\"image\\\"\\n\\tlabel=\\\"Component Image\\\"\\n\\tdescription=\\\"The component image (product box) for the dashboard and install page, must be 300px X 300px.\\\"\\n\\tdirectory=\\\"\\\"\\n\\/>\"', 1, '2015-04-29 14:00:56', '2024-04-22 12:30:50', 4, '', 157, '4003ab3f-70d8-4092-a11b-b23215844ffa', '', '', '', '', ''),
(47, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Component Name', 'NOT NULL', '', 24, '\"<field\\r\\n\\ttype=\\\"text\\\" \\r\\n\\tname=\\\"name\\\" \\r\\n\\tlabel=\\\"Name\\\" \\r\\n\\tsize=\\\"40\\\" \\r\\n\\tmaxlength=\\\"150\\\" \\r\\n\\tdescription=\\\"Enter Name Here\\\" \\r\\n\\tclass=\\\"text_area\\\" \\r\\n\\treadonly=\\\"false\\\" \\r\\n\\tdisabled=\\\"false\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\tfilter=\\\"STRING\\\" \\r\\n\\tmessage=\\\"Error! Please add component name here.\\\" \\r\\n\\thint=\\\"Component Name\\\" \\r\\n\\/>\"', 1, '2015-03-19 17:30:59', '2018-03-10 23:46:30', 3, '', 156, 'b607dfed-bb4a-463d-9e14-f1264c67279b', '', '', '', '', ''),
(48, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Component Version', 'NOT NULL', '', 24, '\"<field \\r\\n\\ttype=\\\"text\\\" \\r\\n\\tname=\\\"component_version\\\" \\r\\n\\tlabel=\\\"Version\\\" \\r\\n\\tsize=\\\"40\\\" \\r\\n\\tmaxlength=\\\"50\\\" \\r\\n\\tdefault=\\\"1.0.0\\\" \\r\\n\\tdescription=\\\"Add Version Number Here\\\" \\r\\n\\tclass=\\\"text_area\\\"\\r\\n\\trequired=\\\"true\\\" \\r\\n\\tfilter=\\\"CMD\\\" \\r\\n\\tmessage=\\\"Error! Please add version here.\\\" \\r\\n\\thint=\\\"1.0.0\\\" \\r\\n\\/>\"', 1, '2015-05-06 08:44:48', '2015-08-25 21:15:22', 1, '', 155, 'dde96c4d-1528-402a-bdea-96ec481a11ef', '', '', '', '', ''),
(49, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Content', 'NOT NULL', '', 8, '\"<field \\r\\n\\ttype=\\\"editor\\\" \\r\\n\\tname=\\\"content\\\" \\r\\n\\tlabel=\\\"Content\\\" \\r\\n\\twidth=\\\"100%\\\" \\r\\n\\theight=\\\"500\\\" \\r\\n\\tfilter=\\\"safehtml\\\" \\r\\n\\trequired=\\\"true\\\"\\r\\n\\/>\"', 1, '2015-04-24 11:30:17', '2015-08-25 21:15:22', 1, '', 154, '7c42bee8-73fb-4483-960a-53de4625eda9', '', '', '', '', ''),
@ -2406,7 +2406,7 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`,
(154, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Has Metadata', 'NOT NULL', '', 3, '\"<field\\n\\ttype=\\\"checkbox\\\"\\n\\tname=\\\"metadata\\\"\\n\\tlabel=\\\"Has Metadata\\\"\\n\\tvalue=\\\"1\\\"\\n\\tdefault=\\\"1\\\"\\n\\tdescription=\\\"Select if this view should have metadata.\\\"\\n\\tclass=\\\"inputbox\\\"\\n\\/>\"', 1, '2015-05-11 23:14:53', '2019-06-11 12:20:23', 5, '', 49, 'f2028e1b-b4c0-4f73-85a6-a580d1395618', '', '', '', '', ''),
(155, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Form - Hint', 'NOT NULL', '', 24, '\"<field \\r\\n\\ttype=\\\"text\\\" \\r\\n\\tname=\\\"hint\\\" \\r\\n\\tlabel=\\\"Hint\\\" \\r\\n\\tsize=\\\"60\\\" \\r\\n\\tmaxlength=\\\"150\\\"\\r\\n\\tdescription=\\\"Hint to show in text box\\\" \\r\\n\\tclass=\\\"text_area\\\"\\r\\n\\tfilter=\\\"HTML\\\" \\r\\n\\tmessage=\\\"Error! Please add hint to show in text box.\\\" \\r\\n\\thint=\\\"Add Hint Here\\\" \\r\\n\\/>\"', 1, '2015-05-02 09:31:55', '2015-12-04 03:38:46', 2, '', 48, 'ce6912c7-eb78-4f06-9274-97e599b83d88', '', '', '', '', ''),
(156, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'Home Phone', 'NOT NULL', '', 23, '\"<field\\n\\ttype=\\\"text\\\"\\n\\tname=\\\"home_phone\\\"\\n\\tlabel=\\\"Home Phone\\\"\\n\\tsize=\\\"10\\\"\\n\\tmaxlength=\\\"50\\\"\\n\\tdefault=\\\"\\\"\\n\\tdescription=\\\"Enter Home Phone Number\\\"\\n\\tclass=\\\"text_area\\\"\\n\\tfilter=\\\"tel\\\"\\n\\tvalidated=\\\"tel\\\"\\n\\tmessage=\\\"Error! Please add home phone number here.\\\"\\n\\thint=\\\"Home Phone Here\\\"\\n\\/>\"', 1, '2015-04-07 22:12:58', '2019-09-12 19:44:58', 3, '', 47, '38d7bc98-ccbf-48ee-a0c3-259e51652206', '', '', '', '', ''),
(157, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Icon', 'NOT NULL', '', 12, '\"<field \\r\\n\\ttype=\\\"media\\\" \\r\\n\\tname=\\\"icon\\\" \\r\\n\\tlabel=\\\"Icon\\\" \\r\\n\\tdescription=\\\"Must be 128px x 128px and a png format.\\\" \\r\\n\\tdirectory=\\\"\\\" \\r\\n\\/>\"', 1, '2015-04-29 14:00:56', '2015-08-25 21:15:22', 1, '', 46, '3b731d0a-3205-4409-a9fd-e74d1db25055', '', '', '', '', ''),
(157, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Icon', 'NOT NULL', '', 12, '\"<field\\n\\ttype=\\\"media\\\"\\n\\tname=\\\"icon\\\"\\n\\tlabel=\\\"Icon\\\"\\n\\tdescription=\\\"Must be 128px x 128px and a png format.\\\"\\n\\tdirectory=\\\"\\\"\\n\\/>\"', 1, '2015-04-29 14:00:56', '2024-04-22 12:31:42', 2, '', 46, '3b731d0a-3205-4409-a9fd-e74d1db25055', '', '', '', '', ''),
(158, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Image', 'NOT NULL', '', 12, '\"<field\\n\\ttype=\\\"media\\\"\\n\\tname=\\\"image\\\"\\n\\tlabel=\\\"Image\\\"\\n\\/>\"', 1, '2015-04-29 14:00:56', '2020-06-07 02:17:46', 2, '', 45, '0d6970af-b361-4f65-84f6-0eb0c5f09bad', '', '', '', '', ''),
(159, '', '', '', '', '', '', '', '', 11, '', 'INT', 2, '', '', 'Implementation', 'NOT NULL', '', 11, '\"<field \\r\\n\\ttype=\\\"list\\\"\\r\\n\\tname=\\\"implementation\\\" \\r\\n\\tlabel=\\\"Implementation\\\" \\r\\n\\tdescription=\\\"Select applicable implementation.\\\" \\r\\n\\tclass=\\\"list_class\\\" \\r\\n\\tmultiple=\\\"false\\\" \\r\\n\\tfilter=\\\"INT\\\" \\r\\n\\trequired=\\\"\\\" \\r\\n\\toption=\\\"1|In Relation to each Record,2|In Relation to the Whole View,3|Both\\\" \\r\\n\\tdefault=\\\"1\\\" \\r\\n\\/>\"', 1, '2015-05-10 21:26:50', '2017-10-09 19:03:21', 3, '', 44, 'bc5bed02-8fa3-462e-9c54-c39886fcdfe1', '', '', '', '', ''),
(160, '', '', '', '', '', '', '', '', 64, '', 'CHAR', 2, '', '', 'Indexes Type', 'NOT NULL', '', 11, '\"<field\\n\\ttype=\\\"list\\\"\\n\\tname=\\\"indexes\\\"\\n\\tlabel=\\\"Indexes Type\\\"\\n\\tclass=\\\"btn-group\\\"\\n\\tmultiple=\\\"false\\\"\\n\\tfilter=\\\"INT\\\"\\n\\trequired=\\\"true\\\"\\n\\toption=\\\"1|UNIQUE KEY,2|KEY,0|None\\\"\\n\\tdefault=\\\"0\\\"\\n\\/>\"', 1, '2015-05-10 21:26:50', '2020-05-25 00:22:37', 2, '', 43, '63ff758d-a866-4d37-bc2a-a7432bd9bb44', '', '', '', '', ''),
@ -2749,7 +2749,7 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`,
(528, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (y)', 'NOT NULL', '', 11, '\"<field \\r\\n\\ttype=\\\"list\\\" \\r\\n\\tname=\\\"type_y\\\" \\r\\n\\tlabel=\\\"Type (y)\\\" \\r\\n\\tdescription=\\\"\\\" \\r\\n\\tclass=\\\"list_class\\\" \\r\\n\\tmultiple=\\\"false\\\" \\r\\n\\tfilter=\\\"INT\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\toption=\\\"2|Join LEFT,3|Join LEFT OUTER,4|Join INNER,5|Join RIGHT,6|Join RIGHT OUTER\\\" \\r\\n\\tdefault=\\\"2\\\" \\r\\n\\/>\"', -2, '2015-05-22 13:32:00', '2015-05-22 16:08:45', 1, '', 417, 'ee8ef284-028c-42de-b74a-ce74dc5fb602', '', '', '', '', ''),
(529, '', '', '', '', '', '', '', '', 1, '', 'INT', '', '', '', 'Table Type (z)', 'NOT NULL', '', 11, '\"<field \\r\\n\\ttype=\\\"list\\\" \\r\\n\\tname=\\\"type_z\\\" \\r\\n\\tlabel=\\\"Type (z)\\\" \\r\\n\\tdescription=\\\"\\\" \\r\\n\\tclass=\\\"list_class\\\" \\r\\n\\tmultiple=\\\"false\\\" \\r\\n\\tfilter=\\\"INT\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\toption=\\\"2|Join LEFT,3|Join LEFT OUTER,4|Join INNER,5|Join RIGHT,6|Join RIGHT OUTER\\\" \\r\\n\\tdefault=\\\"2\\\" \\r\\n\\/>\"', -2, '2015-05-22 13:32:09', '2015-05-22 16:08:50', 1, '', 446, '5cc1efdd-6674-48f3-bcd1-6af54d8566df', '', '', '', '', ''),
(530, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (get Calculation)', 'NOT NULL', 2, 8, '\"<field\\n\\ttype=\\\"editor\\\"\\n\\tname=\\\"php_calculation\\\"\\n\\tlabel=\\\"get Calculation (Place all calculated\\/new values in variables with the following naming convention $cal__xxxxxxx)\\\"\\n\\tdescription=\\\"Add PHP to do the calculation on any field. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-05-22 14:56:07', '2019-07-08 14:14:17', 4, '', 387, '9b6768ae-8d6a-461e-9b41-61d49431a401', '', '', '', '', ''),
(531, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Add Calculation', 'NOT NULL', '', 17, '\"<field \\r\\n\\ttype=\\\"radio\\\" \\r\\n\\tname=\\\"addcalculation\\\" \\r\\n\\tlabel=\\\"Add Calculation\\\" \\r\\n\\tdescription=\\\"Do you want to add custom calculation to the get method\\\" \\r\\n\\tclass=\\\"btn-group btn-group-yesno\\\" \\r\\n\\toption=\\\"1|Yes,0|No\\\" \\r\\n\\tdefault=\\\"0\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-05-22 15:05:18', '2015-08-25 21:15:22', 1, '', 516, '6e7bb46d-fda5-46b8-b08e-31a2e6884e24', '', '', '', '', ''),
(531, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Add Calculation', 'NOT NULL', '', 17, '\"<field\\n\\ttype=\\\"radio\\\"\\n\\tname=\\\"addcalculation\\\"\\n\\tlabel=\\\"Add Calculation\\\"\\n\\tdescription=\\\"Do you want to add custom calculation to the get method\\\"\\n\\tclass=\\\"btn-group btn-group-yesno\\\"\\n\\toption=\\\"1|Yes,0|No\\\"\\n\\tdefault=\\\"0\\\"\\n\\trequired=\\\"true\\\"\\n\\/>\"', 1, '2015-05-22 15:05:18', '2024-04-22 12:23:02', 2, '', 516, '6e7bb46d-fda5-46b8-b08e-31a2e6884e24', '', '', '', '', ''),
(532, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'get Custom Name', 'NOT NULL', '', 24, '\"<field \\r\\n\\ttype=\\\"text\\\" \\r\\n\\tname=\\\"getcustom\\\" \\r\\n\\tlabel=\\\"Custom Name\\\" \\r\\n\\tsize=\\\"40\\\" \\r\\n\\tmaxlength=\\\"150\\\" \\r\\n\\tdescription=\\\"Set the Method name for this dynamic get.\\\" \\r\\n\\tclass=\\\"text_area\\\" \\r\\n\\treadonly=\\\"false\\\" \\r\\n\\tdisabled=\\\"false\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\tfilter=\\\"WORD\\\" \\r\\n\\tmessage=\\\"Error! Please add method name here.\\\" \\r\\n\\thint=\\\"getMethodName\\\" \\r\\n\\/>\"', 1, '2015-05-22 20:00:51', '2015-08-25 21:15:22', 1, '', 517, '6c486f71-abfd-49c7-91e2-165f594fa658', '', '', '', '', ''),
(533, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Storing Type', 'NOT NULL', '', 17, '\"<field \\r\\n\\ttype=\\\"radio\\\" \\r\\n\\tname=\\\"form_type\\\" \\r\\n\\tlabel=\\\"Storing Type\\\" \\r\\n\\tdescription=\\\"Set the storing type for this form.\\\" \\r\\n\\tclass=\\\"btn-group btn-group-yesno\\\" \\r\\n\\toption=\\\"1|Per\\/Value,2|Per\\/Submission\\\" \\r\\n\\tdefault=\\\"2\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\/>\"', 1, '2015-05-23 09:32:42', '2015-09-10 12:04:00', 3, '', 415, 'ec5cdd76-9272-4659-a38d-2bcead2253b9', '', '', '', '', ''),
(534, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Filter Type', 'NOT NULL', '', 11, '\"<field \\r\\n\\ttype=\\\"list\\\" \\r\\n\\tname=\\\"filter_type\\\" \\r\\n\\tlabel=\\\"Filter Type\\\" \\r\\n\\tdescription=\\\"The type of filter you want to setup.\\\" \\r\\n\\tclass=\\\"list_class\\\" \\r\\n\\tmultiple=\\\"false\\\" \\r\\n\\tfilter=\\\"INT\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\toption=\\\"1|ID,2|User,3|Access Level,4|User Groups,5|Categories,6|Tags,7|Date,8|FunctionVar,9|Array Value,10|Repeatable Value,11|Other\\\" \\r\\n\\tdefault=\\\"1\\\" \\r\\n\\/>\"', 1, '2015-05-23 11:22:17', '2015-09-13 03:09:50', 5, '', 518, 'e95e58dd-5b30-4b49-ac87-7960f6a0a740', '', '', '', '', ''),
@ -3240,7 +3240,7 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`,
(1020, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (script - after delete)', 'NOT NULL', 2, 8, '\"<field\\n\\ttype=\\\"editor\\\"\\n\\tname=\\\"php_after_delete\\\"\\n\\tlabel=\\\"PHP delete Method after<br \\/><small>Target (array) $pks is an array of record primary keys.<\\/small>\\\"\\n\\tdescription=\\\"Add PHP Here that should run in the delete Method after items were deleted. Do not add the php tags.\\\"\\n\\twidth=\\\"100%\\\"\\n\\theight=\\\"450px\\\"\\n\\tcols=\\\"15\\\"\\n\\trows=\\\"30\\\"\\n\\tbuttons=\\\"no\\\"\\n\\tsyntax=\\\"php\\\"\\n\\teditor=\\\"codemirror|none\\\"\\n\\tfilter=\\\"raw\\\"\\n\\tvalidate=\\\"code\\\"\\n\\/>\"', 1, '2015-12-09 15:10:40', '2019-07-08 14:17:32', 3, '', 119, 'f23fc722-e0e2-422f-b0f5-ac17da162a63', '', '', '', '', ''),
(1021, '', '', '', '', '', '', '', '', 64, '', 'VARCHAR', '', '', '', 'SQL Update Version', 'NOT NULL', '', 24, '\"<field \\r\\n\\ttype=\\\"text\\\" \\r\\n\\tname=\\\"version\\\" \\r\\n\\tlabel=\\\"SQL Update Version\\\" \\r\\n\\tsize=\\\"10\\\" \\r\\n\\tmaxlength=\\\"50\\\" \\r\\n\\tdefault=\\\"\\\" \\r\\n\\tdescription=\\\"1.0.0\\\" \\r\\n\\tclass=\\\"text_area\\\" \\r\\n\\treadonly=\\\"false\\\" \\r\\n\\tdisabled=\\\"false\\\" \\r\\n\\trequired=\\\"false\\\" \\r\\n\\tfilter=\\\"STRING\\\" \\r\\n\\tmessage=\\\"Error! Please add some text here.\\\" \\r\\n\\thint=\\\"1.0.0\\\" \\r\\n\\/>\"', 1, '2015-12-17 17:33:44', '2017-10-26 02:22:16', 3, '', 653, '537a2ca8-56ed-42ad-8f98-41524378f79e', '', '', '', '', ''),
(1022, 1, '', '', '', 'Lm15c3FsX3VwZGF0ZSB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDM5MnB4OyB9', '', '', '', '', '', 'TEXT', '', '', '', 'MySQL (version update)', 'NOT NULL', '', 25, '\"<field \\r\\n\\ttype=\\\"textarea\\\" \\r\\n\\tname=\\\"mysql\\\" \\r\\n\\tlabel=\\\"MySQL\\\" \\r\\n\\trows=\\\"30\\\" \\r\\n\\tcols=\\\"15\\\" \\r\\n\\tdefault=\\\"\\\" \\r\\n\\tdescription=\\\"Update Dump\\\" \\r\\n\\tclass=\\\"text_area mysql_update\\\" \\r\\n\\tfilter=\\\"raw\\\" \\r\\n\\thint=\\\"\\/\\/ MySQL for update or blank for none\\\"\\r\\n\\/>\"', 1, '2015-12-17 17:36:45', '2017-10-26 02:17:40', 9, '', 653, '98d5f71a-5236-4c20-845f-26d89e0c6f68', '', '', '', '', ''),
(1023, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Version Update (controler)', 'NOT NULL', '', 35, '\"<field\\n\\ttype=\\\"subform\\\"\\n\\tname=\\\"version_update\\\"\\n\\tlabel=\\\"Version Updates\\\"\\n\\tlayout=\\\"repeatablejcb\\\"\\n\\tmultiple=\\\"true\\\"\\n\\tfields=\\\"1021,1022,1024\\\"\\n\\tdescription=\\\"Add Version Updates Here!\\\"\\n\\tdefault=\\\"\\\"\\n\\ticon=\\\"list\\\"\\n\\/>\"', 1, '2015-12-17 17:39:17', '2021-12-16 06:54:40', 7, '', 653, '7d49445c-4e95-4fd5-a2a4-a20bbcd4d812', '', '', '', '', ''),
(1023, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'Version Update (controler)', 'NOT NULL', '', 35, '\"<field\\n\\ttype=\\\"subform\\\"\\n\\tname=\\\"version_update\\\"\\n\\tlabel=\\\"Version Updates\\\"\\n\\tlayout=\\\"repeatablejcb\\\"\\n\\tmultiple=\\\"true\\\"\\n\\tfields=\\\"1021,1022,1024\\\"\\n\\tdescription=\\\"Add Version Updates Here!\\\"\\n\\tdefault=\\\"\\\"\\n\\ticon=\\\"list\\\"\\n\\/>\"', 1, '2015-12-17 17:39:17', '2024-04-24 19:05:15', 8, '', 653, '7d49445c-4e95-4fd5-a2a4-a20bbcd4d812', '', '', '', '', ''),
(1024, 1, '', '', '', 'LnZlcnNpb25fdXJsIHsgbWluLXdpZHRoOiAxMDAlOyB9', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Version URL', 'NOT NULL', '', 27, '\"<field \\r\\n\\ttype=\\\"url\\\" \\r\\n\\tname=\\\"url\\\" \\r\\n\\tlabel=\\\"Version URL\\\" \\r\\n\\tsize=\\\"60\\\" \\r\\n\\tmaxlength=\\\"150\\\" \\r\\n\\tdefault=\\\"\\\" \\r\\n\\tdescription=\\\"Enter Download Link\\\" \\r\\n\\tclass=\\\"text_area version_url\\\" \\r\\n\\treadonly=\\\"\\\" \\r\\n\\tdisabled=\\\"\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\tfilter=\\\"raw\\\" \\r\\n\\tvalidated=\\\"url\\\" \\r\\n\\tmessage=\\\"Error! Please add url here.\\\" \\r\\n\\thint=\\\"http:\\/\\/www.example.com\\/file.zip\\\" \\r\\n\\/>\"', 1, '2015-12-22 09:08:12', '2017-10-26 02:25:07', 5, '', 378, '09b62f71-d765-4f48-806d-6dd7dc5ceaaf', '', '', '', '', ''),
(1025, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Update Server URL', 'NOT NULL', '', 27, '\"<field\\n\\ttype=\\\"url\\\"\\n\\tname=\\\"update_server_url\\\"\\n\\tlabel=\\\"Update Server\\\"\\n\\tsize=\\\"60\\\"\\n\\tmaxlength=\\\"150\\\"\\n\\tdescription=\\\"Enter Update Server URL\\\"\\n\\tclass=\\\"text_area span12\\\"\\n\\tfilter=\\\"url\\\"\\n\\tvalidated=\\\"url\\\"\\n\\tmessage=\\\"Error! Please add url here.\\\"\\n\\thint=\\\"http:\\/\\/www.example.com\\/update\\/extension_name.xml\\\"\\n\\tshowon=\\\"add_update_server:1\\\"\\n\\/>\"', 1, '2015-12-22 09:10:04', '2024-04-19 08:27:36', 5, '', 378, 'e6c263b1-da39-4a73-8585-637dc3a5b8eb', '', '', '', '', ''),
(1026, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Add Update Server', 'NOT NULL', '', 17, '\"<field\\n\\ttype=\\\"radio\\\"\\n\\tname=\\\"add_update_server\\\"\\n\\tlabel=\\\"Add Update Server\\\"\\n\\tclass=\\\"btn-group btn-group-yesno\\\"\\n\\toption=\\\"1|Yes,0|No\\\"\\n\\tdefault=\\\"0\\\"\\n\\trequired=\\\"true\\\"\\n\\/>\"', 1, '2015-12-22 19:23:52', '2024-04-19 08:27:16', 2, '', 192, 'db2835aa-b0c3-4c9a-abe6-5b09568fffda', '', '', '', '', ''),
@ -4210,7 +4210,7 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`,
(1990, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'PHP (class methods)', 'NOT NULL', 2, 25, '\"<field \\r\\n\\ttype=\\\"textarea\\\" \\r\\n\\tname=\\\"php\\\" \\r\\n\\tlabel=\\\"PHP <small>(class methods)<\\/small>\\\" \\r\\n\\trows=\\\"30\\\" \\r\\n\\tcols=\\\"15\\\"\\r\\n\\tdescription=\\\"Add your PHP here! [Do not add the php tags]\\\" \\r\\n\\tclass=\\\"text_area span12\\\" \\r\\n\\tfilter=\\\"raw\\\" \\r\\n\\thint=\\\"\\/\\/ PHP class methods and fields can be added here\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\/>\"', 1, '2018-03-24 20:11:20', '2015-10-17 18:17:23', 1, '', 115, '24ed6b0e-c86c-4131-91a7-5205ac931ad5', '', '', '', '', ''),
(1991, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'Name (validation rule)', 'NOT NULL', '', 24, '\"<field name=\\\"name\\\"\\r\\n\\t\\t\\t\\tlabel=\\\"Name\\\"\\r\\n\\t\\t\\t\\tdescription=\\\"The name for this validation rule\\\"\\r\\n\\t\\t\\t\\ttype=\\\"text\\\"\\r\\n\\t\\t\\t\\tclass=\\\"input-large-text\\\"\\r\\n\\t\\t\\t\\tsize=\\\"40\\\"\\r\\n\\t\\t\\t\\trequired=\\\"true\\\"\\/>\"', 1, '2018-03-25 17:14:04', '0000-00-00 00:00:00', 1, '', 756, '9a98c57f-bf01-49b0-91e3-e72e1b9551f1', '', '', '', '', ''),
(1992, '', '', '', '', '', '', '', '', 64, '', 'CHAR', '', '', '', 'Default Validation Rules', 'NOT NULL', '', 6, '\"<field\\n\\ttype=\\\"existingvalidationrules\\\"\\n\\tname=\\\"inherit\\\"\\n\\tlabel=\\\"Existing Validation Rules\\\"\\n\\tdescription=\\\"Select an existing validation rule that you would like to adapt.\\\"\\n\\tmessage=\\\"\\\"\\n\\tclass=\\\"list_class\\\"\\n\\tlayout=\\\"joomla.form.field.list-fancy-select\\\"\\n\\tmultiple=\\\"false\\\"\\n\\tdefault=\\\"0\\\"\\n\\trequired=\\\"false\\\"\\n\\textends=\\\"list\\\"\\n\\tbutton=\\\"false\\\"\\n\\ttable=\\\"#__###component###_validation_rule\\\"\\n\\tcomponent=\\\"com_###component###\\\"\\n\\tview=\\\"validation_rule\\\"\\n\\tviews=\\\"validation_rules\\\"\\n\\tvalue_field=\\\"name\\\"\\n\\tkey_field=\\\"id\\\"\\n\\tprime_php=\\\"1\\\"\\n\\ttype_php_1=\\\"__.o0=base64=Oo.__Ly8gZ2V0IHRoZSBleGlzdGluZyB2YWxpZGF0aW9uIHJ1bGVzIG5hbWVzDQoJCWlmICgkaXRlbXMgPSAjIyNDb21wb25lbnQjIyNIZWxwZXI6OmdldEV4aXN0aW5nVmFsaWRhdGlvblJ1bGVOYW1lcygpKQ0KCQl7DQoJCQkvLyBsb2FkIHRoZSBpdGVtcw0KCQkJJG9wdGlvbnMgPSBhcnJheShKSHRtbDo6Xygnc2VsZWN0Lm9wdGlvbicsICcnLCAnU2VsZWN0IGFuIG9wdGlvbicpKTsNCgkJCWZvcmVhY2goJGl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCSRvcHRpb25zW10gPSBKSHRtbDo6Xygnc2VsZWN0Lm9wdGlvbicsICRpdGVtLCAjIyNDb21wb25lbnQjIyNIZWxwZXI6OnNhZmVTdHJpbmcoJGl0ZW0sICdXdycpKTsNCgkJCX0NCgkJCXJldHVybiAkb3B0aW9uczsNCgkJfQ0KCQlyZXR1cm4gYXJyYXkoSkh0bWw6Ol8oJ3NlbGVjdC5vcHRpb24nLCAnJywgSlRleHQ6Ol8oJ05vIHZhbGlkYXRpb24gcnVsZXMgZm91bmQuJykpKTs=\\\"\\n\\/>\"', 1, '2018-03-25 17:42:40', '2024-03-26 13:23:27', 9, '', 832, '419fa655-e64a-4e39-b124-29eeb3198bc7', '', '', '', '', ''),
(1993, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Alias Builder Type', 'NOT NULL', '', 17, '\"<field \\r\\n\\ttype=\\\"radio\\\" \\r\\n\\tname=\\\"alias_builder_type\\\" \\r\\n\\tlabel=\\\"Alias Builder Type\\\" \\r\\n\\tdescription=\\\"How should the alias be build for this view\\\" \\r\\n\\tclass=\\\"btn-group btn-group-yesno\\\" \\r\\n\\toption=\\\"1|Default,2|Custom\\\"\\r\\n\\tdefault=\\\"1\\\"\\r\\n\\/>\"', 1, '2018-03-27 14:29:40', '2018-03-27 15:52:43', 3, '', 833, 'a5043582-b29c-4ede-a712-16de9346abed', '', '', '', '', ''),
(1993, '', '', '', '', '', '', '', '', 1, '', 'TINYINT', '', '', '', 'Alias Builder Type', 'NOT NULL', '', 17, '\"<field\\n\\ttype=\\\"radio\\\"\\n\\tname=\\\"alias_builder_type\\\"\\n\\tlabel=\\\"Alias Builder Type\\\"\\n\\tdescription=\\\"How should the alias be build for this view\\\"\\n\\tclass=\\\"btn-group btn-group-yesno\\\"\\n\\toption=\\\"1|Default,2|Custom\\\"\\n\\tdefault=\\\"1\\\"\\n\\/>\"', 1, '2018-03-27 14:29:40', '2024-04-22 12:22:37', 4, '', 833, 'a5043582-b29c-4ede-a712-16de9346abed', '', '', '', '', ''),
(1994, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Alias Builder (default)', 'NOT NULL', '', 14, '\"<field \\r\\n\\ttype=\\\"note\\\" \\r\\n\\tname=\\\"note_alias_builder_default\\\" \\r\\n\\tlabel=\\\"Default Alias Behaviour\\\" \\r\\n\\tdescription=\\\"The default behaviour uses the title field to build that alias, and if no title field is found uses the date.\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\tshowon=\\\"alias_builder_type:1\\\" \\r\\n\\/>\"', 1, '2018-03-27 14:32:21', '2018-03-27 14:36:23', 2, '', 834, 'fdc68882-5750-4120-9c51-29f1076c0052', '', '', '', '', ''),
(1995, '', '', '', '', '', '', '', '', '', '', 'CHAR', '', '', '', 'Alias Builder (custom)', 'NOT NULL', '', 14, '\"<field \\r\\n\\ttype=\\\"note\\\" \\r\\n\\tname=\\\"note_alias_builder_custom\\\" \\r\\n\\tlabel=\\\"Custom Alias Behaviour\\\" \\r\\n\\tdescription=\\\"The custom behaviour allows you to select what field\\/s must be used to build the alias.\\\" \\r\\n\\theading=\\\"h4\\\" \\r\\n\\tclass=\\\"alert alert-info\\\" \\r\\n\\tshowon=\\\"alias_builder_type:2\\\" \\r\\n\\/>\"', 1, '2018-03-27 14:34:20', '0000-00-00 00:00:00', 1, '', 835, '11a6e497-111f-417c-bd41-21b148f3513b', '', '', '', '', ''),
(1996, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'URL (API)', 'NOT NULL', '', 27, '\"<field \\r\\n\\ttype=\\\"url\\\" \\r\\n\\tname=\\\"url\\\" \\r\\n\\tlabel=\\\"URL\\\" \\r\\n\\tsize=\\\"60\\\" \\r\\n\\tmaxlength=\\\"150\\\" \\r\\n\\tdefault=\\\"\\\" \\r\\n\\tdescription=\\\"Enter api url\\\" \\r\\n\\tclass=\\\"text_area\\\" \\r\\n\\treadonly=\\\"\\\" \\r\\n\\tdisabled=\\\"\\\" \\r\\n\\trequired=\\\"true\\\" \\r\\n\\tfilter=\\\"url\\\" \\r\\n\\tscheme=\\\"http,https\\\"\\r\\n\\tvalidated=\\\"url\\\" \\r\\n\\tmessage=\\\"Error! Please add url here.\\\" \\r\\n\\thint=\\\"http:\\/\\/www.example.com\\/api\\\" \\r\\n\\/>\"', 1, '2018-04-05 09:09:08', '2015-08-25 21:15:22', 1, '', 378, 'e390c880-fff1-4500-aa86-21d2db867845', '', '', '', '', ''),
@ -5241,7 +5241,7 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`,
(3021, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Update Server Element', 'NOT NULL', '', 24, '\"<field\\n\\ttype=\\\"text\\\"\\n\\tname=\\\"update_element\\\"\\n\\tlabel=\\\"Element\\\"\\n\\tsize=\\\"10\\\"\\n\\tmaxlength=\\\"50\\\"\\n\\tdescription=\\\"Enter the element code name. [No spaces]\\\"\\n\\tclass=\\\"text_area\\\"\\n\\tfilter=\\\"word\\\"\\n\\tautocomplete=\\\"on\\\"\\n\\tshowon=\\\"update_server_adv:1\\\"\\n\\/>\"', 1, '2021-12-16 04:16:14', '2021-12-18 10:07:20', 2, '', 378, '4313aad6-47aa-4ae0-8bbe-b70b1c0abf42', '', '', '', '', ''),
(3022, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Update Server Release State', 'NOT NULL', '', 24, '\"<field\\n\\ttype=\\\"text\\\"\\n\\tname=\\\"update_state\\\"\\n\\tlabel=\\\"Release State\\\"\\n\\tsize=\\\"10\\\"\\n\\tmaxlength=\\\"50\\\"\\n\\tdefault=\\\"stable\\\"\\n\\tdescription=\\\"Set the release state\\\"\\n\\tclass=\\\"text_area\\\"\\n\\tfilter=\\\"word\\\"\\n\\thint=\\\"stable\\\"\\n\\tautocomplete=\\\"on\\\"\\n\\tshowon=\\\"update_server_adv:1\\\"\\n\\/>\"', 1, '2021-12-16 04:18:39', '2021-12-18 10:07:08', 3, '', 378, '3b9fe471-5555-47a9-8b10-ee84c9f99ea9', '', '', '', '', ''),
(3023, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Update Server Release Target Version', 'NOT NULL', '', 24, '\"<field\\n\\ttype=\\\"text\\\"\\n\\tname=\\\"update_target_version\\\"\\n\\tlabel=\\\"Update Server Release Target Version\\\"\\n\\tsize=\\\"10\\\"\\n\\tmaxlength=\\\"50\\\"\\n\\tdefault=\\\"3.*\\\"\\n\\tdescription=\\\"Set the release target version\\\"\\n\\tclass=\\\"text_area\\\"\\n\\tfilter=\\\"string\\\"\\n\\thint=\\\"3.*\\\"\\n\\tautocomplete=\\\"on\\\"\\n\\tshowon=\\\"update_server_adv:1\\\"\\n\\/>\"', 1, '2021-12-16 04:24:41', '2021-12-18 10:07:46', 2, '', 378, '10de856b-ae3b-4764-a21e-6d099c767dad', '', '', '', '', ''),
(3024, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Version Update (Componment)', 'NOT NULL', '', 35, '\"<field\\n\\ttype=\\\"subform\\\"\\n\\tname=\\\"version_update\\\"\\n\\tlabel=\\\"Version Updates\\\"\\n\\tlayout=\\\"repeatablejcb\\\"\\n\\tmultiple=\\\"true\\\"\\n\\tfields=\\\"1021,1022,1024,3020,3019,3021,3022,3023,3025,3026\\\"\\n\\tdescription=\\\"Add Version Updates Here!\\\"\\n\\tdefault=\\\"\\\"\\n\\ticon=\\\"list\\\"\\n\\/>\"', 1, '2021-12-16 06:53:58', '2021-12-18 16:06:27', 4, '', 653, '1b98fc0a-d58f-4c81-a53f-30106e0c30eb', '', '', '', '', ''),
(3024, '', '', '', '', '', '', '', '', '', '', 'MEDIUMTEXT', '', '', '', 'Version Update (Componment)', 'NOT NULL', '', 35, '\"<field\\n\\ttype=\\\"subform\\\"\\n\\tname=\\\"version_update\\\"\\n\\tlabel=\\\"Version Updates\\\"\\n\\tlayout=\\\"repeatablejcb\\\"\\n\\tmultiple=\\\"true\\\"\\n\\tfields=\\\"1021,1022,1024,3020,3019,3021,3022,3023,3025,3026\\\"\\n\\tdescription=\\\"Add Version Updates Here!\\\"\\n\\tdefault=\\\"\\\"\\n\\ticon=\\\"list\\\"\\n\\/>\"', 1, '2021-12-16 06:53:58', '2024-04-24 19:05:38', 5, '', 653, '1b98fc0a-d58f-4c81-a53f-30106e0c30eb', '', '', '', '', ''),
(3025, '', '', '', '', '', '', '', '', '', '', 'TEXT', '', '', '', 'Change Log', 'NOT NULL', '', 25, '\"<field\\n\\ttype=\\\"textarea\\\"\\n\\tname=\\\"change_log\\\"\\n\\tlabel=\\\"Change Log\\\"\\n\\trows=\\\"30\\\"\\n\\tcols=\\\"15\\\"\\n\\tdescription=\\\"Set the release change log\\\"\\n\\tclass=\\\"text_area mysql_update\\\"\\n\\tfilter=\\\"raw\\\"\\n\\thint=\\\"\\/\\/ Change Log or blank for none\\\"\\n\\tshowon=\\\"update_server_adv:1\\\"\\n\\/>\"', 1, '2021-12-18 09:33:33', '2021-12-18 10:09:31', 4, '', 378, '68987888-196a-4d65-b736-d34ff8e35312', '', '', '', '', ''),
(3026, '', '', '', '', '', '', '', '', 255, '', 'VARCHAR', '', '', '', 'Update Client', 'NOT NULL', '', 24, '\"<field\\n\\ttype=\\\"text\\\"\\n\\tname=\\\"update_client\\\"\\n\\tlabel=\\\"Client\\\"\\n\\tsize=\\\"10\\\"\\n\\tmaxlength=\\\"50\\\"\\n\\tdefault=\\\"site\\\"\\n\\tdescription=\\\"Set the target client\\\"\\n\\tclass=\\\"text_area\\\"\\n\\tfilter=\\\"word\\\"\\n\\thint=\\\"administrator\\\"\\n\\tautocomplete=\\\"on\\\"\\n\\tshowon=\\\"update_server_adv:1\\\"\\n\\/>\"', 1, '2021-12-18 16:05:38', '2021-12-18 16:06:12', 2, '', 378, '20b497c2-7c6b-4574-ba9a-936ec56c2808', '', '', '', '', ''),
(3027, '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'How to Clone', 'NOT NULL', '', 14, '\"<field\\n\\ttype=\\\"note\\\"\\n\\tname=\\\"note_how_to_clone\\\"\\n\\tlabel=\\\"How to clone another field\'s values into this one.\\\"\\n\\tdescription=\\\"There has often been the case that we have two or more [[[views]]] that should be exactly the same. Just selecting that field and clicking save, will overwrite this field with that selected field data.\\\"\\n\\theading=\\\"h4\\\"\\n\\tclass=\\\"alert alert-info\\\"\\n\\/>\"', 1, '2021-12-21 06:47:13', '0000-00-00 00:00:00', 1, '', 1016, '9cc5e507-92df-4cf9-aec3-eaa55975a15c', '', '', '', '', ''),
@ -5613,7 +5613,7 @@ INSERT INTO `#__componentbuilder_fieldtype` (`id`, `description`, `name`, `prope
(9, 'The hidden form field type provides a hidden field for saving a field whose value cannot be altered directly by a user in the Administrator (it can be altered in code or by editing the params.ini file). If the parameter has a saved value this is entered i', 'Hidden', '{\"properties0\":{\"name\":\"type\",\"example\":\"hidden\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be hidden.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mysecretvariable\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"default\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the data which needs to be collected.\"},\"properties5\":{\"name\":\"filter\",\"example\":\"STRING\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties4\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field. This value will determine which method is used to validate the value for a field.\"}}', 'provides a hidden field for saving a form field whose value cannot be altered directly by a user.', '', 1, 2, '', '', '82f1b5ca-bb9b-44d7-9a7a-9a03fb2a31dd'),
(10, 'The integer form field type provides a select box with a range of integer values. If the field has a value saved, this value is displayed when the page is first loaded. If not, the default value (if any) is selected.', 'Integer', '{\"properties0\":{\"name\":\"type\",\"example\":\"integer\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be integer.\"},\"properties1\":{\"name\":\"name\",\"example\":\"size\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Size\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default value.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties6\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties7\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties8\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field. This value will determine which method is used to validate the value for a field.\"},\"properties9\":{\"name\":\"first\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) this value is the lowest on the list.\"},\"properties10\":{\"name\":\"last\",\"example\":\"20\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) this value is the highest on the list.\"},\"properties11\":{\"name\":\"step\",\"example\":\"5\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) each option will be the previous option incremented by this integer, starting with the first value until the last value is reached.\"},\"properties12\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties13\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a drop down list of integers between a minimum and maximum.', '', 1, 6, '', '', 'fdbb50ea-35d2-45b2-a0bc-076fdf1544b8'),
(11, 'The list form field type provides a drop down list or a list box of custom-defined entries. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'List', '{\"properties0\":{\"name\":\"type\",\"example\":\"list\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be list.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mylist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an option\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"list_class\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties6\":{\"name\":\"layout\",\"example\":\"joomla.form.field.list-fancy-select\",\"adjustable\":\"1\",\"description\":\"(optional) New layout field added in Joomla 4\"},\"properties7\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties8\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) filter options\"},\"properties9\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties10\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field. This value will determine which method is used to validate the value for a field.\"},\"properties11\":{\"name\":\"option\",\"example\":\"0|Option 1,1|Option 2,2|Option 1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties12\":{\"name\":\"useglobal\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) if set to true, it will show the value that is set in the global configuration if found in the database.\"},\"properties13\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default list item value.\"},\"properties14\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties15\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a drop down list of custom-defined entries.', '', 1, 12, '', '', 'a51dfc06-1b9b-4d0a-86ba-f705bcd40d4d'),
(12, 'The media form field type provides modal access to the media manager for the choice of an image. Users with appropriate permissions will be able to upload files.', 'Media', '{\"properties0\":{\"name\":\"type\",\"example\":\"media\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be media.\"},\"properties1\":{\"name\":\"name\",\"example\":\"media\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Media\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"directory\",\"example\":\"\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the directory from which the user will be able to choose a file. This attribute should be relative to the top level \\/images\\/ folder.\"},\"properties5\":{\"name\":\"preview\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) shows or hides the preview of the currently chosen image. (\\\"true\\\": Show always, \\\"tooltip\\\": Show as tooltip, \\\"false\\\": Show never) (since Joomla! 2.5.5)\"},\"properties6\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'provides modal access to the media manager for insertion of images with upload for users with appropriate permissions.', '', 1, 4, '', '', '69957007-e3d4-4976-a32b-611d02dbad71'),
(12, 'The media form field type provides modal access to the media manager for the choice of an image. Users with appropriate permissions will be able to upload files.', 'Media', '{\"properties0\":{\"name\":\"type\",\"example\":\"media\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be media.\"},\"properties1\":{\"name\":\"name\",\"example\":\"media\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Media\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"directory\",\"example\":\"\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the directory from which the user will be able to choose a file. This attribute should be relative to the top level \\/images\\/ folder.\"},\"properties5\":{\"name\":\"preview\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) shows or hides the preview of the currently chosen image. (\\\"true\\\": Show always, \\\"tooltip\\\": Show as tooltip, \\\"false\\\": Show never) (since Joomla! 2.5.5)\"},\"properties6\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"},\"properties7\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides modal access to the media manager for insertion of images with upload for users with appropriate permissions.', '', 1, 5, '', '', '69957007-e3d4-4976-a32b-611d02dbad71'),
(13, 'Provides a meter to show value in a range, updated with jQuery if needed or simply a fixed value.', 'Meter', '{\"properties0\":{\"name\":\"type\",\"example\":\"meter\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be meter.\"},\"properties1\":{\"name\":\"name\",\"example\":\"meter\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Meter\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"width\",\"example\":\"330px\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of meter box\"},\"properties4\":{\"name\":\"color\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The background color\"},\"properties5\":{\"name\":\"default\",\"example\":\"9\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"animated\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) lets the bar have strips\"},\"properties7\":{\"name\":\"active\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) lets the strips on the bar move\"},\"properties8\":{\"name\":\"description\",\"example\":\"Enter some description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties9\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties10\":{\"name\":\"min\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(mandatory) this value is the min on the meter.\"},\"properties11\":{\"name\":\"max\",\"example\":\"20\",\"adjustable\":\"1\",\"description\":\"(mandatory) this value is the max on meter.\"},\"properties12\":{\"name\":\"step\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) each option will be the previous option incremented by this integer, starting with the first value until the last value is reached.\"},\"properties13\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a meter to show value in a range.', '', 1, 3, '', '', '81668284-e572-4e17-927b-ba697fc64bd0'),
(14, 'This form field makes it possible to create titles, texts, descriptions and even alert boxes. It also allows you to bring order in the settings for extensions, by separating them with useful titles. Or adding descriptions for certain settings (without having to rely on the tooltips). Or adding any other text you want.', 'Note', '{\"properties0\":{\"name\":\"type\",\"example\":\"note\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be note\"},\"properties1\":{\"name\":\"name\",\"example\":\"note_one\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"The notice\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory or optional if using description) (translatable) is the descriptive title of the note \"},\"properties3\":{\"name\":\"description\",\"example\":\"The notice description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional if using label)(translatable) the description\\/text of the note \"},\"properties4\":{\"name\":\"heading\",\"example\":\"h4\",\"adjustable\":\"1\",\"description\":\"(optional) the type of heading element to use for the label (default: h4)\"},\"properties5\":{\"name\":\"class\",\"example\":\"alert\",\"adjustable\":\"1\",\"description\":\"(optional) a class name (or class names), like these examples ( alert, alert alert-info, alert alert-success, alert alert-error )\"},\"properties6\":{\"name\":\"close\",\"example\":\"true\",\"adjustable\":\"1\",\"description\":\"(optional) a value of \'true\' (for alerts) or the value for the data-dismiss of the bootstrap close icon\"},\"properties7\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Allows you to hide the field based on the value(s) of another field; for Joomla 3.2.4+ https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'supports a one line text field.', '', 1, 5, '', '', 'f9ecacd0-8481-4157-8c71-d7aaefc2b7c3'),
(15, 'Provides a one line text box with up-down handles to set a number in the field.', 'Number', '{\"properties0\":{\"name\":\"type\",\"example\":\"number\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be number.\"},\"properties1\":{\"name\":\"name\",\"example\":\"number\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Number\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default value.\"},\"properties4\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties5\":{\"name\":\"class\",\"example\":\"text_area\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'text_area\'.\"},\"properties6\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties7\":{\"name\":\"min\",\"example\":\"1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) this value is the lowest on the list.\"},\"properties8\":{\"name\":\"max\",\"example\":\"40\",\"mandatory\":\"1\",\"description\":\"(mandatory) this value is the highest on the list.\"},\"properties9\":{\"name\":\"step\",\"example\":\"5\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) each option will be the previous option incremented by this integer, starting with the first value until the last value is reached.\"},\"properties10\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Javascript that should run on changing of the value.\"},\"properties11\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a one line text box with up-down handles to set a number in the field.', '', 1, 4, '', '', '5abd2b73-643b-4273-841a-787991aad968'),
@ -5902,6 +5902,13 @@ INSERT INTO `#__componentbuilder_library_files_folders_urls` (`id`, `addfiles`,
(12, '{}', '{}', '{\"addurls4\":{\"url\":\"https:\\/\\/cdn.datatables.net\\/v\\/bs5\\/jszip-3.10.1\\/dt-2.0.2\\/b-3.0.1\\/b-colvis-3.0.1\\/b-html5-3.0.1\\/b-print-3.0.1\\/cr-2.0.0\\/date-1.5.2\\/fc-5.0.0\\/fh-4.0.1\\/kt-2.12.0\\/r-3.0.0\\/rg-1.5.0\\/rr-1.5.0\\/sc-2.4.1\\/sb-1.7.0\\/sp-2.3.0\\/sl-2.0.0\\/sr-1.4.0\\/datatables.min.css\",\"type\":3},\"addurls1\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/pdfmake\\/0.2.7\\/pdfmake.min.js\",\"type\":3},\"addurls2\":{\"url\":\"https:\\/\\/cdnjs.cloudflare.com\\/ajax\\/libs\\/pdfmake\\/0.2.7\\/vfs_fonts.js\",\"type\":3},\"addurls3\":{\"url\":\"https:\\/\\/cdn.datatables.net\\/v\\/bs5\\/jszip-3.10.1\\/dt-2.0.2\\/b-3.0.1\\/b-colvis-3.0.1\\/b-html5-3.0.1\\/b-print-3.0.1\\/cr-2.0.0\\/date-1.5.2\\/fc-5.0.0\\/fh-4.0.1\\/kt-2.12.0\\/r-3.0.0\\/rg-1.5.0\\/rr-1.5.0\\/sc-2.4.1\\/sb-1.7.0\\/sp-2.3.0\\/sl-2.0.0\\/sr-1.4.0\\/datatables.min.js\",\"type\":3}}', 15, '', 1, '2024-03-09 16:27:28', '2024-03-09 16:29:30', 2, '', 9);
CREATE TABLE IF NOT EXISTS `#__componentbuilder_external_code` (
`target` VARCHAR(255) NOT NULL DEFAULT '',
`hash` VARCHAR(64) NOT NULL DEFAULT '',
PRIMARY KEY (`target`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
--
-- Always insure this column name is large enough for long component and view names.

View File

@ -49,3 +49,5 @@ DROP TABLE IF EXISTS `#__componentbuilder_joomla_plugin_group`;
DROP TABLE IF EXISTS `#__componentbuilder_joomla_plugin_updates`;
DROP TABLE IF EXISTS `#__componentbuilder_joomla_plugin_files_folders_urls`;
DROP TABLE IF EXISTS `#__componentbuilder_external_code`;

View File

@ -0,0 +1,18 @@
UPDATE `#__componentbuilder_admin_view`
SET `alias_builder_type` = 0
WHERE `alias_builder_type` = '';
UPDATE `#__componentbuilder_dynamic_get`
SET `addcalculation` = 0
WHERE `addcalculation` = '';
ALTER TABLE `#__componentbuilder_joomla_component` CHANGE `image` `image` VARCHAR(255) NOT NULL DEFAULT '';
ALTER TABLE `#__componentbuilder_admin_view` CHANGE `alias_builder_type` `alias_builder_type` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `#__componentbuilder_admin_view` CHANGE `icon` `icon` VARCHAR(255) NOT NULL DEFAULT '';
ALTER TABLE `#__componentbuilder_admin_view` CHANGE `icon_add` `icon_add` VARCHAR(255) NOT NULL DEFAULT '';
ALTER TABLE `#__componentbuilder_admin_view` CHANGE `icon_category` `icon_category` VARCHAR(255) NOT NULL DEFAULT '';
ALTER TABLE `#__componentbuilder_custom_admin_view` CHANGE `icon` `icon` VARCHAR(255) NOT NULL DEFAULT '';
ALTER TABLE `#__componentbuilder_dynamic_get` CHANGE `addcalculation` `addcalculation` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `#__componentbuilder_component_updates` CHANGE `version_update` `version_update` MEDIUMTEXT NOT NULL;
ALTER TABLE `#__componentbuilder_joomla_module_updates` CHANGE `version_update` `version_update` MEDIUMTEXT NOT NULL;
ALTER TABLE `#__componentbuilder_joomla_plugin_updates` CHANGE `version_update` `version_update` MEDIUMTEXT NOT NULL;

View File

@ -1,15 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="5.0" method="upgrade">
<name>COM_COMPONENTBUILDER</name>
<creationDate>21st April, 2024</creationDate>
<creationDate>24th April, 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>5.0.0-beta4</version>
<version>5.0.0-beta5</version>
<description><![CDATA[
<h1>Component Builder (v.5.0.0-beta4)</h1>
<h1>Component Builder (v.5.0.0-beta5)</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.

View File

@ -125,4 +125,22 @@
<maintainerurl>https://dev.vdm.io</maintainerurl>
<targetplatform name="joomla" version="5\.[01]"/>
</update>
<update>
<name>Component Builder</name>
<description>Builds Complex Joomla Components</description>
<element>pkg_component_builder</element>
<type>package</type>
<client>site</client>
<version>5.0.0-beta5</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/v5.0.0-beta5.zip</downloadurl>
</downloads>
<tags>
<tag>beta</tag>
</tags>
<maintainer>Llewellyn van der Merwe</maintainer>
<maintainerurl>https://dev.vdm.io</maintainerurl>
<targetplatform name="joomla" version="5\.[01]"/>
</update>
</updates>

View File

@ -48,7 +48,7 @@ abstract class BaseTable implements Tableinterface
'tab_name' => NULL,
'db' => [
'type' => 'INT(11)',
'default' => '',
'default' => 'EMPTY',
'auto_increment' => true,
'primary_key' => true,
'null_switch' => 'NOT NULL'
@ -227,7 +227,7 @@ abstract class BaseTable implements Tableinterface
'tab_name' => NULL,
'db' => [
'type' => 'TEXT',
'default' => '',
'default' => 'EMPTY',
'null_switch' => 'NULL'
]
]

View File

@ -13,6 +13,7 @@ namespace VDM\Joomla\Abstraction;
use Joomla\CMS\Factory;
use Joomla\CMS\Version;
use VDM\Joomla\Interfaces\Tableinterface as Table;
use VDM\Joomla\Interfaces\SchemaInterface;
@ -71,6 +72,14 @@ abstract class Schema implements SchemaInterface
*/
private array $keys;
/**
* The current table columns
*
* @var array
* @since 3.2.1
*/
private array $columns;
/**
* The success messages of the action
*
@ -79,6 +88,14 @@ abstract class Schema implements SchemaInterface
*/
private array $success;
/**
* Current Joomla Version We are IN
*
* @var int
* @since 3.2.1
**/
protected $currentVersion;
/**
* Constructor.
*
@ -100,8 +117,11 @@ abstract class Schema implements SchemaInterface
// set the component table
$this->prefix = $this->db->getPrefix() . $this->getCode();
// set the current version
$this->currentVersion = Version::MAJOR_VERSION;
} catch (\Exception $e) {
throw new \Exception("Error: failed to initialize schema class due to a database error.", 0, $e);
throw new \Exception("Error: failed to initialize schema class due to a database error.");
}
}
@ -118,23 +138,22 @@ abstract class Schema implements SchemaInterface
$this->success = [
"Success: scan of the component tables started."
];
foreach ($this->table->tables() as $table)
{
$this->uniqueKeys = [];
$this->keys = [];
if (!$this->tableExists($table))
{
$this->createTable($table);
}
else
if ($this->tableExists($table))
{
$this->updateSchema($table);
}
else
{
$this->createTable($table);
}
}
} catch (\Exception $e) {
throw new \Exception("Error: updating database schema.", 0, $e);
throw new \Exception("Error: updating database schema. " . $e->getMessage());
}
if (count($this->success) == 1)
@ -149,6 +168,63 @@ abstract class Schema implements SchemaInterface
return $this->success;
}
/**
* Get the targeted component code
*
* @return string
* @since 3.2.1
*/
abstract protected function getCode(): string;
/**
* Check if a table exists in the database.
*
* @param string $table The name of the table to check.
*
* @return bool True if table exists, False otherwise.
* @since 3.2.1
*/
protected function tableExists(string $table): bool
{
return in_array($this->getTable($table), $this->tables);
}
/**
* Update the schema of an existing table.
*
* @param string $table The table to update.
*
* @return void
* @since 3.2.1
* @throws \Exception If there is an error while updating the schema.
*/
public function updateSchema(string $table): void
{
try {
$existingColumns = $this->getExistingColumns($table);
$expectedColumns = $this->table->fields($table, true);
$missingColumns = array_diff($expectedColumns, $existingColumns);
if (!empty($missingColumns))
{
$this->addMissingColumns($table, $missingColumns);
}
$this->checkColumnsDataType($table, $expectedColumns);
} catch (\Exception $e) {
throw new \Exception("Error: updating schema for $table table. " . $e->getMessage());
}
if (!empty($missingColumns))
{
$column_s = (count($missingColumns) == 1) ? 'column' : 'columns';
$missingColumns = implode(', ', $missingColumns);
$this->success[] = "Success: added missing ($missingColumns) $column_s to $table table.";
}
}
/**
* Create a table with all necessary fields.
*
@ -182,64 +258,38 @@ abstract class Schema implements SchemaInterface
$this->db->setQuery($createTableSql);
$this->db->execute();
} catch (\Exception $e) {
throw new \Exception("Error: failed to create missing $table table.", 0, $e);
throw new \Exception("Error: failed to create missing $table table. " . $e->getMessage());
}
$this->success[] = "Success: created missing $table table.";
}
/**
* Update the schema of an existing table.
* Fetch existing columns from a database table.
*
* @param string $table The table to update.
* @param string $table The name of the table.
*
* @return void
* @return array An array of column names.
* @since 3.2.1
* @throws \Exception If there is an error while updating the schema.
*/
public function updateSchema(string $table): void
protected function getExistingColumns(string $table): array
{
try {
$existingColumns = $this->getExistingColumns($table);
$expectedColumns = $this->table->fields($table, true);
$this->columns = $this->db->getTableColumns($this->getTable($table), false);
$missingColumns = array_diff($expectedColumns, $existingColumns);
if (!empty($missingColumns))
{
$this->addMissingColumns($table, $missingColumns);
}
} catch (\Exception $e) {
throw new \Exception("Error: updating schema for $table table.", 0, $e);
}
if (!empty($missingColumns))
{
$columns = (count($missingColumns) == 1) ? 'column' : 'columns';
$missingColumns = implode(', ', $missingColumns);
$this->success[] = "Success: added missing ($missingColumns) $columns to $table table.";
}
return array_keys($this->columns);
}
/**
* Get the targeted component code
*
* @return string
* @since 3.2.1
*/
abstract protected function getCode(): string;
/**
* Add missing columns to a table.
*
* @param string $table The table to update.
* @param array $fields List of missing columns/fields.
* @param string $table The table to update.
* @param array $columns List of missing columns/fields.
*
* @return void
* @since 3.2.1
* @throws \Exception If there is an error adding columns.
*/
protected function addMissingColumns(string $table, array $fields): void
protected function addMissingColumns(string $table, array $columns): void
{
try {
$query = $this->db->getQuery(true);
@ -247,9 +297,9 @@ abstract class Schema implements SchemaInterface
// Start an ALTER TABLE query
$alterQueries = [];
foreach ($fields as $field)
foreach ($columns as $column)
{
if (($def = $this->getColumnDefinition($table, $field)) !== null)
if (($def = $this->getColumnDefinition($table, $column)) !== null)
{
$alterQueries[] = " ADD " . $def;
}
@ -258,9 +308,291 @@ abstract class Schema implements SchemaInterface
$this->db->setQuery($alterTable . implode(', ', $alterQueries));
$this->db->execute();
} catch (\Exception $e) {
$columns = (count($fields) == 1) ? 'column' : 'columns';
$fields = implode(', ', $fields);
throw new \Exception("Error: failed to add ($fields) $columns to $table table.", 0, $e);
$column_s = (count($columns) == 1) ? 'column' : 'columns';
$columns = implode(', ', $columns);
throw new \Exception("Error: failed to add ($columns) $column_s to $table table. " . $e->getMessage());
}
}
/**
* Validate and update the data type of existing fields/columns
*
* @param string $table The table to update.
* @param array $columns List of columns/fields to check.
*
* @return void
* @since 3.2.1
*/
protected function checkColumnsDataType(string $table, array $columns): void
{
$requireUpdate = [];
foreach ($columns as $column)
{
$current = $this->columns[$column] ?? null;
if ($current === null || ($expected = $this->table->get($table, $column, 'db')) === null)
{
continue;
}
// check if the data type and size match
if ($this->isDataTypeChangeSignificant($current->Type, $expected['type']))
{
$requireUpdate[$column] = [
'column' => $column,
'current' => $current->Type,
'expected' => $expected['type']
];
// check if update of default values is needed
$this->checkDefault($table, $column);
}
}
if (!empty($requireUpdate))
{
$this->updateColumnsDataType($table, $requireUpdate);
}
}
/**
* Generates a SQL snippet for defining a table column, incorporating column type,
* default value, nullability, and auto-increment properties.
*
* @param string $table The table name to be used.
* @param string $field The field name in the table to generate SQL for.
*
* @return string|null The SQL snippet for the column definition.
* @since 3.2.1
* @throws \Exception If the schema details cannot be retrieved or the SQL statement cannot be constructed properly.
*/
protected function getColumnDefinition(string $table, string $field): ?string
{
try {
// Retrieve the database schema details for the specified table and field
if (($db = $this->table->get($table, $field, 'db')) === null)
{
return null;
}
// Prepare the column name
$column_name = $this->db->quoteName($field);
$db['name'] = $field;
// Prepare the type and default value SQL statement
$type = $db['type'] ?? 'TEXT';
$db_default = isset($db['default']) ? $db['default'] : null;
$default = $this->getDefaultValue($type, $db_default);
// Prepare the null switch, and auto increment statement
$null_switch = !empty($db['null_switch']) ? " " . $db['null_switch'] : '';
$auto_increment = !empty($db['auto_increment']) ? " AUTO_INCREMENT" : '';
$this->setKeys($db);
// Assemble the SQL snippet for the column definition
return "{$column_name} {$type}{$null_switch}{$default}{$auto_increment}";
} catch (\Exception $e) {
throw new \Exception("Error: failed to generate column definition for ($table.$field). " . $e->getMessage());
}
}
/**
* Check and Update the default values if needed, including existing data adjustments
*
* @param string $table The table to update.
* @param string $column The column/field to check.
*
* @return void
* @since 3.2.1
*/
protected function checkDefault(string $table, string $column): void
{
// Retrieve the expected column configuration
$expected = $this->table->get($table, $column, 'db');
// Skip updates if the column is auto_increment
if (isset($expected['auto_increment']) && $expected['auto_increment'])
{
return;
}
// Retrieve the current column configuration
$current = $this->columns[$column];
// Check if default should be empty and current default is null, skip processing
if (strtoupper($expected['default']) === 'EMPTY' && $current->Default === NULL)
{
return;
}
// Determine the new default value based on the expected settings
$type = $expected['type'] ?? 'TEXT';
$db_default = isset($expected['default']) ? $expected['default'] : null;
$newDefault = $this->getDefaultValue($type, $db_default, true);
// First, adjust existing rows to conform to the new default if necessary
if (is_numeric($newDefault) && $this->adjustExistingDefaults($table, $column, $current->Default, $newDefault))
{
$this->success[] = "Success: updated the ($column) defaults in $table table.";
}
}
/**
* Update the data type of the given fields.
*
* @param string $table The table to update.
* @param array $columns List of columns/fields that must be updated.
*
* @return void
* @since 3.2.1
*/
protected function updateColumnsDataType(string $table, array $columns): void
{
$alterTable = 'ALTER TABLE ' . $this->db->quoteName($this->getTable($table));
foreach ($columns as $column => $types)
{
if (($def = $this->getColumnDefinition($table, $column)) === null)
{
continue;
}
$dbField = $this->db->quoteName($column);
$alterQuery = "$alterTable CHANGE $dbField ". $def;
if ($this->updateColumnDataType($alterQuery, $table, $column))
{
$current = $types['current'] ?? 'error';
$expected = $types['expected'] ?? 'error';
$this->success[] = "Success: updated ($column) column datatype $current to $expected in $table table.";
}
}
}
/**
* Add the component name to get the full table name.
*
* @param string $table The table name.
*
* @return void
* @since 3.2.1
*/
protected function getTable(string $table): string
{
return $this->prefix . '_' . $table;
}
/**
* Determines if the change in data type between two definitions is significant.
*
* This function checks if there's a significant difference between the current
* data type and the expected data type that would require updating the database schema.
* It ignores size and other modifiers for certain data types where MySQL considers
* these attributes irrelevant for storage.
*
* @param string $currentType The current data type from the database schema.
* @param string $expectedType The expected data type to validate against.
*
* @return bool Returns true if the data type change is significant, otherwise false.
* @since 3.2.1
*/
function isDataTypeChangeSignificant(string $currentType, string $expectedType): bool
{
// we only do this for Joomla 4+
if ($this->currentVersion != 3)
{
// Normalize both input types to lowercase for case-insensitive comparison
$currentType = strtolower($currentType);
$expectedType = strtolower($expectedType);
// Define types where size or other modifiers are irrelevant
$sizeIrrelevantTypes = [
'int', 'tinyint', 'smallint', 'mediumint', 'bigint', // Standard integer types
'int unsigned', 'tinyint unsigned', 'smallint unsigned', 'mediumint unsigned', 'bigint unsigned', // Unsigned integer types
];
// Check if the type involves size-irrelevant types
foreach ($sizeIrrelevantTypes as $type)
{
if (strpos($expectedType, $type) !== false)
{
// Remove any numeric sizes and modifiers for comparison
$pattern = '/\(\d+\)|unsigned|\s*/';
$cleanCurrentType = preg_replace($pattern, '', $currentType);
$cleanExpectedType = preg_replace($pattern, '', $expectedType);
// Compare the cleaned types
if ($cleanCurrentType === $cleanExpectedType)
{
return false; // No significant change
}
}
}
}
// Perform a standard case-insensitive comparison for other types
if (strcasecmp($currentType, $expectedType) == 0)
{
return false; // No significant change
}
return true; // Significant datatype change detected
}
/**
* Updates existing rows in a column to a new default value
*
* @param string $table The table to update.
* @param string $column The column to update.
* @param mixed $currentDefault Current default value.
* @param mixed $newDefault The new default value to be set.
*
* @return void
* @since 3.2.1
* @throws \Exception If there is an error updating column defaults.
*/
protected function adjustExistingDefaults(string $table, string $column, $currentDefault, $newDefault): bool
{
// Determine if adjustment is needed based on new and current defaults
if ($newDefault !== $currentDefault)
{
try {
// Format the new default for SQL use
$sqlDefault = $this->db->quote($newDefault);
$updateTable = 'UPDATE ' . $this->db->quoteName($this->getTable($table));
$dbField = $this->db->quoteName($column);
// Update SQL to set new default on existing rows where the default is currently the old default
$sql = $updateTable . " SET $dbField = $sqlDefault WHERE $dbField IS NULL OR $dbField = ''";
// Execute the update
$this->db->setQuery($sql);
return $this->db->execute();
} catch (\Exception $e) {
throw new \Exception("Error: failed to update ($column) column defaults in $table table. " . $e->getMessage());
}
}
return false;
}
/**
* Update the data type of the given field.
*
* @param string $updateString The SQL command to update the column data type
* @param string $table The table to update.
* @param string $field Column/field that must be updated.
*
* @return bool true on succes
* @since 3.2.1
* @throws \Exception If there is an error adding columns.
*/
protected function updateColumnDataType(string $updateString, string $table, string $field): bool
{
try {
$this->db->setQuery($updateString);
return $this->db->execute();
} catch (\Exception $e) {
throw new \Exception("Error: failed to update the datatype of ($field) column in $table table. " . $e->getMessage());
}
}
@ -288,6 +620,20 @@ abstract class Schema implements SchemaInterface
return implode(', ', $keys);
}
/**
* Function to set the view keys
*
* @param string $column The field column database array values
*
* @return void
* @since 3.2.1
*/
protected function setKeys(array $column): void
{
$this->setUniqueKey($column);
$this->setKey($column);
}
/**
* Function to set the unique key
*
@ -323,97 +669,34 @@ abstract class Schema implements SchemaInterface
}
/**
* Add the component name to get the full table name.
* Adjusts the default value SQL fragment for a database field based on its type and specific rules.
*
* @param string $table The table name.
* If the field is of type DATETIME and the Joomla version is not 3, it sets the default to CURRENT_TIMESTAMP
* if not explicitly specified otherwise. For all other types, or when a 'EMPTY' default is specified, it handles
* defaults by either leaving them unset or applying the provided default, properly quoted for SQL safety.
*
* @return void
* @since 3.2.1
*/
protected function getTable(string $table): string
{
return $this->prefix . '_' . $table;
}
/**
* Check if a table exists in the database.
* @param string $type The type of the database field (e.g., 'DATETIME').
* @param string|null $defaultValue Optional default value for the field, null if not provided.
* @param bool $pure Optional to add the 'DEFAULT' string or not.
*
* @param string $table The name of the table to check.
*
* @return bool True if table exists, False otherwise.
* @since 3.2.1
*/
private function tableExists(string $table): bool
{
return in_array($this->getTable($table), $this->tables);
}
/**
* Fetch existing columns from a database table.
*
* @param string $table The name of the table.
*
* @return array An array of column names.
* @since 3.2.1
*/
private function getExistingColumns(string $table): array
{
$columns = $this->db->getTableColumns($this->getTable($table), false);
return array_keys($columns);
}
/**
* Generates a SQL snippet for defining a table column, incorporating column type,
* default value, nullability, and auto-increment properties.
*
* @param string $table The table name to be used.
* @param string $field The field name in the table to generate SQL for.
*
* @return string|null The SQL snippet for the column definition.
* @return string The SQL fragment to set the default value for a field.
* @since 3.2.1
* @throws \Exception If the schema details cannot be retrieved or the SQL statement cannot be constructed properly.
*/
private function getColumnDefinition(string $table, string $field): ?string
protected function getDefaultValue(string $type, ?string $defaultValue, bool $pure = false): string
{
try {
// Retrieve the database schema details for the specified table and field
if (($db = $this->table->get($table, $field, 'db')) === null)
{
return null;
}
// Prepare the column name
$column_name = $this->db->quoteName($field);
$db['name'] = $field;
// Prepare the default value SQL, null switch, and auto increment statement
$default = !empty($db['default']) ? " DEFAULT " . $this->db->quote($db['default']) : '';
$null_switch = !empty($db['null_switch']) ? " " . $db['null_switch'] : '';
$auto_increment = !empty($db['auto_increment']) ? " AUTO_INCREMENT" : '';
$type = !empty($db['type']) ? $db['type'] : 'TEXT';
$this->setKeys($db);
// Assemble the SQL snippet for the column definition
return "{$column_name} {$type}{$default}{$null_switch}{$auto_increment}";
} catch (\Exception $e) {
throw new \Exception("Error: failed to generate column definition for $table.$field", 0, $e);
if ($defaultValue === null || strtoupper($defaultValue) === 'EMPTY')
{
return '';
}
}
/**
* Function to set the view keys
*
* @param string $column The field column database array values
*
* @return void
* @since 3.2.1
*/
private function setKeys(array $column): void
{
$this->setUniqueKey($column);
$this->setKey($column);
// Set default for DATETIME fields in Joomla versions above 3
if (strtoupper($type) === 'DATETIME' && $this->currentVersion != 3)
{
return $pure ? "CURRENT_TIMESTAMP" : " DEFAULT CURRENT_TIMESTAMP";
}
// Apply and quote the default value
return $pure ? $defaultValue : " DEFAULT " . $this->db->quote($defaultValue);
}
}

View File

@ -433,6 +433,22 @@ class Data
}
unset($view->addtables);
// Make sure the icon is only an icon path
if (strpos($view->icon, '#') !== false)
{
$view->icon = strstr($view->icon, '#', true);
}
// Make sure the icon_add is only an icon_add path
if (strpos($view->icon_add, '#') !== false)
{
$view->icon_add = strstr($view->icon_add, '#', true);
}
// Make sure the icon_add is only an icon_add path
if (strpos($view->icon_category, '#') !== false)
{
$view->icon_category = strstr($view->icon_category, '#', true);
}
// set custom tabs
$this->customtabs->set($view);

View File

@ -404,6 +404,12 @@ final class Data
)
);
// Make sure the image is only an image path
if (strpos($component->image, '#') !== false)
{
$component->image = strstr($component->image, '#', true);
}
// set the website and autor for global use (default to VDM if not found)
$this->config->set('project_website', $component->website ?? 'https://dev.vdm.io');
$this->config->set('project_author', $component->author ?? 'VDM');

View File

@ -243,6 +243,12 @@ class Data
'jcb_ce_onBeforeModelCustomViewData', [&$item, &$id, &$table]
);
// Make sure the icon is only an icon path
if (strpos($item->icon, '#') !== false)
{
$item->icon = strstr($item->icon, '#', true);
}
// set GUI mapper
$guiMapper = [
'table' => $table,

View File

@ -664,7 +664,7 @@ class Table extends BaseTable implements Tableinterface
'store' => NULL,
'tab_name' => 'Details',
'db' => [
'type' => 'CHAR(64)',
'type' => 'VARCHAR(255)',
'default' => '',
'null_switch' => 'NOT NULL',
'unique_key' => false,
@ -3596,7 +3596,7 @@ class Table extends BaseTable implements Tableinterface
'store' => NULL,
'tab_name' => 'Details',
'db' => [
'type' => 'CHAR(64)',
'type' => 'VARCHAR(255)',
'default' => '',
'null_switch' => 'NOT NULL',
'unique_key' => false,
@ -3660,7 +3660,7 @@ class Table extends BaseTable implements Tableinterface
'store' => NULL,
'tab_name' => 'Details',
'db' => [
'type' => 'CHAR(64)',
'type' => 'VARCHAR(255)',
'default' => '',
'null_switch' => 'NOT NULL',
'unique_key' => false,
@ -3676,7 +3676,7 @@ class Table extends BaseTable implements Tableinterface
'store' => NULL,
'tab_name' => 'Details',
'db' => [
'type' => 'CHAR(64)',
'type' => 'VARCHAR(255)',
'default' => '',
'null_switch' => 'NOT NULL',
'unique_key' => false,
@ -3964,8 +3964,8 @@ class Table extends BaseTable implements Tableinterface
'store' => NULL,
'tab_name' => 'Fields',
'db' => [
'type' => 'CHAR',
'default' => '',
'type' => 'TINYINT(1)',
'default' => '0',
'null_switch' => 'NOT NULL',
'unique_key' => false,
'key' => false,
@ -5148,7 +5148,7 @@ class Table extends BaseTable implements Tableinterface
'store' => NULL,
'tab_name' => 'Details',
'db' => [
'type' => 'CHAR(64)',
'type' => 'VARCHAR(255)',
'default' => '',
'null_switch' => 'NOT NULL',
'unique_key' => false,
@ -6924,8 +6924,8 @@ class Table extends BaseTable implements Tableinterface
'store' => NULL,
'tab_name' => 'Abacus',
'db' => [
'type' => 'CHAR',
'default' => '',
'type' => 'TINYINT(1)',
'default' => '0',
'null_switch' => 'NOT NULL',
'unique_key' => false,
'key' => false,
@ -9598,7 +9598,7 @@ class Table extends BaseTable implements Tableinterface
'store' => 'json',
'tab_name' => 'Updates',
'db' => [
'type' => 'TEXT',
'type' => 'MEDIUMTEXT',
'default' => 'EMPTY',
'null_switch' => 'NOT NULL',
'unique_key' => false,
@ -10526,7 +10526,7 @@ class Table extends BaseTable implements Tableinterface
'store' => 'json',
'tab_name' => 'Updates',
'db' => [
'type' => 'TEXT',
'type' => 'MEDIUMTEXT',
'default' => 'EMPTY',
'null_switch' => 'NOT NULL',
'unique_key' => false,
@ -10734,7 +10734,7 @@ class Table extends BaseTable implements Tableinterface
'store' => 'json',
'tab_name' => 'Updates',
'db' => [
'type' => 'TEXT',
'type' => 'MEDIUMTEXT',
'default' => 'EMPTY',
'null_switch' => 'NOT NULL',
'unique_key' => false,

View File

@ -12,7 +12,7 @@
namespace VDM\Joomla\Componentbuilder\Table;
use VDM\Joomla\Componentbuilder\Table as Table;
use VDM\Joomla\Componentbuilder\Table;
use VDM\Joomla\Interfaces\SchemaInterface;
use VDM\Joomla\Abstraction\Schema as ExtendingSchema;