diff --git a/CHANGELOG.md b/CHANGELOG.md
index 78ee69d09..6438ad090 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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.
diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php
index cbcf0087f..989bde407 100644
--- a/ComponentbuilderInstallerScript.php
+++ b/ComponentbuilderInstallerScript.php
@@ -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 '
-
Upgrade to Version 5.0.0-beta4 Was Successful! Let us know if anything is not working as expected.
';
+ Upgrade to Version 5.0.0-beta5 Was Successful! Let us know if anything is not working as expected.
';
// 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");
}
}
}
diff --git a/README.md b/README.md
index a2629e347..5699b1ff3 100644
--- a/README.md
+++ b/README.md
@@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo
Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have!
-You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (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).
diff --git a/admin/README.txt b/admin/README.txt
index a2629e347..5699b1ff3 100644
--- a/admin/README.txt
+++ b/admin/README.txt
@@ -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).
diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql
index 77526bc10..6c450c082 100644
--- a/admin/sql/install.mysql.utf8.sql
+++ b/admin/sql/install.mysql.utf8.sql
@@ -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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', -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, '\"\"', -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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"(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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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, '\"\"', 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.
diff --git a/admin/sql/uninstall.mysql.utf8.sql b/admin/sql/uninstall.mysql.utf8.sql
index b27bb6482..df379941b 100644
--- a/admin/sql/uninstall.mysql.utf8.sql
+++ b/admin/sql/uninstall.mysql.utf8.sql
@@ -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`;
+
diff --git a/admin/sql/updates/mysql/5.0.0-beta4.sql b/admin/sql/updates/mysql/5.0.0-beta4.sql
new file mode 100644
index 000000000..59a009cf8
--- /dev/null
+++ b/admin/sql/updates/mysql/5.0.0-beta4.sql
@@ -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;
diff --git a/componentbuilder.xml b/componentbuilder.xml
index 8f074cb10..27705be31 100644
--- a/componentbuilder.xml
+++ b/componentbuilder.xml
@@ -1,15 +1,15 @@
COM_COMPONENTBUILDER
- 21st April, 2024
+ 24th April, 2024
Llewellyn van der Merwe
joomla@vdm.io
https://dev.vdm.io
Copyright (C) 2015 Vast Development Method. All rights reserved.
GNU General Public License version 2 or later; see LICENSE.txt
- 5.0.0-beta4
+ 5.0.0-beta5
Component Builder (v.5.0.0-beta4)
+ Component Builder (v.5.0.0-beta5)
The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time.
diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml
index 4ddffb257..55d02e9e8 100644
--- a/componentbuilder_update_server.xml
+++ b/componentbuilder_update_server.xml
@@ -125,4 +125,22 @@
https://dev.vdm.io
+
+ Component Builder
+ Builds Complex Joomla Components
+ pkg_component_builder
+ package
+ site
+ 5.0.0-beta5
+ https://dev.vdm.io
+
+ https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v5.0.0-beta5.zip
+
+
+ beta
+
+ Llewellyn van der Merwe
+ https://dev.vdm.io
+
+
\ No newline at end of file
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/BaseTable.php b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/BaseTable.php
index ee9043d9e..46227edca 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/BaseTable.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/BaseTable.php
@@ -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'
]
]
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Schema.php b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Schema.php
index 746acd6a3..53c05915a 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Schema.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Abstraction/Schema.php
@@ -12,7 +12,8 @@
namespace VDM\Joomla\Abstraction;
-use Joomla\CMS\Factory;
+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);
}
}
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Adminview/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Adminview/Data.php
index 3f82ff0b0..501266958 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Adminview/Data.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Adminview/Data.php
@@ -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);
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Component/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Component/Data.php
index 541af4c40..93ba3016c 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Component/Data.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Component/Data.php
@@ -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');
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customview/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customview/Data.php
index f3ac65786..de049af55 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customview/Data.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customview/Data.php
@@ -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,
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php
index 0a74f0418..92805b604 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php
@@ -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,
diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table/Schema.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table/Schema.php
index dbfe9807f..200e3303a 100644
--- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table/Schema.php
+++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table/Schema.php
@@ -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;