diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ab885d3d..0928d22bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,11 @@ -# v5.1.2-alpha1 +# v5.1.2-alpha2 + +- Add native module builder for Joomla 4/5 +- Refactor dynamic get methods into dedicated classes +- Move Joomla DB handling into compiler injector flow +- Fix auto-check(in) method for Joomla 4/5 compatibility + +# v5.1.2-alpha - Fix the template and layout linker for packages. diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php index 6e55d00bb..5b9ed6743 100644 --- a/ComponentbuilderInstallerScript.php +++ b/ComponentbuilderInstallerScript.php @@ -640,11 +640,11 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // rules '', // fieldMappings - '{"common": {"core_content_item_id": "id","core_title": "system_name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "default","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"system_name":"system_name","target":"target","description":"description","add_php_method_uninstall":"add_php_method_uninstall","add_php_postflight_update":"add_php_postflight_update","add_php_postflight_install":"add_php_postflight_install","add_php_preflight_uninstall":"add_php_preflight_uninstall","addreadme":"addreadme","default":"default","snippet":"snippet","add_sql":"add_sql","update_server_target":"update_server_target","add_sql_uninstall":"add_sql_uninstall","update_server":"update_server","add_update_server":"add_update_server","libraries":"libraries","module_version":"module_version","sales_server":"sales_server","custom_get":"custom_get","php_preflight_update":"php_preflight_update","php_preflight_uninstall":"php_preflight_uninstall","mod_code":"mod_code","php_postflight_install":"php_postflight_install","add_class_helper":"add_class_helper","php_postflight_update":"php_postflight_update","add_class_helper_header":"add_class_helper_header","php_method_uninstall":"php_method_uninstall","class_helper_header":"class_helper_header","sql":"sql","class_helper_code":"class_helper_code","sql_uninstall":"sql_uninstall","readme":"readme","add_php_script_construct":"add_php_script_construct","update_server_url":"update_server_url","php_script_construct":"php_script_construct","add_php_preflight_install":"add_php_preflight_install","php_preflight_install":"php_preflight_install","add_sales_server":"add_sales_server","add_php_preflight_update":"add_php_preflight_update","guid":"guid","name":"name"}}', + '{"common": {"core_content_item_id": "id","core_title": "system_name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "default","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"system_name":"system_name","target":"target","description":"description","add_php_postflight_install":"add_php_postflight_install","add_php_preflight_uninstall":"add_php_preflight_uninstall","add_php_preflight_update":"add_php_preflight_update","update_server_target":"update_server_target","addreadme":"addreadme","add_sql":"add_sql","default":"default","default_header":"default_header","snippet":"snippet","add_default_header":"add_default_header","add_php_postflight_update":"add_php_postflight_update","add_php_method_uninstall":"add_php_method_uninstall","add_sql_uninstall":"add_sql_uninstall","add_update_server":"add_update_server","update_server":"update_server","libraries":"libraries","sales_server":"sales_server","module_version":"module_version","php_preflight_install":"php_preflight_install","php_preflight_update":"php_preflight_update","layout_data":"layout_data","php_preflight_uninstall":"php_preflight_uninstall","custom_get":"custom_get","php_postflight_install":"php_postflight_install","php_postflight_update":"php_postflight_update","mod_code":"mod_code","php_method_uninstall":"php_method_uninstall","add_class_helper":"add_class_helper","sql":"sql","add_class_helper_header":"add_class_helper_header","sql_uninstall":"sql_uninstall","class_helper_header":"class_helper_header","readme":"readme","class_helper_code":"class_helper_code","update_server_url":"update_server_url","add_php_script_construct":"add_php_script_construct","php_script_construct":"php_script_construct","add_sales_server":"add_sales_server","add_php_preflight_install":"add_php_preflight_install","guid":"guid","name":"name"}}', // router '', // contentHistoryOptions - '{"formFile": "administrator/components/com_componentbuilder/forms/joomla_module.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","target","add_php_method_uninstall","add_php_postflight_update","add_php_postflight_install","add_php_preflight_uninstall","addreadme","add_sql","update_server_target","add_sql_uninstall","update_server","add_update_server","sales_server","add_class_helper","add_class_helper_header","add_php_script_construct","add_php_preflight_install","add_sales_server","add_php_preflight_update"],"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": "snippet","targetTable": "#__componentbuilder_snippet","targetColumn": "guid","displayColumn": "name"},{"sourceColumn": "update_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "libraries","targetTable": "#__componentbuilder_library","targetColumn": "guid","displayColumn": "name"},{"sourceColumn": "sales_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "custom_get","targetTable": "#__componentbuilder_dynamic_get","targetColumn": "guid","displayColumn": "name"}]}' + '{"formFile": "administrator/components/com_componentbuilder/forms/joomla_module.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","target","add_php_postflight_install","add_php_preflight_uninstall","add_php_preflight_update","update_server_target","addreadme","add_sql","add_default_header","add_php_postflight_update","add_php_method_uninstall","add_sql_uninstall","add_update_server","update_server","sales_server","add_class_helper","add_class_helper_header","add_php_script_construct","add_sales_server","add_php_preflight_install"],"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": "snippet","targetTable": "#__componentbuilder_snippet","targetColumn": "guid","displayColumn": "name"},{"sourceColumn": "update_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "libraries","targetTable": "#__componentbuilder_library","targetColumn": "guid","displayColumn": "name"},{"sourceColumn": "sales_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "custom_get","targetTable": "#__componentbuilder_dynamic_get","targetColumn": "guid","displayColumn": "name"}]}' ); // Install Joomla plugin Content Types. $this->setContentType( @@ -1519,7 +1519,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface $this->setDatabaseAssetsRulesFix(101440, "MEDIUMTEXT"); // Install the global extension params. $this->setExtensionsParams( - '{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","subform_layouts":{"subform_layouts0":{"view_field":"default","layout":"repeatablejcbjfive"}},"editor":"none","manage_jcb_package_directories":"2","set_browser_storage":"1","storage_time_to_live":"global","super_powers_documentation":"0","powers_repository":"0","super_powers_repositories":"0","builder_gif_size":"480-272","compiler_plugin":["componentbuilderactionlogcompiler","componentbuilderfieldorderingcompiler","componentbuilderheaderscompiler","componentbuilderpowersautoloadercompiler","componentbuilderprivacycompiler"],"add_menu_prefix":"1","menu_prefix":"»","namespace_prefix":"JCB","minify":"0","language":"en-GB","percentagelanguageadd":"30","assets_table_fix":"2","compiler_field_builder_type":"2","field_name_builder":"2","type_name_builder":"2","import_guid_only":"1","export_language_strings":"1","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","export_company":"Vast Development Method","export_owner":"Llewellyn van der Merwe","export_email":"joomla@vdm.io","export_website":"https://dev.vdm.io/","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","add_jquery_framework":"1","uikit_load":"1","uikit_min":"","uikit_style":""}' + '{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","subform_layouts":{"subform_layouts0":{"view_field":"default","layout":"repeatablejcbjfive"}},"editor":"none","manage_jcb_package_directories":"2","set_browser_storage":"1","storage_time_to_live":"global","super_powers_documentation":"0","powers_repository":"0","super_powers_repositories":"0","builder_gif_size":"480-272","compiler_plugin":["componentbuilderactionlogcompiler","componentbuilderfieldorderingcompiler","componentbuilderheaderscompiler","componentbuilderpowersautoloadercompiler","componentbuilderprivacycompiler"],"add_menu_prefix":"1","menu_prefix":"»","namespace_prefix":"JCB","minify":"0","language":"en-GB","percentagelanguageadd":"30","assets_table_fix":"2","compiler_field_builder_type":"2","field_name_builder":"2","type_name_builder":"2","export_company":"Vast Development Method","export_owner":"Llewellyn van der Merwe","export_email":"joomla@vdm.io","export_website":"https://dev.vdm.io/","export_license":"GNU/GPL Version 2 or later - http://www.gnu.org/licenses/gpl-2.0.html","export_copyright":"Copyright (C) 2015. All Rights Reserved","check_in":"-1 day","save_history":"1","history_limit":"10","add_jquery_framework":"1","uikit_load":"1","uikit_min":"","uikit_style":""}' ); @@ -2396,11 +2396,11 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // rules '', // fieldMappings - '{"common": {"core_content_item_id": "id","core_title": "system_name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "default","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"system_name":"system_name","target":"target","description":"description","add_php_method_uninstall":"add_php_method_uninstall","add_php_postflight_update":"add_php_postflight_update","add_php_postflight_install":"add_php_postflight_install","add_php_preflight_uninstall":"add_php_preflight_uninstall","addreadme":"addreadme","default":"default","snippet":"snippet","add_sql":"add_sql","update_server_target":"update_server_target","add_sql_uninstall":"add_sql_uninstall","update_server":"update_server","add_update_server":"add_update_server","libraries":"libraries","module_version":"module_version","sales_server":"sales_server","custom_get":"custom_get","php_preflight_update":"php_preflight_update","php_preflight_uninstall":"php_preflight_uninstall","mod_code":"mod_code","php_postflight_install":"php_postflight_install","add_class_helper":"add_class_helper","php_postflight_update":"php_postflight_update","add_class_helper_header":"add_class_helper_header","php_method_uninstall":"php_method_uninstall","class_helper_header":"class_helper_header","sql":"sql","class_helper_code":"class_helper_code","sql_uninstall":"sql_uninstall","readme":"readme","add_php_script_construct":"add_php_script_construct","update_server_url":"update_server_url","php_script_construct":"php_script_construct","add_php_preflight_install":"add_php_preflight_install","php_preflight_install":"php_preflight_install","add_sales_server":"add_sales_server","add_php_preflight_update":"add_php_preflight_update","guid":"guid","name":"name"}}', + '{"common": {"core_content_item_id": "id","core_title": "system_name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "default","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "null","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "null","core_metadesc": "null","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"system_name":"system_name","target":"target","description":"description","add_php_postflight_install":"add_php_postflight_install","add_php_preflight_uninstall":"add_php_preflight_uninstall","add_php_preflight_update":"add_php_preflight_update","update_server_target":"update_server_target","addreadme":"addreadme","add_sql":"add_sql","default":"default","default_header":"default_header","snippet":"snippet","add_default_header":"add_default_header","add_php_postflight_update":"add_php_postflight_update","add_php_method_uninstall":"add_php_method_uninstall","add_sql_uninstall":"add_sql_uninstall","add_update_server":"add_update_server","update_server":"update_server","libraries":"libraries","sales_server":"sales_server","module_version":"module_version","php_preflight_install":"php_preflight_install","php_preflight_update":"php_preflight_update","layout_data":"layout_data","php_preflight_uninstall":"php_preflight_uninstall","custom_get":"custom_get","php_postflight_install":"php_postflight_install","php_postflight_update":"php_postflight_update","mod_code":"mod_code","php_method_uninstall":"php_method_uninstall","add_class_helper":"add_class_helper","sql":"sql","add_class_helper_header":"add_class_helper_header","sql_uninstall":"sql_uninstall","class_helper_header":"class_helper_header","readme":"readme","class_helper_code":"class_helper_code","update_server_url":"update_server_url","add_php_script_construct":"add_php_script_construct","php_script_construct":"php_script_construct","add_sales_server":"add_sales_server","add_php_preflight_install":"add_php_preflight_install","guid":"guid","name":"name"}}', // router '', // contentHistoryOptions - '{"formFile": "administrator/components/com_componentbuilder/forms/joomla_module.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","target","add_php_method_uninstall","add_php_postflight_update","add_php_postflight_install","add_php_preflight_uninstall","addreadme","add_sql","update_server_target","add_sql_uninstall","update_server","add_update_server","sales_server","add_class_helper","add_class_helper_header","add_php_script_construct","add_php_preflight_install","add_sales_server","add_php_preflight_update"],"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": "snippet","targetTable": "#__componentbuilder_snippet","targetColumn": "guid","displayColumn": "name"},{"sourceColumn": "update_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "libraries","targetTable": "#__componentbuilder_library","targetColumn": "guid","displayColumn": "name"},{"sourceColumn": "sales_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "custom_get","targetTable": "#__componentbuilder_dynamic_get","targetColumn": "guid","displayColumn": "name"}]}' + '{"formFile": "administrator/components/com_componentbuilder/forms/joomla_module.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","target","add_php_postflight_install","add_php_preflight_uninstall","add_php_preflight_update","update_server_target","addreadme","add_sql","add_default_header","add_php_postflight_update","add_php_method_uninstall","add_sql_uninstall","add_update_server","update_server","sales_server","add_class_helper","add_class_helper_header","add_php_script_construct","add_sales_server","add_php_preflight_install"],"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": "snippet","targetTable": "#__componentbuilder_snippet","targetColumn": "guid","displayColumn": "name"},{"sourceColumn": "update_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "libraries","targetTable": "#__componentbuilder_library","targetColumn": "guid","displayColumn": "name"},{"sourceColumn": "sales_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "custom_get","targetTable": "#__componentbuilder_dynamic_get","targetColumn": "guid","displayColumn": "name"}]}' ); // Update Joomla plugin Content Types. $this->setContentType( @@ -3292,7 +3292,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface echo '
-

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

'; +

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

'; // Add/Update component in the action logs extensions table. $this->setActionLogsExtensions(); diff --git a/README.md b/README.md index 622fca93c..fa15c6477 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ This is a professional-grade [Joomla 5.x](https://extensions.joomla.org/extensio JCB generates native Joomla components, plugins, and modules for Joomla 3.x, 4.x, and 5.x - and is already prepared for Joomla 6. Every compiled project is tailored for the specific version without needing backward compatibility plugins. With integrated version-aware compiling, smart boilerplating, and Git-powered project syncing, JCB is much more than a code generator-it's a **full-stack development pipeline for Joomla extensions**. -You can install this component easily. The latest release (**5.1.2-alpha1**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. +You can install this component easily. The latest release (**5.1.2-alpha2**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. Upgrades are seamless through Joomla's built-in extension update mechanism. @@ -229,9 +229,9 @@ JCB is developed by developers for developers. Its purpose is to democratize hig * **Company:** [Vast Development Method](https://dev.vdm.io) * **Author:** [Llewellyn van der Merwe](mailto:joomla@vdm.io) * **Component:** [Component Builder](https://git.vdm.dev/joomla/Component-Builder) -* **Created:** 30th April, 2015 · **Last Build:** 15th July, 2025 · **Version:** 5.1.2-alpha1 +* **Created:** 30th April, 2015 · **Last Build:** 2nd September, 2025 · **Version:** 5.1.2-alpha2 * **License:** GNU General Public License version 2 or later; see LICENSE.txt · **Copyright:** Copyright (C) 2015 Vast Development Method. All rights reserved. -* **Lines:** 1095418 · **Fields:** 2096 · **Files:** 7516 · **Folders:** 728 +* **Lines:** 1155129 · **Fields:** 2091 · **Files:** 7831 · **Folders:** 740 > Generated with [JCB](https://www.joomlacomponentbuilder.com) — The Smartest Way to Build Joomla Extensions. diff --git a/admin/README.txt b/admin/README.txt index 622fca93c..fa15c6477 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -9,7 +9,7 @@ This is a professional-grade [Joomla 5.x](https://extensions.joomla.org/extensio JCB generates native Joomla components, plugins, and modules for Joomla 3.x, 4.x, and 5.x - and is already prepared for Joomla 6. Every compiled project is tailored for the specific version without needing backward compatibility plugins. With integrated version-aware compiling, smart boilerplating, and Git-powered project syncing, JCB is much more than a code generator-it's a **full-stack development pipeline for Joomla extensions**. -You can install this component easily. The latest release (**5.1.2-alpha1**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. +You can install this component easily. The latest release (**5.1.2-alpha2**) is available on [Releases](https://git.vdm.dev/joomla/pkg-component-builder/releases) and updated frequently with full source access. Upgrades are seamless through Joomla's built-in extension update mechanism. @@ -229,9 +229,9 @@ JCB is developed by developers for developers. Its purpose is to democratize hig * **Company:** [Vast Development Method](https://dev.vdm.io) * **Author:** [Llewellyn van der Merwe](mailto:joomla@vdm.io) * **Component:** [Component Builder](https://git.vdm.dev/joomla/Component-Builder) -* **Created:** 30th April, 2015 · **Last Build:** 15th July, 2025 · **Version:** 5.1.2-alpha1 +* **Created:** 30th April, 2015 · **Last Build:** 2nd September, 2025 · **Version:** 5.1.2-alpha2 * **License:** GNU General Public License version 2 or later; see LICENSE.txt · **Copyright:** Copyright (C) 2015 Vast Development Method. All rights reserved. -* **Lines:** 1095418 · **Fields:** 2096 · **Files:** 7516 · **Folders:** 728 +* **Lines:** 1155129 · **Fields:** 2091 · **Files:** 7831 · **Folders:** 740 > Generated with [JCB](https://www.joomlacomponentbuilder.com) — The Smartest Way to Build Joomla Extensions. diff --git a/admin/compiler/joomla_4/SITE_ADMIN_VIEW_HTML.php b/admin/compiler/joomla_4/SITE_ADMIN_VIEW_HTML.php index f070cf191..4fdbfaead 100644 --- a/admin/compiler/joomla_4/SITE_ADMIN_VIEW_HTML.php +++ b/admin/compiler/joomla_4/SITE_ADMIN_VIEW_HTML.php @@ -179,7 +179,7 @@ class HtmlView extends BaseHtmlView ###ADDTOOLBAR### // add the toolbar if it's not already loaded - $this->toolbar ??= Joomla___39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(Joomla___5d2ae99b_1ea1_44f0_9b59_f1aa7eab9e2e___Power::class)->createToolbar('toolbar'); + $this->toolbar ??= $this->getDocument()->getToolbar(); } /** diff --git a/admin/compiler/joomla_4/SITE_VIEWS_HTML.php b/admin/compiler/joomla_4/SITE_VIEWS_HTML.php index a86628dfd..d063b9b32 100644 --- a/admin/compiler/joomla_4/SITE_VIEWS_HTML.php +++ b/admin/compiler/joomla_4/SITE_VIEWS_HTML.php @@ -134,8 +134,8 @@ class HtmlView extends BaseHtmlView Joomla___0c1a176a_304f_433a_8233_37d01ff87815___Power::help('COM_###COMPONENT###_HELP_MANAGER', false, $this->help_url); } - // now initiate the toolbar - $this->toolbar = Toolbar::getInstance(); + // add the toolbar if it's not already loaded + $this->toolbar ??= $this->getDocument()->getToolbar(); }###SITE_GET_MODULE### /** diff --git a/admin/compiler/joomla_4/SITE_VIEW_HTML.php b/admin/compiler/joomla_4/SITE_VIEW_HTML.php index af0d8eeba..4866f2321 100644 --- a/admin/compiler/joomla_4/SITE_VIEW_HTML.php +++ b/admin/compiler/joomla_4/SITE_VIEW_HTML.php @@ -118,8 +118,8 @@ class HtmlView extends BaseHtmlView Joomla___0c1a176a_304f_433a_8233_37d01ff87815___Power::help('COM_###COMPONENT###_HELP_MANAGER', false, $this->help_url); } - // now initiate the toolbar - $this->toolbar ??= Toolbar::getInstance(); + // add the toolbar if it's not already loaded + $this->toolbar ??= $this->getDocument()->getToolbar(); }###SITE_GET_MODULE### /** diff --git a/admin/config.xml b/admin/config.xml index fda995281..e364f0484 100644 --- a/admin/config.xml +++ b/admin/config.xml @@ -961,7 +961,7 @@ default="2"> + COM_COMPONENTBUILDER_CONFIG_LEGACY_MODE @@ -975,128 +975,11 @@ default="2"> + COM_COMPONENTBUILDER_CONFIG_LEGACY_MODE -
- - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - -
diff --git a/admin/forms/dynamic_get.xml b/admin/forms/dynamic_get.xml index 2cf38c483..134dfe863 100644 --- a/admin/forms/dynamic_get.xml +++ b/admin/forms/dynamic_get.xml @@ -903,7 +903,6 @@ name="empty" label="COM_COMPONENTBUILDER_DYNAMIC_GET_EMPTY_LABEL" value="1" - default="0" description="COM_COMPONENTBUILDER_DYNAMIC_GET_EMPTY_DESCRIPTION" class="inputbox" /> diff --git a/admin/forms/joomla_module.xml b/admin/forms/joomla_module.xml index e1975316f..df72be783 100644 --- a/admin/forms/joomla_module.xml +++ b/admin/forms/joomla_module.xml @@ -139,34 +139,6 @@ filter="HTML" hint="COM_COMPONENTBUILDER_JOOMLA_MODULE_DESCRIPTION_HINT" /> - - - - - - - - - - - - COM_COMPONENTBUILDER_JOOMLA_MODULE_NO - + @@ -211,62 +183,6 @@ - - - - - - - - - - - - - - - - - - - - COM_COMPONENTBUILDER_JOOMLA_MODULE_OTHER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + COM_COMPONENTBUILDER_JOOMLA_MODULE_NO + + + + + + + + - - - - - - + + - - + + - + - - + + - - + + - + + + + + + + + + COM_COMPONENTBUILDER_JOOMLA_MODULE_ABSTRACT_CLASS - + COM_COMPONENTBUILDER_JOOMLA_MODULE_NO - + - + - + - - + + COM_COMPONENTBUILDER_JOOMLA_MODULE_NO - - + + - - - - - - - - - - - - COM_COMPONENTBUILDER_JOOMLA_MODULE_NO - + diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index ae3eed5ab..c363d2291 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -3330,22 +3330,11 @@ COM_COMPONENTBUILDER_CONFIG_AUTHOR_EMAIL_DESC="The email address of the author o COM_COMPONENTBUILDER_CONFIG_AUTHOR_EMAIL_LABEL="Author Email" COM_COMPONENTBUILDER_CONFIG_AUTHOR_NAME_DESC="The name of the author of this component." COM_COMPONENTBUILDER_CONFIG_AUTHOR_NAME_LABEL="Author Name" -COM_COMPONENTBUILDER_CONFIG_AUTO_BACKUP="Auto Backup" COM_COMPONENTBUILDER_CONFIG_AUTO_LOAD="Auto" -COM_COMPONENTBUILDER_CONFIG_BACKUPCRONJOB_NOTE_DESCRIPTION="You can run a cronjob that will backup all your components as they are mapped in JCB.

USE THE FOLLOWING: loading...

Please note that if your Joomla website has a Firewall installed, it will not allow cronjob via direct URL (most of the time), you will then need to adapt the cornjob request to look like a browser. For more info please read https://stackoverflow.com/a/31597823/1429677" -COM_COMPONENTBUILDER_CONFIG_BACKUPCRONJOB_NOTE_LABEL="Backup JCB Mapped Components" -COM_COMPONENTBUILDER_CONFIG_BACKUP_EMAIL_DESCRIPTION="Enter the email where the backup key should be send. It will only send an email if a key change is detected, and not on every backup." -COM_COMPONENTBUILDER_CONFIG_BACKUP_EMAIL_HINT="Email Address Here" -COM_COMPONENTBUILDER_CONFIG_BACKUP_EMAIL_LABEL="Email (backup key)" -COM_COMPONENTBUILDER_CONFIG_BACKUP_EMAIL_MESSAGE="Error! Please add email address here." COM_COMPONENTBUILDER_CONFIG_BACKUP_FOLDER_PATH_DESCRIPTION="Here you can set the path to the backup folder." COM_COMPONENTBUILDER_CONFIG_BACKUP_FOLDER_PATH_HINT="/home/user/backup" COM_COMPONENTBUILDER_CONFIG_BACKUP_FOLDER_PATH_LABEL="Backup Folder Path" COM_COMPONENTBUILDER_CONFIG_BACKUP_FOLDER_PATH_MESSAGE="Error! Please add folder path here." -COM_COMPONENTBUILDER_CONFIG_BACKUP_PACKAGE_NAME_DESCRIPTION="Enter Package Name Here" -COM_COMPONENTBUILDER_CONFIG_BACKUP_PACKAGE_NAME_HINT="JCB_Backup_[YEAR]_[MONTH]_[DAY]" -COM_COMPONENTBUILDER_CONFIG_BACKUP_PACKAGE_NAME_LABEL="Package Name" -COM_COMPONENTBUILDER_CONFIG_BACKUP_PACKAGE_NAME_MESSAGE="Error! Please add name here." COM_COMPONENTBUILDER_CONFIG_BASIC_KEY_DESC="Set the basic local key here." COM_COMPONENTBUILDER_CONFIG_BASIC_KEY_LABEL="Basic Key" COM_COMPONENTBUILDER_CONFIG_BASIC_KEY_NOTE_DESC="When using the basic encryption please use set a 32 character passphrase.
Never change this passphrase once it is set! DATA WILL GET CORRUPTED IF YOU DO!" @@ -3376,14 +3365,6 @@ COM_COMPONENTBUILDER_CONFIG_COMPONENT_CUSTOM_ADMIN_VIEWS_ADDCUSTOM_ADMIN_VIEWS=" COM_COMPONENTBUILDER_CONFIG_COMPONENT_DASHBOARD_DASHBOARD_TAB="Component Dashboard (dashboard_tab)" COM_COMPONENTBUILDER_CONFIG_COMPONENT_SITE_VIEWS_ADDSITE_VIEWS="Component Site Views (addsite_views)" COM_COMPONENTBUILDER_CONFIG_COMPONENT_UPDATES_VERSION_UPDATE="Component Updates (version_update)" -COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_DESCRIPTION="Here you can set the path to where all components are backed up to." -COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_HINT="/home/user/fullbackup" -COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_LABEL="Cronjob Backup Folder Path" -COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_FOLDER_PATH_MESSAGE="Error! Please add some text here." -COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_SERVER_DESCRIPTION="Select your backup server for JCB package backups." -COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_SERVER_LABEL="Cronjob Backup Server" -COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_TYPE_DESCRIPTION="Select how you would like to backup JCB" -COM_COMPONENTBUILDER_CONFIG_CRONJOB_BACKUP_TYPE_LABEL="Cronjob Backup type" COM_COMPONENTBUILDER_CONFIG_CUSTOM_ADMIN_VIEWS_AJAX_INPUT="Custom Admin Views (ajax_input)" COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_DESCRIPTION="Here you can set the path to the custom folder" COM_COMPONENTBUILDER_CONFIG_CUSTOM_FOLDER_PATH_HINT="/home/user/custom" @@ -3454,8 +3435,6 @@ COM_COMPONENTBUILDER_CONFIG_EXPORT_EMAIL_DESCRIPTION="Enter Email" COM_COMPONENTBUILDER_CONFIG_EXPORT_EMAIL_HINT="Email Here" COM_COMPONENTBUILDER_CONFIG_EXPORT_EMAIL_LABEL="Email" COM_COMPONENTBUILDER_CONFIG_EXPORT_EMAIL_MESSAGE="Error! Please email address here." -COM_COMPONENTBUILDER_CONFIG_EXPORT_LANGUAGE_STRINGS_DESCRIPTION="All the export of language strings during JCB package export." -COM_COMPONENTBUILDER_CONFIG_EXPORT_LANGUAGE_STRINGS_LABEL="Export Language Strings" COM_COMPONENTBUILDER_CONFIG_EXPORT_LICENSE_DESCRIPTION="Add License Here" COM_COMPONENTBUILDER_CONFIG_EXPORT_LICENSE_HINT="Add License Here" COM_COMPONENTBUILDER_CONFIG_EXPORT_LICENSE_LABEL="License" @@ -3495,12 +3474,9 @@ COM_COMPONENTBUILDER_CONFIG_GLOBAL_DESC="The Global Parameters" COM_COMPONENTBUILDER_CONFIG_GLOBAL_LABEL="Global" COM_COMPONENTBUILDER_CONFIG_GRADIANT_LOAD="Gradient" COM_COMPONENTBUILDER_CONFIG_HIDE="Hide" -COM_COMPONENTBUILDER_CONFIG_IMPORT_GUID_ONLY_DESCRIPTION="Force that all JCB package import (search for local items) is done with GUID value only." -COM_COMPONENTBUILDER_CONFIG_IMPORT_GUID_ONLY_LABEL="Import by GUID only!" COM_COMPONENTBUILDER_CONFIG_INACTIVE="Inactive" COM_COMPONENTBUILDER_CONFIG_INTELLIGENT_ADDREMOVEIF="Intelligent (add&remove+if)" COM_COMPONENTBUILDER_CONFIG_JCB_COMMUNITY_PACKAGES="JCB Community Packages" -COM_COMPONENTBUILDER_CONFIG_JCB_PACKAGES="JCB Packages" COM_COMPONENTBUILDER_CONFIG_JCB_PACKAGE_DIRECTORIES_DESCRIPTION="Here you can manage what package directories show in the JCB package import area." COM_COMPONENTBUILDER_CONFIG_JCB_PACKAGE_DIRECTORIES_LABEL="Directories" COM_COMPONENTBUILDER_CONFIG_JCB_POWERS_PATH_DESCRIPTION="Here you can set the path to the powers folder. Recommended that you always place it inside the libraries. You don't need to add a full path here, so libraries/jcb_powers will mean /home/username/public_html/libraries/jcb_powers when installed. You should always use two folders here, libraries + one more for example:
libraries/jcb_powers" @@ -3515,7 +3491,7 @@ COM_COMPONENTBUILDER_CONFIG_JQUERY_LOAD_LABEL="Load Joomla jQuery" COM_COMPONENTBUILDER_CONFIG_JQUERY_REMOVE="Remove jQuery" COM_COMPONENTBUILDER_CONFIG_LANGUAGE_LABEL="Language" COM_COMPONENTBUILDER_CONFIG_LAYOUT_LABEL="Layout" -COM_COMPONENTBUILDER_CONFIG_LOCAL_FOLDER="Local Folder" +COM_COMPONENTBUILDER_CONFIG_LEGACY_MODE="Legacy Mode" COM_COMPONENTBUILDER_CONFIG_LOCAL_POWERS_REPOSITORY_PATH_DESCRIPTION="Here you can set the path to the super powers local repository folder, where [layer:core] and all targeted [layer:own] sub paths will be placed with their selective [switch:approved] powers." COM_COMPONENTBUILDER_CONFIG_LOCAL_POWERS_REPOSITORY_PATH_HINT="/home/power" COM_COMPONENTBUILDER_CONFIG_LOCAL_POWERS_REPOSITORY_PATH_LABEL="Local Powers Repository Path" @@ -3563,14 +3539,11 @@ COM_COMPONENTBUILDER_CONFIG_OFF="Off" COM_COMPONENTBUILDER_CONFIG_ON="On" COM_COMPONENTBUILDER_CONFIG_ONLY_EXTRA="Only Extra" COM_COMPONENTBUILDER_CONFIG_ORIGINAL_VDM="Original (VDM)" -COM_COMPONENTBUILDER_CONFIG_PACKAGE_NAME_PLAEHOLDERS_DESCRIPTION="[YEAR] [MONTH] [DAY] [HOUR] [MINUTE]" -COM_COMPONENTBUILDER_CONFIG_PACKAGE_NAME_PLAEHOLDERS_LABEL="Package Name Placeholders" COM_COMPONENTBUILDER_CONFIG_PERCENTAGELANGUAGEADD_DESCRIPTION="Select percentage any language should be translated before the system should add the language to the component during compilation." COM_COMPONENTBUILDER_CONFIG_PERCENTAGELANGUAGEADD_LABEL="Add Language if %? ready." COM_COMPONENTBUILDER_CONFIG_PHP_MAIL="PHP Mail" COM_COMPONENTBUILDER_CONFIG_POWERS_REPOSITORY_DESCRIPTION="This adds powers to a local repository folder. All approved powers, linked to a component, will during compiling be moved to your local powers repository folder into their selective target paths." COM_COMPONENTBUILDER_CONFIG_POWERS_REPOSITORY_LABEL="Activate Super Powers?" -COM_COMPONENTBUILDER_CONFIG_REMOTE_SERVER="Remote Server" COM_COMPONENTBUILDER_CONFIG_REPEATABLETABLE_JOOMLA="Repeatable-table (joomla)" COM_COMPONENTBUILDER_CONFIG_REPEATABLE_JOOMLA="Repeatable (Joomla)" COM_COMPONENTBUILDER_CONFIG_REPEATABLE_UIKIT="Repeatable (UIkit)" @@ -5262,6 +5235,7 @@ COM_COMPONENTBUILDER_GET_PACKAGE="Get Package" COM_COMPONENTBUILDER_GIVE_TO_JCB="Give to JCB" COM_COMPONENTBUILDER_GLOBAL="Global" COM_COMPONENTBUILDER_GLUECODE="Glue/Code" +COM_COMPONENTBUILDER_GO_BACK_TO_S_LIST_VIEW="Go back to %s list view." COM_COMPONENTBUILDER_GRAB_THE_LATEST_S_TESTING_RELEASE="Grab the latest %s testing release!" COM_COMPONENTBUILDER_GREAT_THIS_FUNCTION_NAME_WILL_WORK="Great, this function name will work!" COM_COMPONENTBUILDER_GREAT_THIS_PLACEHOLDER_WILL_WORK="Great, this placeholder will work!" @@ -5451,28 +5425,28 @@ COM_COMPONENTBUILDER_INDENTATION_OPTIONS="Indentation Options" COM_COMPONENTBUILDER_INIT="Init" COM_COMPONENTBUILDER_INITIALIZATION_SELECTION="Selection" COM_COMPONENTBUILDER_INITIALIZATION_SELECTION_DESC="Initialization Selection" -COM_COMPONENTBUILDER_INITIALIZE_ADMIN_VIEWS="Initialize Admin Views" -COM_COMPONENTBUILDER_INITIALIZE_CLASS_EXTENDS="Initialize Class Extends" -COM_COMPONENTBUILDER_INITIALIZE_CLASS_METHODS="Initialize Class Methods" -COM_COMPONENTBUILDER_INITIALIZE_CLASS_PROPERTIES="Initialize Class Properties" -COM_COMPONENTBUILDER_INITIALIZE_COMPONENTS="Initialize Components" -COM_COMPONENTBUILDER_INITIALIZE_CUSTOM_ADMIN_VIEWS="Initialize Custom Admin Views" -COM_COMPONENTBUILDER_INITIALIZE_CUSTOM_CODES="Initialize Custom Codes" -COM_COMPONENTBUILDER_INITIALIZE_DYNAMIC_GETS="Initialize Dynamic Gets" -COM_COMPONENTBUILDER_INITIALIZE_FIELDS="Initialize Fields" -COM_COMPONENTBUILDER_INITIALIZE_FIELD_TYPES="Initialize Field Types" -COM_COMPONENTBUILDER_INITIALIZE_JOOMLA_POWERS="Initialize Joomla Powers" -COM_COMPONENTBUILDER_INITIALIZE_LAYOUTS="Initialize Layouts" -COM_COMPONENTBUILDER_INITIALIZE_LIBRARIES="Initialize Libraries" -COM_COMPONENTBUILDER_INITIALIZE_MODULES="Initialize Modules" -COM_COMPONENTBUILDER_INITIALIZE_PLACEHOLDERS="Initialize Placeholders" -COM_COMPONENTBUILDER_INITIALIZE_PLUGINS="Initialize Plugins" -COM_COMPONENTBUILDER_INITIALIZE_POWERS="Initialize Powers" -COM_COMPONENTBUILDER_INITIALIZE_REPOSITORIES="Initialize Repositories" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESADMIN_VIEWSA="Initialize Admin Views" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESCLASS_EXTENDSA="Initialize Class Extends" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESCLASS_METHODSA="Initialize Class Methods" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESCLASS_PROPERTIESA="Initialize Class Properties" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESCOMPONENTSA="Initialize Components" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESCUSTOM_ADMIN_VIEWSA="Initialize Custom Admin Views" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESCUSTOM_CODESA="Initialize Custom Codes" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESDYNAMIC_GETSA="Initialize Dynamic Gets" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESFIELDSA="Initialize Fields" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESFIELD_TYPESA="Initialize Field Types" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESJOOMLA_POWERSA="Initialize Joomla Powers" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESLAYOUTSA="Initialize Layouts" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESLIBRARIESA="Initialize Libraries" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESMODULESA="Initialize Modules" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESPLACEHOLDERSA="Initialize Placeholders" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESPLUGINSA="Initialize Plugins" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESPOWERSA="Initialize Powers" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESREPOSITORIESA="Initialize Repositories" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESSITE_VIEWSA="Initialize Site Views" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESSNIPPETSA="Initialize Snippets" +COM_COMPONENTBUILDER_INITIALIZE_A_HREFS_TITLESTEMPLATESA="Initialize Templates" COM_COMPONENTBUILDER_INITIALIZE_SELECTED_S_ITEMS="Initialize selected [%s] items" -COM_COMPONENTBUILDER_INITIALIZE_SITE_VIEWS="Initialize Site Views" -COM_COMPONENTBUILDER_INITIALIZE_SNIPPETS="Initialize Snippets" -COM_COMPONENTBUILDER_INITIALIZE_TEMPLATES="Initialize Templates" COM_COMPONENTBUILDER_INVALID_AREA_SELECTED="Invalid area selected." COM_COMPONENTBUILDER_INVALID_COMPONENT_OBJECT_MISSING_REQUIRED_PROPERTIES="Invalid component object: Missing required properties." COM_COMPONENTBUILDER_INVALID_REPO_SELECTED="Invalid repo selected." @@ -6077,6 +6051,8 @@ COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_CLASS_HELPER_DESCRIPTION="You can add a h COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_CLASS_HELPER_HEADER_DESCRIPTION="You can add your own custom helper header script." COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_CLASS_HELPER_HEADER_LABEL="Add Class Helper Header" COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_CLASS_HELPER_LABEL="Add Class Helper" +COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_DEFAULT_HEADER_DESCRIPTION="You can add your own default header script." +COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_DEFAULT_HEADER_LABEL="Add Default Header" COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_METHOD_UNINSTALL_LABEL="Add PHP to the uninstall method" COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_POSTFLIGHT_INSTALL_LABEL="Add PHP in the postflight install (event)" COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_POSTFLIGHT_UPDATE_LABEL="Add PHP in the postflight update (event)" @@ -6106,6 +6082,8 @@ COM_COMPONENTBUILDER_JOOMLA_MODULE_CUSTOM_VALUE_DESCRIPTION="Enter custom value COM_COMPONENTBUILDER_JOOMLA_MODULE_CUSTOM_VALUE_HINT="Custom Value Here" COM_COMPONENTBUILDER_JOOMLA_MODULE_CUSTOM_VALUE_LABEL="Custom Value" COM_COMPONENTBUILDER_JOOMLA_MODULE_DEFAULT_DESCRIPTION="Add the code here." +COM_COMPONENTBUILDER_JOOMLA_MODULE_DEFAULT_HEADER_DESCRIPTION="The default header for the Module Template." +COM_COMPONENTBUILDER_JOOMLA_MODULE_DEFAULT_HEADER_LABEL="Default Header" COM_COMPONENTBUILDER_JOOMLA_MODULE_DEFAULT_LABEL="Default Tmpl" COM_COMPONENTBUILDER_JOOMLA_MODULE_DESCRIPTION_DESCRIPTION="Add Description Here" COM_COMPONENTBUILDER_JOOMLA_MODULE_DESCRIPTION_HINT="Add Description Here" @@ -6123,7 +6101,7 @@ COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELDS_NAME_DESCRIPTION="Leave default if you COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELDS_NAME_HINT="params" COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELDS_NAME_LABEL="Fields Name" COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELDS_RULES_PATHS_DESCRIPTION="Where should the custom fields and rules be placed." -COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELDS_RULES_PATHS_LABEL="Fields & Rules Paths" +COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELDS_RULES_PATHS_LABEL="Fields & Rules Location" COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELD_DESCRIPTION="Select a field" COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELD_HINT="Select a field" COM_COMPONENTBUILDER_JOOMLA_MODULE_FIELD_LABEL="Field" @@ -6217,6 +6195,8 @@ COM_COMPONENTBUILDER_JOOMLA_MODULE_INIT_BUTTON_ACCESS_DESC="Allows the users in COM_COMPONENTBUILDER_JOOMLA_MODULE_LABEL_DESCRIPTION="Not mandatory, used to Label the Fieldset" COM_COMPONENTBUILDER_JOOMLA_MODULE_LABEL_HINT="Name" COM_COMPONENTBUILDER_JOOMLA_MODULE_LABEL_LABEL="Label" +COM_COMPONENTBUILDER_JOOMLA_MODULE_LAYOUT_DATA_DESCRIPTION="The code in getLayoutData lets you adapt/extend data before rendering, with $helper, $data, and $params extracted into template variables." +COM_COMPONENTBUILDER_JOOMLA_MODULE_LAYOUT_DATA_LABEL="getLayoutData
(only for Joomla 4+)" COM_COMPONENTBUILDER_JOOMLA_MODULE_LIBRARIES_DESCRIPTION="Select the media libraries you want to use here." COM_COMPONENTBUILDER_JOOMLA_MODULE_LIBRARIES_LABEL="Media Libraries" COM_COMPONENTBUILDER_JOOMLA_MODULE_MODIFIED_BY_DESC="The last user that modified this Joomla Module." @@ -6230,8 +6210,8 @@ COM_COMPONENTBUILDER_JOOMLA_MODULE_MODULE_VERSION_DESCRIPTION="Add Version Numbe COM_COMPONENTBUILDER_JOOMLA_MODULE_MODULE_VERSION_HINT="1.0.0" COM_COMPONENTBUILDER_JOOMLA_MODULE_MODULE_VERSION_LABEL="Version" COM_COMPONENTBUILDER_JOOMLA_MODULE_MODULE_VERSION_MESSAGE="Error! Please add version here." -COM_COMPONENTBUILDER_JOOMLA_MODULE_MOD_CODE_DESCRIPTION="The code that is added to the main mod_name.php file" -COM_COMPONENTBUILDER_JOOMLA_MODULE_MOD_CODE_LABEL="Module Code" +COM_COMPONENTBUILDER_JOOMLA_MODULE_MOD_CODE_DESCRIPTION="The code that is added to the main mod_name.php file in a Joomla 3 build." +COM_COMPONENTBUILDER_JOOMLA_MODULE_MOD_CODE_LABEL="Module Code
(only for Joomla 3)" COM_COMPONENTBUILDER_JOOMLA_MODULE_MYSQL="MySQL" COM_COMPONENTBUILDER_JOOMLA_MODULE_NAME_DESCRIPTION="Enter Name Here" COM_COMPONENTBUILDER_JOOMLA_MODULE_NAME_HINT="Name Here" @@ -6242,6 +6222,8 @@ COM_COMPONENTBUILDER_JOOMLA_MODULE_NO="No" COM_COMPONENTBUILDER_JOOMLA_MODULE_NONE="None" COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_ADD_PHP_LANGUAGE_STRING_DESCRIPTION="<?php echo Text::_('Text'); ?>
<?php echo Text::sprintf('Hello %s', $this->user->name); ?>
Just get UPPERCASE language string:
<?php echo JustTEXT::_('Text'); ?>" COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_ADD_PHP_LANGUAGE_STRING_LABEL="Add PHP Language String" +COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_LAYOUT_DATA_DESCRIPTION="

Code entered here is injected into the module's getLayoutData method in the dispatcher, after helper and data classes have been loaded. Within this method, your helper are available under $data['helper'] and any custom gets under $data['data'] and params are in $data['params']. Since the $data array is extracted before rendering the layout, these become direct variables in the template, (example $data['helper'] becomes $helper). This allows you to adapt or extend the data passed to the module layout just before it is displayed.

" +COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_LAYOUT_DATA_LABEL="Dispatcher getLayoutData Method" COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_LIBRARIES_OPTIONS_DESCRIPTION="

All libraries added to modules are added to the component media folder for now

So over here you are able to manually add HTML code to your model default tmpl.

" COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_LIBRARIES_OPTIONS_LABEL="Libraries Options" COM_COMPONENTBUILDER_JOOMLA_MODULE_NOTE_LINKED_TO_NOTICE_DESCRIPTION="
Searching the database.
" @@ -6540,7 +6522,7 @@ COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELDS_NAME_DESCRIPTION="Leave default if you COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELDS_NAME_HINT="params" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELDS_NAME_LABEL="Fields Name" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELDS_RULES_PATHS_DESCRIPTION="Where should the custom fields and rules be placed." -COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELDS_RULES_PATHS_LABEL="Fields & Rules Paths" +COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELDS_RULES_PATHS_LABEL="Fields & Rules Location" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELD_DESCRIPTION="Select a field" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELD_HINT="Select a field" COM_COMPONENTBUILDER_JOOMLA_PLUGIN_FIELD_LABEL="Field" @@ -9018,6 +9000,8 @@ COM_COMPONENTBUILDER_SUCCESS="Success" COM_COMPONENTBUILDER_SUPER_POWER="Super Power" COM_COMPONENTBUILDER_SUPPORT_JCB_TODAY="Support JCB Today" COM_COMPONENTBUILDER_SUPPORT_JOOMLA_COMPONENT_BUILDER_JCB_WITH_A_BFINANCIAL_DONATIONB_TO_SHOW_GRATITUDE_FOR_THE_TIME_AND_EFFORT_SAVED_IN_YOUR_DEVELOPMENT_PROCESS_YOUR_CONTRIBUTION_NO_MATTER_THE_SIZE_WILL_BE_APPRECIATED_BY_THE_PROJECTS_TEAM_AND_THE_WIDER_COMMUNITY_HELP_ENSURE_THE_GROWTH_AND_RELEVANCE_OF_THIS_ESSENTIAL_TOOL="Support Joomla Component Builder (JCB) with a financial donation to show gratitude for the time and effort saved in your development process. Your contribution, no matter the size, will be appreciated by the project's team and the wider community. Help ensure the growth and relevance of this essential tool." +COM_COMPONENTBUILDER_SYSTEMCOULD_NOT_RESTORE_FILE_TO_SBRBRBERROR_MESSAGEBBRS="System:Could not restore file to %s

Error Message:
%s" +COM_COMPONENTBUILDER_SYSTEMCOULD_NOT_RESTORE_FOLDER_TO_SBRBRBERROR_MESSAGEBBRS="System:Could not restore folder to %s

Error Message:
%s" COM_COMPONENTBUILDER_SZIP_COULD_NOT_BE_INSTALLED="%s.zip could not be installed!" COM_COMPONENTBUILDER_SZIP_WAS_REMOVED_THE_FROM_TMP_FOLDER_DURING_INSTALLATION="%s.zip was removed the from tmp folder during installation!" COM_COMPONENTBUILDER_S_BEING_IMPORTED="%s Being Imported" @@ -9261,7 +9245,9 @@ COM_COMPONENTBUILDER_THE_COMPONENT_PLUGINS="The component plugins" COM_COMPONENTBUILDER_THE_COMPONENT_SITE_ROUTER="The component site router" COM_COMPONENTBUILDER_THE_COMPONENT_SITE_VIEWS="The component site views" COM_COMPONENTBUILDER_THE_COMPONENT_UPDATES="The component updates" -COM_COMPONENTBUILDER_THE_CONTINUED_SUPPORT_OF_INDIVIDUALS_LIKE_YOU_HAS_ALLOWED_JOOMLA_COMPONENT_BUILDER_JCB_TO_THRIVE_FOR_SEVEN_YEARS_SINCE_GOING_PUBLIC_YOUR_CONTRIBUTIONS_HAVE_BEEN_CRUCIAL_IN_ENSURING_THE_GROWTH_AND_RELEVANCE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS_THANK_YOU_FOR_YOUR_SUPPORT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY="The continued support of individuals like you has allowed Joomla Component Builder (JCB) to thrive for seven years since going public. Your contributions have been crucial in ensuring the growth and relevance of this vital tool for PHP programmers. Thank you for your support and for being a part of JCB's journey." +COM_COMPONENTBUILDER_THE_CONDITIONAL_SCRIPT_BUILDER_FOR_BSB_IS_NOT_READY_SORRY="The conditional script builder for %s is not ready, sorry!" +COM_COMPONENTBUILDER_THE_CONDITIONAL_SCRIPT_BUILDER_FOR_IDBSB_IS_NOT_READY_SORRY="The conditional script builder for ID:%s is not ready, sorry!" +COM_COMPONENTBUILDER_THE_CONTINUED_SUPPORT_OF_INDIVIDUALS_LIKE_YOU_HAS_ALLOWED_JOOMLA_COMPONENT_BUILDER_JCB_TO_THRIVE_FOR_TEN_YEARS_SINCE_GOING_PUBLIC_YOUR_CONTRIBUTIONS_HAVE_BEEN_CRUCIAL_IN_ENSURING_THE_GROWTH_AND_RELEVANCE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS_THANK_YOU_FOR_YOUR_SUPPORT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY="The continued support of individuals like you has allowed Joomla Component Builder (JCB) to thrive for ten years since going public. Your contributions have been crucial in ensuring the growth and relevance of this vital tool for PHP programmers. Thank you for your support and for being a part of JCB's journey." COM_COMPONENTBUILDER_THE_CUSTOM_ADMIN_VIEW_HAS_SUCCESSFULLY_BEEN_PUSHED="The Custom Admin View has successfully been pushed." COM_COMPONENTBUILDER_THE_CUSTOM_ADMIN_VIEW_HAS_SUCCESSFULLY_BEEN_RESET="The Custom Admin View has successfully been reset." COM_COMPONENTBUILDER_THE_CUSTOM_CODE_HAS_SUCCESSFULLY_BEEN_PUSHED="The Custom Code has successfully been pushed." @@ -9669,7 +9655,7 @@ COM_COMPONENTBUILDER_WARNING_UPLOAD_ERROR="Warning, upload error." COM_COMPONENTBUILDER_WEBSITE="Website" COM_COMPONENTBUILDER_WEBSITE_OF_S="Website of %s" COM_COMPONENTBUILDER_WE_EXTEND_OUR_GRATITUDE_TO_ALL_THOSE_WHO_SUPPORT_JOOMLA_COMPONENT_BUILDER_JCB_WHETHER_AS_A_HOBBY_OR_AS_A_PART_OF_THEIR_BUSINESS_YOUR_CONTRIBUTIONS_WHETHER_FINANCIAL_OR_IN_THE_FORM_OF_ACTIVE_INVOLVEMENT_HAVE_HAD_A_SIGNIFICANT_IMPACT_ON_ENSURING_THE_GROWTH_AND_RELEVANCE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS_WE_HIGHLY_VALUE_THE_DEDICATION_OF_HOBBYISTS_AND_THE_COMMITMENT_OF_COMPANIES_WHO_SUPPORT_JCB_AS_THEY_HAVE_ALLOWED_THE_PROJECT_TO_CONTINUE_ITS_DEVELOPMENT_AND_MAINTENANCE_PROVIDING_VALUABLE_RESOURCES_FOR_THE_COMMUNITY_WE_ARE_GRATEFUL_FOR_YOUR_CONTRIBUTIONS_NO_MATTER_HOW_SMALL_AND_THANK_YOU_FOR_BEING_A_PART_OF_THE_POSITIVE_IMPACT_THAT_JCB_HAS_ON_THE_PHP_PROGRAMMING_COMMUNITY="We extend our gratitude to all those who support Joomla Component Builder (JCB), whether as a hobby or as a part of their business. Your contributions, whether financial or in the form of active involvement, have had a significant impact on ensuring the growth and relevance of this vital tool for PHP programmers. We highly value the dedication of hobbyists and the commitment of companies who support JCB, as they have allowed the project to continue its development and maintenance, providing valuable resources for the community. We are grateful for your contributions, no matter how small, and thank you for being a part of the positive impact that JCB has on the PHP programming community." -COM_COMPONENTBUILDER_WE_EXTEND_OUR_HEARTFELT_APPRECIATION_TO_THOSE_WHO_HAVE_SUPPORTED_THE_JOOMLA_COMPONENT_BUILDER_JCB_PROJECT_OVER_THE_YEARS_YOUR_CONTRIBUTIONS_NO_MATTER_HOW_BIG_OR_SMALL_HAVE_BEEN_INSTRUMENTAL_IN_ENSURING_ITS_GROWTH_AND_RELEVANCE_AS_A_VITAL_TOOL_FOR_PHP_PROGRAMMERS_SEVEN_YEARS_AFTER_GOING_PUBLIC_JCB_IS_STILL_HERE_TODAY_BECAUSE_OF_THE_SUPPORT_OF_INDIVIDUALS_LIKE_YOU_WHO_BELIEVE_IN_THE_IMPORTANCE_OF_THIS_OPENSOURCE_PROJECT_YOUR_GENEROSITY_HAS_ALLOWED_THE_PROJECT_TO_CONTINUE_ITS_DEVELOPMENT_AND_MAINTENANCE_PROVIDING_VALUABLE_RESOURCES_FOR_THE_COMMUNITY_THANK_YOU_FOR_YOUR_UNWAVERING_SUPPORT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY="We extend our heartfelt appreciation to those who have supported the Joomla Component Builder (JCB) project over the years. Your contributions, no matter how big or small, have been instrumental in ensuring its growth and relevance as a vital tool for PHP programmers. Seven years after going public, JCB is still here today because of the support of individuals like you who believe in the importance of this open-source project. Your generosity has allowed the project to continue its development and maintenance, providing valuable resources for the community. Thank you for your unwavering support and for being a part of JCB's journey." +COM_COMPONENTBUILDER_WE_EXTEND_OUR_HEARTFELT_APPRECIATION_TO_THOSE_WHO_HAVE_SUPPORTED_THE_JOOMLA_COMPONENT_BUILDER_JCB_PROJECT_OVER_THE_YEARS_YOUR_CONTRIBUTIONS_NO_MATTER_HOW_BIG_OR_SMALL_HAVE_BEEN_INSTRUMENTAL_IN_ENSURING_ITS_GROWTH_AND_RELEVANCE_AS_A_VITAL_TOOL_FOR_PHP_PROGRAMMERS_TEN_YEARS_AFTER_GOING_PUBLIC_JCB_IS_STILL_HERE_TODAY_BECAUSE_OF_THE_SUPPORT_OF_INDIVIDUALS_LIKE_YOU_WHO_BELIEVE_IN_THE_IMPORTANCE_OF_THIS_OPENSOURCE_PROJECT_YOUR_GENEROSITY_HAS_ALLOWED_THE_PROJECT_TO_CONTINUE_ITS_DEVELOPMENT_AND_MAINTENANCE_PROVIDING_VALUABLE_RESOURCES_FOR_THE_COMMUNITY_THANK_YOU_FOR_YOUR_UNWAVERING_SUPPORT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY="We extend our heartfelt appreciation to those who have supported the Joomla Component Builder (JCB) project over the years. Your contributions, no matter how big or small, have been instrumental in ensuring its growth and relevance as a vital tool for PHP programmers. Ten years after going public, JCB is still here today because of the support of individuals like you who believe in the importance of this open-source project. Your generosity has allowed the project to continue its development and maintenance, providing valuable resources for the community. Thank you for your unwavering support and for being a part of JCB's journey." COM_COMPONENTBUILDER_WE_EXTEND_OUR_SINCERE_APPRECIATION_TO_THE_COMPANIES_WHO_USE_JOOMLA_COMPONENT_BUILDER_JCB_AND_SUPPORT_THE_PROJECT_YOUR_CONTRIBUTIONS_WHETHER_FINANCIAL_OR_IN_THE_FORM_OF_ACTIVE_INVOLVEMENT_HAVE_BEEN_INSTRUMENTAL_IN_ENSURING_THE_GROWTH_AND_RELEVANCE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS_YOUR_SUPPORT_HAS_ALLOWED_JCB_TO_CONTINUE_ITS_DEVELOPMENT_AND_MAINTENANCE_PROVIDING_VALUABLE_RESOURCES_FOR_THE_COMMUNITY_THANK_YOU_FOR_YOUR_UNWAVERING_COMMITMENT_TO_THE_PROJECT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY="We extend our sincere appreciation to the companies who use Joomla Component Builder (JCB) and support the project. Your contributions, whether financial or in the form of active involvement, have been instrumental in ensuring the growth and relevance of this vital tool for PHP programmers. Your support has allowed JCB to continue its development and maintenance, providing valuable resources for the community. Thank you for your unwavering commitment to the project and for being a part of JCB's journey." COM_COMPONENTBUILDER_WE_FAILED_TO_BUILD_THE_DETAILS_OF_THE_SEARCH_RESULTS="We failed to build the details of the search results." COM_COMPONENTBUILDER_WE_FAILED_TO_MOVE_BSB="We failed to move %s!" diff --git a/admin/layouts/jcbsupportmessage.php b/admin/layouts/jcbsupportmessage.php index c7f59d4ec..b449ef9e4 100644 --- a/admin/layouts/jcbsupportmessage.php +++ b/admin/layouts/jcbsupportmessage.php @@ -23,13 +23,13 @@ defined('JPATH_BASE') or die; // Different support requests/appreciation $support = [ Text::_("COM_COMPONENTBUILDER_JOOMLA_COMPONENT_BUILDER_JCB_IS_A_CRUCIAL_TOOL_FOR_PHP_PROGRAMMERS_WHO_USE_JOOMLA_TO_EARN_A_LIVING_BY_MAKING_A_BFINANCIAL_DONATIONB_YOU_CAN_SUPPORT_THE_GROWTH_AND_CONTINUITY_OF_THIS_VITAL_RESOURCE_AND_ENSURE_ITS_RELEVANCE_FOR_YEARS_TO_COME_YOUR_CONTRIBUTION_NO_MATTER_HOW_BIG_OR_SMALL_WILL_BE_DEEPLY_APPRECIATED_BY_THE_PROJECTS_TEAM_AND_THE_WIDER_COMMUNITY"), - Text::_("COM_COMPONENTBUILDER_THE_CONTINUED_SUPPORT_OF_INDIVIDUALS_LIKE_YOU_HAS_ALLOWED_JOOMLA_COMPONENT_BUILDER_JCB_TO_THRIVE_FOR_SEVEN_YEARS_SINCE_GOING_PUBLIC_YOUR_CONTRIBUTIONS_HAVE_BEEN_CRUCIAL_IN_ENSURING_THE_GROWTH_AND_RELEVANCE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS_THANK_YOU_FOR_YOUR_SUPPORT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY"), + Text::_("COM_COMPONENTBUILDER_THE_CONTINUED_SUPPORT_OF_INDIVIDUALS_LIKE_YOU_HAS_ALLOWED_JOOMLA_COMPONENT_BUILDER_JCB_TO_THRIVE_FOR_TEN_YEARS_SINCE_GOING_PUBLIC_YOUR_CONTRIBUTIONS_HAVE_BEEN_CRUCIAL_IN_ENSURING_THE_GROWTH_AND_RELEVANCE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS_THANK_YOU_FOR_YOUR_SUPPORT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY"), Text::_("COM_COMPONENTBUILDER_SUPPORT_JOOMLA_COMPONENT_BUILDER_JCB_WITH_A_BFINANCIAL_DONATIONB_TO_SHOW_GRATITUDE_FOR_THE_TIME_AND_EFFORT_SAVED_IN_YOUR_DEVELOPMENT_PROCESS_YOUR_CONTRIBUTION_NO_MATTER_THE_SIZE_WILL_BE_APPRECIATED_BY_THE_PROJECTS_TEAM_AND_THE_WIDER_COMMUNITY_HELP_ENSURE_THE_GROWTH_AND_RELEVANCE_OF_THIS_ESSENTIAL_TOOL"), Text::_("COM_COMPONENTBUILDER_INVEST_IN_THE_FUTURE_OF_JOOMLA_COMPONENT_BUILDER_JCB_BY_MAKING_A_BFINANCIAL_DONATIONB_SUPPORT_THE_NECESSARY_DEVELOPMENT_AND_MAINTENANCE_OF_THIS_OPENSOURCE_PROJECT_ENSURING_ITS_CONTINUED_GROWTH_AND_RELEVANCE_FOR_THE_COMMUNITY_YOUR_CONTRIBUTION_WILL_HELP_SECURE_THE_FUTURE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS"), Text::_("COM_COMPONENTBUILDER_INVEST_IN_THE_FUTURE_OF_JOOMLA_COMPONENT_BUILDER_JCB_BY_MAKING_A_BFINANCIAL_CONTRIBUTIONB_NO_MATTER_HOW_SMALL_THE_CONTINUAL_SUPPORT_OF_ALL_THOSE_USING_THE_TOOL_WILL_BE_MORE_THAN_ENOUGH_TO_ENSURE_ITS_CONTINUED_GROWTH_AND_RELEVANCE_BY_INVESTING_IN_THIS_OPENSOURCE_PROJECT_YOU_ARE_SECURING_ITS_FUTURE_AS_A_VITAL_TOOL_FOR_PHP_PROGRAMMERS"), Text::_("COM_COMPONENTBUILDER_WE_EXTEND_OUR_GRATITUDE_TO_ALL_THOSE_WHO_SUPPORT_JOOMLA_COMPONENT_BUILDER_JCB_WHETHER_AS_A_HOBBY_OR_AS_A_PART_OF_THEIR_BUSINESS_YOUR_CONTRIBUTIONS_WHETHER_FINANCIAL_OR_IN_THE_FORM_OF_ACTIVE_INVOLVEMENT_HAVE_HAD_A_SIGNIFICANT_IMPACT_ON_ENSURING_THE_GROWTH_AND_RELEVANCE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS_WE_HIGHLY_VALUE_THE_DEDICATION_OF_HOBBYISTS_AND_THE_COMMITMENT_OF_COMPANIES_WHO_SUPPORT_JCB_AS_THEY_HAVE_ALLOWED_THE_PROJECT_TO_CONTINUE_ITS_DEVELOPMENT_AND_MAINTENANCE_PROVIDING_VALUABLE_RESOURCES_FOR_THE_COMMUNITY_WE_ARE_GRATEFUL_FOR_YOUR_CONTRIBUTIONS_NO_MATTER_HOW_SMALL_AND_THANK_YOU_FOR_BEING_A_PART_OF_THE_POSITIVE_IMPACT_THAT_JCB_HAS_ON_THE_PHP_PROGRAMMING_COMMUNITY"), Text::_("COM_COMPONENTBUILDER_WITHOUT_SUFFICIENT_SUPPORT_THE_FUTURE_OF_JOOMLA_COMPONENT_BUILDER_JCB_IS_IN_JEOPARDY_AS_A_VITAL_TOOL_FOR_PHP_PROGRAMMERS_IT_IS_CRUCIAL_TO_ENSURE_ITS_CONTINUED_DEVELOPMENT_AND_MAINTENANCE_BY_MAKING_A_BFINANCIAL_CONTRIBUTIONB_NO_MATTER_HOW_SMALL_YOU_ARE_HELPING_TO_SAFEGUARD_THE_FUTURE_OF_THIS_OPENSOURCE_PROJECT_NEGLECTING_TO_SUPPORT_JCB_COULD_RESULT_IN_ITS_DECLINE_AND_LOSS_AS_A_RESOURCE_FOR_THE_COMMUNITY"), - Text::_("COM_COMPONENTBUILDER_WE_EXTEND_OUR_HEARTFELT_APPRECIATION_TO_THOSE_WHO_HAVE_SUPPORTED_THE_JOOMLA_COMPONENT_BUILDER_JCB_PROJECT_OVER_THE_YEARS_YOUR_CONTRIBUTIONS_NO_MATTER_HOW_BIG_OR_SMALL_HAVE_BEEN_INSTRUMENTAL_IN_ENSURING_ITS_GROWTH_AND_RELEVANCE_AS_A_VITAL_TOOL_FOR_PHP_PROGRAMMERS_SEVEN_YEARS_AFTER_GOING_PUBLIC_JCB_IS_STILL_HERE_TODAY_BECAUSE_OF_THE_SUPPORT_OF_INDIVIDUALS_LIKE_YOU_WHO_BELIEVE_IN_THE_IMPORTANCE_OF_THIS_OPENSOURCE_PROJECT_YOUR_GENEROSITY_HAS_ALLOWED_THE_PROJECT_TO_CONTINUE_ITS_DEVELOPMENT_AND_MAINTENANCE_PROVIDING_VALUABLE_RESOURCES_FOR_THE_COMMUNITY_THANK_YOU_FOR_YOUR_UNWAVERING_SUPPORT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY"), + Text::_("COM_COMPONENTBUILDER_WE_EXTEND_OUR_HEARTFELT_APPRECIATION_TO_THOSE_WHO_HAVE_SUPPORTED_THE_JOOMLA_COMPONENT_BUILDER_JCB_PROJECT_OVER_THE_YEARS_YOUR_CONTRIBUTIONS_NO_MATTER_HOW_BIG_OR_SMALL_HAVE_BEEN_INSTRUMENTAL_IN_ENSURING_ITS_GROWTH_AND_RELEVANCE_AS_A_VITAL_TOOL_FOR_PHP_PROGRAMMERS_TEN_YEARS_AFTER_GOING_PUBLIC_JCB_IS_STILL_HERE_TODAY_BECAUSE_OF_THE_SUPPORT_OF_INDIVIDUALS_LIKE_YOU_WHO_BELIEVE_IN_THE_IMPORTANCE_OF_THIS_OPENSOURCE_PROJECT_YOUR_GENEROSITY_HAS_ALLOWED_THE_PROJECT_TO_CONTINUE_ITS_DEVELOPMENT_AND_MAINTENANCE_PROVIDING_VALUABLE_RESOURCES_FOR_THE_COMMUNITY_THANK_YOU_FOR_YOUR_UNWAVERING_SUPPORT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY"), Text::_("COM_COMPONENTBUILDER_WE_EXTEND_OUR_SINCERE_APPRECIATION_TO_THE_COMPANIES_WHO_USE_JOOMLA_COMPONENT_BUILDER_JCB_AND_SUPPORT_THE_PROJECT_YOUR_CONTRIBUTIONS_WHETHER_FINANCIAL_OR_IN_THE_FORM_OF_ACTIVE_INVOLVEMENT_HAVE_BEEN_INSTRUMENTAL_IN_ENSURING_THE_GROWTH_AND_RELEVANCE_OF_THIS_VITAL_TOOL_FOR_PHP_PROGRAMMERS_YOUR_SUPPORT_HAS_ALLOWED_JCB_TO_CONTINUE_ITS_DEVELOPMENT_AND_MAINTENANCE_PROVIDING_VALUABLE_RESOURCES_FOR_THE_COMMUNITY_THANK_YOU_FOR_YOUR_UNWAVERING_COMMITMENT_TO_THE_PROJECT_AND_FOR_BEING_A_PART_OF_JCBS_JOURNEY") ]; @@ -129,8 +129,8 @@ $support_button = $button_names[random_int(0, 32)]; GPLv3 License - - GitHub Stars + + GitHub Stars

diff --git a/admin/layouts/joomla_module/code_fullwidth.php b/admin/layouts/joomla_module/code_fullwidth.php deleted file mode 100644 index c62d366f4..000000000 --- a/admin/layouts/joomla_module/code_fullwidth.php +++ /dev/null @@ -1,44 +0,0 @@ - - * @git Joomla Component Builder - * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ - -// No direct access to this file -defined('_JEXEC') or die; - -// get the form -$form = $displayData->getForm(); - -// get the layout fields override method name (from layout path/ID) -$layout_path_array = explode('.', $this->getLayoutId()); -// Since we cannot pass the layout and tab names as parameters to the model method -// this name combination of tab and layout in the method name is the only work around -// seeing that JCB uses those two values (tab_name & layout_name) as the layout file name. -// example of layout name: details_left.php -// example of method name: getFields_details_left() -$fields_tab_layout = 'fields_' . $layout_path_array[1]; - -// get the fields -$fields = $displayData->get($fields_tab_layout) ?: array( - 'mod_code' -); - -$hiddenFields = $displayData->get('hidden_fields') ?: []; - -?> - -
- - - setFieldAttribute($field, 'type', 'hidden'); ?> - - renderField($field, null, null, array('class' => 'control-wrapper-' . $field)); ?> - -
- diff --git a/admin/layouts/joomla_module/code_left.php b/admin/layouts/joomla_module/code_left.php index 12dfd1018..a4654bc1a 100644 --- a/admin/layouts/joomla_module/code_left.php +++ b/admin/layouts/joomla_module/code_left.php @@ -26,7 +26,8 @@ $fields_tab_layout = 'fields_' . $layout_path_array[1]; // get the fields $fields = $displayData->get($fields_tab_layout) ?: array( - 'custom_get' + 'note_layout_data', + 'layout_data' ); $hiddenFields = $displayData->get('hidden_fields') ?: []; diff --git a/admin/layouts/joomla_module/code_right.php b/admin/layouts/joomla_module/code_right.php index 2fde4bf07..152caa033 100644 --- a/admin/layouts/joomla_module/code_right.php +++ b/admin/layouts/joomla_module/code_right.php @@ -26,7 +26,9 @@ $fields_tab_layout = 'fields_' . $layout_path_array[1]; // get the fields $fields = $displayData->get($fields_tab_layout) ?: array( - 'note_mod_file_options' + 'custom_get', + 'note_mod_file_options', + 'mod_code' ); $hiddenFields = $displayData->get('hidden_fields') ?: []; diff --git a/admin/layouts/joomla_module/html_fullwidth.php b/admin/layouts/joomla_module/html_fullwidth.php index d6f350ef7..2340e636f 100644 --- a/admin/layouts/joomla_module/html_fullwidth.php +++ b/admin/layouts/joomla_module/html_fullwidth.php @@ -26,6 +26,7 @@ $fields_tab_layout = 'fields_' . $layout_path_array[1]; // get the fields $fields = $displayData->get($fields_tab_layout) ?: array( + 'default_header', 'default', 'note_linked_to_notice', 'not_required' diff --git a/admin/layouts/joomla_module/html_left.php b/admin/layouts/joomla_module/html_left.php index a0060b874..456e60971 100644 --- a/admin/layouts/joomla_module/html_left.php +++ b/admin/layouts/joomla_module/html_left.php @@ -30,7 +30,8 @@ $fields = $displayData->get($fields_tab_layout) ?: array( 'description', 'libraries', 'note_libraries_options', - 'note_add_php_language_string' + 'note_add_php_language_string', + 'add_default_header' ); $hiddenFields = $displayData->get('hidden_fields') ?: []; diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index b9e0b698b..d10514d77 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -164,6 +164,7 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module` ( `asset_id` INT(10) unsigned NULL DEFAULT 0 COMMENT 'FK to the #__assets table.', `add_class_helper` TINYINT(1) NOT NULL DEFAULT 0, `add_class_helper_header` TINYINT(1) NOT NULL DEFAULT 0, + `add_default_header` TINYINT(1) NOT NULL DEFAULT 0, `add_php_method_uninstall` TINYINT(1) NOT NULL DEFAULT 0, `add_php_postflight_install` TINYINT(1) NOT NULL DEFAULT 0, `add_php_postflight_update` TINYINT(1) NOT NULL DEFAULT 0, @@ -180,9 +181,11 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module` ( `class_helper_header` TEXT NULL, `custom_get` TEXT NULL, `default` MEDIUMTEXT NULL, + `default_header` TEXT NULL, `description` TEXT NULL, `fields` TEXT NULL, `guid` VARCHAR(36) NULL DEFAULT '', + `layout_data` TEXT NULL, `libraries` TEXT NULL, `mod_code` TEXT NULL, `module_version` CHAR(64) NULL DEFAULT '', @@ -218,20 +221,20 @@ CREATE TABLE IF NOT EXISTS `#__componentbuilder_joomla_module` ( `ordering` INT(11) NULL DEFAULT 0, PRIMARY KEY (`id`), KEY `idx_system_name` (`system_name`), - KEY `idx_add_php_method_uninstall` (`add_php_method_uninstall`), - KEY `idx_add_php_postflight_update` (`add_php_postflight_update`), KEY `idx_add_php_postflight_install` (`add_php_postflight_install`), KEY `idx_add_php_preflight_uninstall` (`add_php_preflight_uninstall`), - KEY `idx_addreadme` (`addreadme`), - KEY `idx_snippet` (`snippet`), - KEY `idx_add_sql` (`add_sql`), + KEY `idx_add_php_preflight_update` (`add_php_preflight_update`), KEY `idx_update_server_target` (`update_server_target`), + KEY `idx_addreadme` (`addreadme`), + KEY `idx_add_sql` (`add_sql`), + KEY `idx_snippet` (`snippet`), + KEY `idx_add_php_postflight_update` (`add_php_postflight_update`), + KEY `idx_add_php_method_uninstall` (`add_php_method_uninstall`), KEY `idx_add_sql_uninstall` (`add_sql_uninstall`), KEY `idx_add_update_server` (`add_update_server`), KEY `idx_add_php_script_construct` (`add_php_script_construct`), - KEY `idx_add_php_preflight_install` (`add_php_preflight_install`), KEY `idx_add_sales_server` (`add_sales_server`), - KEY `idx_add_php_preflight_update` (`add_php_preflight_update`), + KEY `idx_add_php_preflight_install` (`add_php_preflight_install`), KEY `idx_guid` (`guid`), KEY `idx_name` (`name`), KEY `idx_access` (`access`), @@ -2104,10 +2107,10 @@ INSERT INTO `#__componentbuilder_joomla_component` (`id`, `add_menu_prefix`, `ad -- -- Dumping data for table `#__componentbuilder_joomla_module` -- -INSERT INTO `#__componentbuilder_joomla_module` (`id`, `class_helper_code`, `class_helper_header`, `add_class_helper`, `add_class_helper_header`, `add_php_method_uninstall`, `add_php_postflight_install`, `add_php_postflight_update`, `add_php_preflight_install`, `add_php_preflight_uninstall`, `add_php_preflight_update`, `add_php_script_construct`, `add_sales_server`, `add_sql`, `add_sql_uninstall`, `add_update_server`, `addreadme`, `custom_get`, `default`, `description`, `fields`, `guid`, `libraries`, `mod_code`, `module_version`, `name`, `php_method_uninstall`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_uninstall`, `php_preflight_update`, `php_script_construct`, `readme`, `sales_server`, `sql`, `sql_uninstall`, `system_name`, `target`, `update_server`, `update_server_target`, `update_server_url`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES -(8, '', '', 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '', 'PGgxPjw/cGhwIGVjaG8gSm9vbWxhX19fYmE2MzI2ZWZfY2I3OV80MzQ4XzgwZjRfYWIwODYwODJlM2M1X19fUG93ZXI6Ol8oJ2NQYW5lbCBSZWRpcmVjdCcpOyA/PjwvaDE+DQo8cD48P3BocCBlY2hvIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdTZXR1cCB5b3VyIHJlZGlyZWN0IGluIHRoZSBhZG1pbiBtb2RlbCA8Yj5jUGFuZWwgUmVkaXJlY3Q8L2I+IG9yIGNoYW5nZSB0aGlzIG1vZGVscyA8Yj5BY2Nlc3M8L2I+IHRvIG5vdCB0YXJnZXQgdGhpcyB1c2VycyBhY2Nlc3MgbGV2ZWwuJyk7ID8+PC9wPg==', 'To Redirect your Control Panel to any other part of the admin area in your Joomla for a selected group of users', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Details\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"12035b51-753b-4e3f-9f41-cde3a6046286\",\"custom_value\":\"\"}}}}', 'c013529f-2a8d-4e93-8767-ed2583867aeb', '', 'Ly8gZ2V0IHRoZSBzZXQgdmFsdWVzIGZvcm0gY3BhbmVsIHJlZGlyZWN0IG1vZHVsZQ0KJHJlZGlyZWN0ID0gJHBhcmFtcy0+Z2V0KCdyZWRpcmVjdCcsbnVsbCk7DQoNCi8vIHJlZGlyZWN0IGlmIHRoZSB1c2VyIGlzIGluIGdpdmVuIHNlbGVjdGVkIGdyb3VwDQppZiAoJHJlZGlyZWN0ICYmIGlzX29iamVjdCgkcmVkaXJlY3QpICYmIGNvdW50KChhcnJheSkkcmVkaXJlY3QpID4gMCkNCnsNCgkvLyBnZXQgYXBwbGljYXRpb24NCgkkYXBwID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldEFwcGxpY2F0aW9uKCk7DQoJLy8gc2V0IHRoZSB1c2VyIG9iamVjdA0KCSR1c2VyID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldFVzZXIoKTsNCgkvLyBnZXQgdXNlciBncm91cHMNCgkkZ3JvdXBzCT0gKGFycmF5KSAkdXNlci0+Z2V0QXV0aG9yaXNlZEdyb3VwcygpOw0KCS8vIGxvb3Agb3ZlciB0aGUgc2V0IHZhbHVlcw0KCWZvcmVhY2ggKCRyZWRpcmVjdCBhcyAkZ28pDQoJew0KCQlpZiAoaXNfb2JqZWN0KCRnbykpDQoJCXsNCgkJCWlmIChpc19hcnJheSgkZ28tPmdyb3VwcykgJiYgY291bnQoJGdvLT5ncm91cHMpKQ0KCQkJew0KCQkJCWlmIChhcnJheV9pbnRlcnNlY3QoJGdvLT5ncm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gbWF0Y2ggZm91bmQgLSByZWRpcmVjdA0KCQkJCQkkYXBwLT5yZWRpcmVjdCgkZ28tPnVybCk7DQoJCQkJCWJyZWFrOw0KDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyBnZXQgdGhlIG1vZHVsZSBjbGFzcyBzZnggKGxvY2FsKQ0KJG1vZHVsZWNsYXNzX3NmeCA9IGh0bWxzcGVjaWFsY2hhcnMoJHBhcmFtcy0+Z2V0KCdtb2R1bGVjbGFzc19zZngnLCAnJyksIEVOVF9DT01QQVQsICdVVEYtOCcpOw0KDQovLyBsb2FkIHRoZSBkZWZhdWx0IFRtcGwNCnJlcXVpcmUgSm9vbWxhX19fZjE1ZDU1NmRfMzNkZF80ZWUzX2EwZjdfMDY1M2U0YTdhMWU0X19fUG93ZXI6OmdldExheW91dFBhdGgoJ21vZF9bW1ttb2R1bGVdXV0nLCAkcGFyYW1zLT5nZXQoJ2xheW91dCcsICdkZWZhdWx0JykpOw==', '5.0.0', 'cPanelRedirect', '', '', '', 'Ly8gVE9ETyBwcmVmbGlnaHQgbXVzdCBiZSBhbiBpbnN0YW5jZS4uLg==', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', 0, '', '', 'cPanel Redirect', 2, 0, 1, '', '', 1, '2016-06-01 10:20:06', '2024-10-05 02:02:07', 24, 0, 1, 7), -(9, '', '', 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '', 'PGgxPjw/cGhwIGVjaG8gSm9vbWxhX19fYmE2MzI2ZWZfY2I3OV80MzQ4XzgwZjRfYWIwODYwODJlM2M1X19fUG93ZXI6Ol8oJ1NpdGUgUmVkaXJlY3QnKTsgPz48L2gxPg0KPHA+PD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnU2V0dXAgeW91ciByZWRpcmVjdCBpbiB0aGUgc2l0ZSBtb2RlbCA8Yj5TaXRlIFJlZGlyZWN0PC9iPiBvciBjaGFuZ2UgdGhpcyBtb2RlbHMgPGI+QWNjZXNzPC9iPiB0byBub3QgdGFyZ2V0IHRoaXMgdXNlcnMgYWNjZXNzIGxldmVsLicpOyA/PjwvcD4=', 'To Redirect your Site Page to any other part of the admin area in your Joomla for a selected group of users', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Details\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"12035b51-753b-4e3f-9f41-cde3a6046286\",\"custom_value\":\"\"}}}}', '21c9f6f5-3193-485d-94e7-f9c789a9fa2e', '', 'Ly8gZ2V0IHRoZSBzZXQgdmFsdWVzIGZvcm0gY3BhbmVsIHJlZGlyZWN0IG1vZHVsZQ0KJHJlZGlyZWN0ID0gJHBhcmFtcy0+Z2V0KCdyZWRpcmVjdCcsbnVsbCk7DQoNCi8vIHJlZGlyZWN0IGlmIHRoZSB1c2VyIGlzIGluIGdpdmVuIHNlbGVjdGVkIGdyb3VwDQppZiAoJHJlZGlyZWN0ICYmIGlzX29iamVjdCgkcmVkaXJlY3QpICYmIGNvdW50KChhcnJheSkkcmVkaXJlY3QpID4gMCkNCnsNCgkvLyBnZXQgYXBwbGljYXRpb24NCgkkYXBwID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldEFwcGxpY2F0aW9uKCk7DQoJLy8gc2V0IHRoZSB1c2VyIG9iamVjdA0KCSR1c2VyID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldFVzZXIoKTsNCgkvLyBnZXQgdXNlciBncm91cHMNCgkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0QXV0aG9yaXNlZEdyb3VwcygpOw0KCS8vIGxvb3Agb3ZlciB0aGUgc2V0IHZhbHVlcw0KCWZvcmVhY2ggKCRyZWRpcmVjdCBhcyAkZ28pDQoJew0KCQlpZiAoaXNfb2JqZWN0KCRnbykpDQoJCXsNCgkJCWlmIChpc19hcnJheSgkZ28tPmdyb3VwcykgJiYgY291bnQoJGdvLT5ncm91cHMpKQ0KCQkJew0KCQkJCWlmIChhcnJheV9pbnRlcnNlY3QoJGdvLT5ncm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gbWF0Y2ggZm91bmQgLSByZWRpcmVjdA0KCQkJCQkkYXBwLT5yZWRpcmVjdCgkZ28tPnVybCk7DQoJCQkJCWJyZWFrOw0KDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyBnZXQgdGhlIG1vZHVsZSBjbGFzcyBzZnggKGxvY2FsKQ0KJG1vZHVsZWNsYXNzX3NmeCA9IGh0bWxzcGVjaWFsY2hhcnMoJHBhcmFtcy0+Z2V0KCdtb2R1bGVjbGFzc19zZngnLCAnJyksIEVOVF9DT01QQVQsICdVVEYtOCcpOw0KDQovLyBsb2FkIHRoZSBkZWZhdWx0IFRtcGwNCnJlcXVpcmUgSm9vbWxhX19fZjE1ZDU1NmRfMzNkZF80ZWUzX2EwZjdfMDY1M2U0YTdhMWU0X19fUG93ZXI6OmdldExheW91dFBhdGgoJ21vZF9bW1ttb2R1bGVdXV0nLCAkcGFyYW1zLT5nZXQoJ2xheW91dCcsICdkZWZhdWx0JykpOw==', '5.0.0', 'SiteRedirect', '', '', '', 'Ly8gVE9ETyBwcmVmbGlnaHQgbXVzdCBiZSBhbiBpbnN0YW5jZS4uLg==', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', 0, '', '', 'Site Redirect', 1, 0, 1, '', '', 1, '2016-06-01 10:20:06', '2024-10-05 02:02:34', 22, 0, 1, 7), -(10, 'CS8qKg0KCSAqIFRoZSBNb2R1bGUgUGFyYW1zDQoJICoNCgkgKiBAdmFyICAgIFJlZ2lzdHJ5DQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgJHBhcmFtczsNCg0KCS8qKg0KCSAqIFRoZSBZZWFycw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICR5ZWFyczsNCg0KCS8qKg0KCSAqIFRoZSBCcmFuY2hlcw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICRicmFuY2hlczsNCg0KCS8qKg0KCSAqIFRoZSBMZWdlbmQNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAkbGVnZW5kOw0KDQoJLyoqDQoJICogVGhlIFdpZHRoDQoJICoNCgkgKiBAdmFyICAgIGludA0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICR3aWR0aDsNCg0KCS8qKg0KCSAqIFRoZSBIZWlnaHQNCgkgKg0KCSAqIEB2YXIgICAgaW50DQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgJGhlaWdodDsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yDQoJICoNCgkgKiBAcGFyYW0gUmVnaXN0cnkgICRwYXJhbXMgIFRoZSBtb2R1bGUgcGFyYW1zDQoJICoNCgkgKiBAc2luY2UgMS4wLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUmVnaXN0cnkgJHBhcmFtcykNCgl7DQoJCSR0aGlzLT5wYXJhbXMgPSAkcGFyYW1zOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBZZWFycw0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB5ZWFycygpOiBhcnJheQ0KCXsNCgkJaWYgKGVtcHR5KCR0aGlzLT55ZWFycykpDQoJCXsNCgkJCSR0aGlzLT55ZWFycyA9IGl0ZXJhdG9yX3RvX2FycmF5KA0KCQkJCW5ldyBcRGF0ZVBlcmlvZCgNCgkJCQkJJHRoaXMtPm1pbigpLA0KCQkJCQluZXcgRGF0ZUludGVydmFsKCdQMVknKSwNCgkJCQkJJHRoaXMtPm1heCgpDQoJCQkJKQ0KCQkJKTsNCgkJfQ0KDQoJCXJldHVybiAkdGhpcy0+eWVhcnM7DQoJfQ0KDQoJLyoqDQoJICogR2V0IFdpZHRoDQoJICoNCgkgKiBAcmV0dXJuIGludA0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB3aWR0aCgpOiBpbnQNCgl7DQoJCWlmIChlbXB0eSgkdGhpcy0+d2lkdGgpKQ0KCQl7DQoJCQkkeWVhcnMgPSAkdGhpcy0+eWVhcnMoKTsNCg0KCQkJJHRoaXMtPndpZHRoID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdtYXJnaW5fbGVmdCcsIDgwKSArIA0KCQkJCSR0aGlzLT5wYXJhbXMtPmdldCgnbWFyZ2luX3JpZ2h0JywgNTApICsNCgkJCQkoKGNvdW50KCR5ZWFycykgLSAxKSAqICR0aGlzLT5wYXJhbXMtPmdldCgneWVhcl93aWR0aCcsIDEyMCkpOw0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT53aWR0aDsNCgl9DQoNCgkvKioNCgkgKiBHZXQgSGVpZ2h0DQoJICoNCgkgKiBAcmV0dXJuIGludA0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBoZWlnaHQoKTogaW50DQoJew0KCQlpZiAoZW1wdHkoJHRoaXMtPmhlaWdodCkpDQoJCXsNCgkJCSRicmFuY2hlcyA9ICR0aGlzLT5icmFuY2hlcygpOw0KDQoJCQkkdGhpcy0+aGVpZ2h0ID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdoZWFkZXJfaGVpZ2h0JywgIDI0KSArDQoJCQkJJHRoaXMtPnBhcmFtcy0+Z2V0KCdmb290ZXJfaGVpZ2h0JywgMjQpICsNCgkJCQkoY291bnQoJGJyYW5jaGVzKSAqICR0aGlzLT5wYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKSk7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPmhlaWdodDsNCgl9DQoNCgkvKioNCgkgKiBHZXQgQnJhbmNoZXMNCgkgKg0KCSAqIEZldGNoZXMgYW5kIHByb2Nlc3NlcyB0aGUgYnJhbmNoZXMgb3IgdmVyc2lvbnMgZnJvbSB0aGUgcGFyYW1ldGVycy4gDQoJICogSXQgc2FuaXRpemVzIHRoZSBicmFuY2ggZGF0YSwgY2FsY3VsYXRlcyB0aGVpciBwb3NpdGlvbnMsIHNvcnRzIHRoZW0sIGFuZCB0aGVuIHJldHVybnMuDQoJICogSWYgbm8gdmFsaWQgYnJhbmNoZXMgb3IgdmVyc2lvbnMgYXJlIGZvdW5kLCBpdCB0aHJvd3MgYW4gZXhjZXB0aW9uLg0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqDQoJICogQHNpbmNlIDIuMC4xDQoJICogQHRocm93cyBFeGNlcHRpb24gSWYgbm8gdmFsaWQgYnJhbmNoZXMgb3IgdmVyc2lvbnMgYXJlIGZvdW5kLg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBicmFuY2hlcygpOiBhcnJheQ0KCXsNCgkJaWYgKGVtcHR5KCR0aGlzLT5icmFuY2hlcykpDQoJCXsNCgkJCSRicmFuY2hlcyA9IChhcnJheSkgJHRoaXMtPnBhcmFtcy0+Z2V0KCd2ZXJzaW9ucycpOw0KDQoJCQlpZiAoZW1wdHkoJGJyYW5jaGVzKSkNCgkJCXsNCgkJCQl0aHJvdyBuZXcgXEV4Y2VwdGlvbigiTm8gdmVyc2lvbnMgZm91bmQuIik7DQoJCQl9DQoJCQkkdGhpcy0+c2FuaXRpemUoJGJyYW5jaGVzKTsNCg0KCQkJaWYgKGVtcHR5KCRicmFuY2hlcykpDQoJCQl7DQoJCQkJdGhyb3cgbmV3IFxFeGNlcHRpb24oIk5vIHZlcnNpb25zIGZvdW5kLiIpOw0KCQkJfQ0KDQoJCQkkdGhpcy0+c2V0VG9wKCRicmFuY2hlcyk7DQoJCQkkdGhpcy0+c29ydCgkYnJhbmNoZXMpOw0KDQoJCQkkdGhpcy0+YnJhbmNoZXMgPSAkYnJhbmNoZXM7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPmJyYW5jaGVzOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBMZWdlbmQgdmFsdWVzIChieSBjb2xvcikNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgMi4wLjENCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbGVnZW5kKCk6IGFycmF5DQoJew0KCQlpZiAoZW1wdHkoJHRoaXMtPmxlZ2VuZCkpDQoJCXsNCgkJCSRicmFuY2hlcyA9ICR0aGlzLT5icmFuY2hlcygpOw0KDQoJCQlmb3JlYWNoICgkYnJhbmNoZXMgYXMgJHZlcnNpb24pDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHZlcnNpb24tPmRhdGVzIGFzICRkYXRlKQ0KCQkJCXsNCgkJCQkJJHRoaXMtPmxlZ2VuZFskZGF0ZS0+Y29sb3JdID0gJGRhdGU7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT5sZWdlbmQ7DQoJfQ0KDQoJLyoqDQoJICogQ3VycmVudCBzdGF0ZSBvZiBhIGJyYW5jaA0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAkZGF0ZXMgIFRoZSBicmFuY2ggZGF0ZXMNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nfG51bGwNCgkgKiBAc2luY2UgMi4wLjENCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc3RhdGUoYXJyYXkgJGRhdGVzKTogP3N0cmluZw0KCXsNCgkJLy8gRGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlLg0KCQkkbm93ID0gbmV3IFxEYXRlVGltZSgpOw0KDQoJCS8vIENoZWNrIGlmIHRvZGF5J3MgZGF0ZSBpcyBiZWZvcmUgdGhlIGVhcmxpZXN0IHN0YXJ0IGRhdGUuDQoJCSRlYXJsaWVzdERhdGUgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ2QtbS1ZJywgJGRhdGVzWzBdLT5zdGFydCk7DQoJCWlmICgkbm93IDwgJGVhcmxpZXN0RGF0ZSkNCgkJew0KCQkJcmV0dXJuICd2Y3MtZnV0dXJlJzsNCgkJfQ0KDQoJCS8vIENoZWNrIGlmIHRvZGF5J3MgZGF0ZSBpcyBhZnRlciB0aGUgbGF0ZXN0IGVuZCBkYXRlLg0KCQkkbGF0ZXN0RGF0ZSA9IFxEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnZC1tLVknLCBlbmQoJGRhdGVzKS0+ZW5kKTsNCgkJaWYgKCRub3cgPiAkbGF0ZXN0RGF0ZSkNCgkJew0KCQkJcmV0dXJuICd2Y3MtZW9sJzsNCgkJfQ0KDQoJCS8vIERldGVybWluZSB3aGljaCBzdGF0ZSB0aGUgY3VycmVudCBkYXRlIGZhbGxzIHVuZGVyLg0KCQlmb3JlYWNoICgkZGF0ZXMgYXMgJGRhdGUpDQoJCXsNCgkJCSRpbml0aWFsID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRkYXRlLT5zdGFydCk7DQoJCQkkZW5kID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRkYXRlLT5lbmQpOw0KDQoJCQlpZiAoJG5vdyA+PSAkaW5pdGlhbCAmJiAkbm93IDw9ICRlbmQpDQoJCQl7DQoJCQkJcmV0dXJuICRkYXRlLT5zdGF0ZTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIE1pbmltdW0gTnVtYmVyIG9mIFllYXJzDQoJICoNCgkgKiBAcmV0dXJuID8NCgkgKiBAc2luY2UgMS4wLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbWluKCkNCgl7DQoJCSRub3cgPSBuZXcgXERhdGVUaW1lKCdKYW51YXJ5IDEnKTsNCgkJcmV0dXJuICRub3ctPnN1YihuZXcgRGF0ZUludGVydmFsKCdQJyAuDQoJCQkkdGhpcy0+cGFyYW1zLT5nZXQoJ21pbl95ZWFycycsIDMpIC4gJ1knKSk7DQoJfQ0KDQoJLyoqDQoJICogTWF4aW11bSBOdW1iZXIgb2YgWWVhcnMNCgkgKg0KCSAqIEByZXR1cm4gPw0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBtYXgoKQ0KCXsNCgkJJG5vdyA9IG5ldyBcRGF0ZVRpbWUoJ0phbnVhcnkgMScpOw0KCQlyZXR1cm4gJG5vdy0+YWRkKG5ldyBEYXRlSW50ZXJ2YWwoJ1AnIC4NCgkJCSR0aGlzLT5wYXJhbXMtPmdldCgnbWF4X3llYXJzJywgMykgLiAnWScpKTsNCgl9DQoNCgkvKioNCgkgKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhpcyBkYXRlDQoJICoNCgkgKiBAcGFyYW0gRGF0ZVRpbWUgJGRhdGUgVGhlIGJyYW5jaCBzdGF0ZSBkYXRlDQoJICoNCgkgKiBAcmV0dXJuIGZsb2F0DQoJICogQHNpbmNlIDEuMC4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGNvb3JkaW5hdGVzKERhdGVUaW1lICRkYXRlKTogZmxvYXQNCgl7DQoJCSRkaWZmID0gJGRhdGUtPmRpZmYoJHRoaXMtPm1pbigpKTsNCg0KCQlpZiAoISRkaWZmLT5pbnZlcnQpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+cGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApOw0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT5wYXJhbXMtPmdldCgnbWFyZ2luX2xlZnQnLCA4MCkgKw0KCQkJKCRkaWZmLT5kYXlzIC8NCgkJCQkoMzY1LjI0IC8gJHRoaXMtPnBhcmFtcy0+Z2V0KCd5ZWFyX3dpZHRoJywgMTIwKSkNCgkJCSk7DQoJfQ0KDQoJLyoqDQoJICogU29ydCBCcmFuY2hlcyBzdGF0ZSdzIGJ5IGRhdGUNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGJyYW5jaGVzICBUaGUgYnJhbmNoZXMNCgkgKg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSAyLjAuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzb3J0KGFycmF5ICYkYnJhbmNoZXMpOiB2b2lkDQoJew0KCQlmb3JlYWNoICgkYnJhbmNoZXMgYXMgJGtleSA9PiAmJGJyYW5jaCkNCgkJew0KCQkJdXNvcnQoJGJyYW5jaC0+ZGF0ZXMsIGZ1bmN0aW9uKCRhLCAkYikgew0KCQkJCSRzdGFydERhdGVBID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRhLT5zdGFydCk7DQoJCQkJJHN0YXJ0RGF0ZUIgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ2QtbS1ZJywgJGItPnN0YXJ0KTsNCg0KCQkJCWlmICgkc3RhcnREYXRlQSA9PSAkc3RhcnREYXRlQikNCgkJCQl7DQoJCQkJCSRlbmREYXRlQSA9IFxEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnZC1tLVknLCAkYS0+ZW5kKTsNCgkJCQkJJGVuZERhdGVCID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRiLT5lbmQpOw0KCQkJCQlyZXR1cm4gJGVuZERhdGVBIDw9PiAkZW5kRGF0ZUI7DQoJCQkJfQ0KDQoJCQkJcmV0dXJuICRzdGFydERhdGVBIDw9PiAkc3RhcnREYXRlQjsNCgkJCX0pOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2V0IFRvcA0KCSAqDQoJICogQ2FsY3VsYXRlcyB0aGUgdG9wIHBvc2l0aW9uIGZvciBlYWNoIGJyYW5jaCBiYXNlZCBvbiBwYXJhbWV0ZXJzIGZvciBicmFuY2ggaGVpZ2h0IGFuZCBoZWFkZXIgaGVpZ2h0Lg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRicmFuY2hlcyBSZWZlcmVuY2UgdG8gdGhlIGJyYW5jaGVzIGFycmF5Lg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlIDIuMC4xDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFRvcChhcnJheSAmJGJyYW5jaGVzKTogdm9pZA0KCXsNCgkJJGJyYW5jaF9oZWlnaHQgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2JyYW5jaF9oZWlnaHQnLCAzMCk7DQoJCSRoZWFkZXJfaGVpZ2h0ID0gJHRoaXMtPnBhcmFtcy0+Z2V0KCdoZWFkZXJfaGVpZ2h0JywgMjQpOw0KDQoJCSRpID0gMDsNCgkJZm9yZWFjaCAoJGJyYW5jaGVzIGFzICRrZXkgPT4gJiRicmFuY2gpDQoJCXsNCgkJCSRicmFuY2gtPnRvcCA9ICRoZWFkZXJfaGVpZ2h0ICsgKCRicmFuY2hfaGVpZ2h0ICogJGkrKyk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBTYW5pdGl6ZQ0KCSAqDQoJICogU2FuaXRpemVzIHRoZSBicmFuY2hlcyBieSBjaGVja2luZyB0aGUgZXhpc3RlbmNlIGFuZCB0eXBlIG9mICdkYXRlcycgYW5kICdkYXRlLT5zdGF0ZScuIA0KCSAqIEFsc28gbW9kaWZpZXMgdGhlIHN0YXRlIG9mIGVhY2ggZGF0ZSBlbnRyeSB3aXRoaW4gYSBicmFuY2guDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgJGJyYW5jaGVzIFJlZmVyZW5jZSB0byB0aGUgYnJhbmNoZXMgYXJyYXkuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgMi4wLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2FuaXRpemUoYXJyYXkgJiRicmFuY2hlcyk6IHZvaWQNCgl7DQoJCWZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICYkYnJhbmNoKQ0KCQl7DQoJCQlpZiAoZW1wdHkoJGJyYW5jaC0+ZGF0ZXMpIHx8ICFpc19vYmplY3QoJGJyYW5jaC0+ZGF0ZXMpKQ0KCQkJew0KCQkJCXVuc2V0KCRicmFuY2hlc1ska2V5XSk7DQoJCQkJY29udGludWU7DQoJCQl9DQoNCgkJCSRicmFuY2gtPmRhdGVzID0gKGFycmF5KSAkYnJhbmNoLT5kYXRlczsNCg0KCQkJJHJlbW92ZSA9IGZhbHNlOw0KCQkJZm9yZWFjaCAoJGJyYW5jaC0+ZGF0ZXMgYXMgJGsgPT4gJiRkYXRlKQ0KCQkJew0KCQkJCWlmIChlbXB0eSgkZGF0ZS0+c3RhdGUpKQ0KCQkJCXsNCgkJCQkJJHJlbW92ZSA9IHRydWU7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCgkJCQkkZGF0ZS0+c3RhdGUgPSAkdGhpcy0+bWFrZVNhZmUoJGtleSAuICctJyAuICRkYXRlLT5zdGF0ZSk7DQoJCQl9DQoNCgkJCWlmICgkcmVtb3ZlKQ0KCQkJew0KCQkJCXVuc2V0KCRicmFuY2hlc1ska2V5XSk7DQoJCQl9DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBHZXQgY3NzIHNhZmUgY2xhc3MgbmFtZQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgJG5hbWUgIFRoZSBzdHJpbmcgdG8gbWFrZSBzYWZlDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZw0KCSAqIEBzaW5jZSAyLjAuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBtYWtlU2FmZShzdHJpbmcgJG5hbWUpOiBzdHJpbmcNCgl7DQoJCS8vIEVuc3VyZSBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBkaWdpdA0KCQlpZiAocHJlZ19tYXRjaCgnL15bMC05XS8nLCAkbmFtZSkpDQoJCXsNCgkJCSRuYW1lID0gJ3Zjcy0nIC4gJG5hbWU7DQoJCX0NCg0KCQkvLyBSZXBsYWNlIGFueSBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgd2l0aCBoeXBoZW5zDQoJCSRuYW1lID0gcHJlZ19yZXBsYWNlKCcvW15hLXpBLVowLTldKy8nLCAnLScsICRuYW1lKTsNCg0KCQkvLyBDb252ZXJ0IHRvIGxvd2VyY2FzZQ0KCQkkbmFtZSA9IHN0cnRvbG93ZXIoJG5hbWUpOw0KDQoJCXJldHVybiAkbmFtZTsNCgl9', 'dXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTs=', 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, '', 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdib3g9IjAgMCA8P3BocCBlY2hvICRoZWxwZXItPndpZHRoKCk7ID8+IDw/cGhwIGVjaG8gJGhlbHBlci0+aGVpZ2h0KCk7ID8+Ig0KCXdpZHRoPSI8P3BocCBlY2hvICRoZWxwZXItPndpZHRoKCk7ID8+IiBoZWlnaHQ9Ijw/cGhwIGVjaG8gJGhlbHBlci0+aGVpZ2h0KCk7ID8+Ij4NCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCQl0ZXh0IHsNCgkJCWZpbGw6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCd0ZXh0X2NvbG9yJywgJyMzMzMnKTsgPz47DQoJCQlmb250LWZhbWlseTogIlNvdXJjZSBTYW5zIFBybyIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQoJCQlmb250LXNpemU6IDw/cGhwIGVjaG8gKDIgLyAzKSAqICRwYXJhbXMtPmdldCgnaGVhZGVyX2hlaWdodCcsIDI0KTsgPz5weDsNCgkJfQ0KCQlnLnZjcy1mdXR1cmUgcmVjdCwNCgkJLnZjcy1icmFuY2hlcyByZWN0LnZjcy1mdXR1cmUgew0KCQkJZmlsbDogPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2Z1dHVyZV9jb2xvcicsICcjNTA5MWNkJyk7ID8+Ow0KCQl9DQoJCWcudmNzLWZ1dHVyZSB0ZXh0IHsNCgkJCWZpbGw6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdmdXR1cmVfdGV4dF9jb2xvcicsICcjZmZmJyk7ID8+Ow0KCQl9DQoJCWcudmNzLWVvbCByZWN0LA0KCQkudmNzLWJyYW5jaGVzIHJlY3QudmNzLWVvbCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZW5kX29mX2xpZmVfY29sb3InLCAnI2YzMycpOyA/PjsNCgkJfQ0KCQlnLnZjcy1lb2wgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZW5kX29mX2xpZmVfdGV4dF9jb2xvcicsICcjZmZmJyk7ID8+Ow0KCQl9DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAkdmVyc2lvbik6ID8+DQoJCQk8P3BocCBmb3JlYWNoICgkdmVyc2lvbi0+ZGF0ZXMgYXMgJGRhdGUpOiA/Pg0KCQkJCWcuPD9waHAgZWNobyAkZGF0ZS0+c3RhdGU7ID8+IHJlY3QsDQoJCQkJLnZjcy1icmFuY2hlcyByZWN0Ljw/cGhwIGVjaG8gJGRhdGUtPnN0YXRlOyA/PiB7DQoJCQkJCWZpbGw6IDw/cGhwIGVjaG8gJGRhdGUtPmNvbG9yOyA/PjsNCgkJCQl9DQoJCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQkudmNzLWJyYW5jaC1sYWJlbHMgdGV4dCB7DQoJCWRvbWluYW50LWJhc2VsaW5lOiBjZW50cmFsOw0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCQkudmNzLXRvZGF5IGxpbmUgew0KCQkJc3Ryb2tlOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgndG9kYXlfbGluZV9jb2xvcicsICcjZjMzJyk7ID8+Ow0KCQkJc3Ryb2tlLWRhc2hhcnJheTogNywgNzsNCgkJCXN0cm9rZS13aWR0aDogM3B4Ow0KCQl9DQoJCS52Y3MtdG9kYXkgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgndG9kYXlfdGV4dF9jb2xvcicsICcjZjMzJyk7ID8+Ow0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCQkudmNzLXllYXJzIGxpbmUgew0KCQkJc3Ryb2tlOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgneWVhcnNfbGluZV9jb2xvcicsICcjMDAwJyk7ID8+Ow0KCQl9DQoJCS52Y3MteWVhcnMgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgneWVhcnNfdGV4dF9jb2xvcicsICcjMDAwJyk7ID8+Ow0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCTwvc3R5bGU+DQoJPCEtLSBCcmFuY2ggbGFiZWxzIC0tPg0KCTxnIGNsYXNzPSJ2Y3MtYnJhbmNoLWxhYmVscyI+DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICRicmFuY2gpOiA/Pg0KCQkJPGcgY2xhc3M9Ijw/cGhwIGVjaG8gJGhlbHBlci0+c3RhdGUoJGJyYW5jaC0+ZGF0ZXMpOyA/PiI+DQoJCQkJPHJlY3QgeD0iMCIgeT0iPD9waHAgZWNobyAkYnJhbmNoLT50b3A7ID8+IiB3aWR0aD0iPD9waHAgZWNobyAwLjUgKiAkcGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApOyA/PiINCgkJCQkJaGVpZ2h0PSI8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKTsgPz4iLz4NCgkJCQk8dGV4dCB4PSI8P3BocCBlY2hvIDAuMjUgKiAkcGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApOyA/PiIgeT0iPD9waHAgZWNobyAkYnJhbmNoLT50b3AgKyAoMC41ICogJHBhcmFtcy0+Z2V0KCdicmFuY2hfaGVpZ2h0JywgMzApKTsgPz4iPg0KCQkJCQk8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJyYW5jaC0+dmVyc2lvbik7ID8+DQoJCQkJPC90ZXh0Pg0KCQkJPC9nPg0KCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCTwvZz4NCgk8IS0tIEJyYW5jaCBibG9ja3MgLS0+DQoJPGcgY2xhc3M9InZjcy1icmFuY2hlcyI+DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICR2ZXJzaW9uKTogPz4NCgkJCTw/cGhwDQoJCQkJJHkgPSAkdmVyc2lvbi0+dG9wOw0KCQkJCSRoZWlnaHQgPSAkcGFyYW1zLT5nZXQoJ2JyYW5jaF9oZWlnaHQnLCAzMCk7DQoJCQk/Pg0KCQkJPD9waHAgZm9yZWFjaCAoJHZlcnNpb24tPmRhdGVzIGFzICRkYXRlKTogPz4NCgkJCQk8P3BocA0KCQkJCQkkeF9zdGFydCA9ICRoZWxwZXItPmNvb3JkaW5hdGVzKG5ldyBEYXRlVGltZSgkZGF0ZS0+c3RhcnQpKTsNCgkJCQkJJHhfZW5kID0gJGhlbHBlci0+Y29vcmRpbmF0ZXMobmV3IERhdGVUaW1lKCRkYXRlLT5lbmQpKTsNCgkJCQk/Pg0KCQkJCTxnIGNsYXNzPSI8P3BocCBlY2hvICRkYXRlLT5zdGF0ZTsgPz4iPg0KCQkJCQk8cmVjdA0KCQkJCQkJeD0iPD9waHAgZWNobyAkeF9zdGFydDsgPz4iDQoJCQkJCQl5PSI8P3BocCBlY2hvICR5OyA/PiINCgkJCQkJCXdpZHRoPSI8P3BocCBlY2hvICR4X2VuZCAtICR4X3N0YXJ0OyA/PiINCgkJCQkJCWhlaWdodD0iPD9waHAgZWNobyAkaGVpZ2h0OyA/PiI+DQoJCQkJCQkJPHRpdGxlPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZGF0ZS0+bGFiZWwpOyA/PjwvdGl0bGU+DQoJCQkJCTwvcmVjdD4NCgkJCQk8L2c+DQoJCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCTwvZz4NCgk8IS0tIFllYXIgbGluZXMgLS0+DQoJPGcgY2xhc3M9InZjcy15ZWFycyI+DQoJCTw/cGhwIGZvcmVhY2ggKCRoZWxwZXItPnllYXJzKCkgYXMgJGRhdGUpOiA/Pg0KCQkJPGxpbmUgeDE9Ijw/cGhwIGVjaG8gJGhlbHBlci0+Y29vcmRpbmF0ZXMoJGRhdGUpOyA/PiIgeTE9Ijw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdoZWFkZXJfaGVpZ2h0JywgMjQpOyA/PiINCgkJCQl4Mj0iPD9waHAgZWNobyAkaGVscGVyLT5jb29yZGluYXRlcygkZGF0ZSk7ID8+Ig0KCQkJCXkyPSI8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnaGVhZGVyX2hlaWdodCcsIDI0KSArICgkcXR5ICogJHBhcmFtcy0+Z2V0KCdicmFuY2hfaGVpZ2h0JywgMzApKTsgPz4iLz4NCgkJCTx0ZXh0IHg9Ijw/cGhwIGVjaG8gJGhlbHBlci0+Y29vcmRpbmF0ZXMoJGRhdGUpIDs/PiIgeT0iPD9waHAgZWNobyAwLjggKiAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCk7ID8+Ij4NCgkJCQk8P3BocCBlY2hvICRkYXRlLT5mb3JtYXQoJ2ogTSBZJyk7ID8+DQoJCQk8L3RleHQ+DQoJCTw/cGhwIGVuZGZvcmVhY2g7ID8+DQoJPC9nPg0KCTwhLS0gVG9kYXkgLS0+DQoJPGcgY2xhc3M9InZjcy10b2RheSI+DQoJCTw/cGhwDQoJCQkkbm93ID0gbmV3IERhdGVUaW1lOw0KCQkJJHggPSAkaGVscGVyLT5jb29yZGluYXRlcygkbm93KTsNCgkJPz4NCgkJPGxpbmUgeDE9Ijw/cGhwIGVjaG8gJHg7ID8+IiB5MT0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCk7ID8+IiB4Mj0iPD9waHAgZWNobyAkeDsgPz4iDQoJCQl5Mj0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCkgKyAoJHF0eSAqICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKSk7ID8+Ii8+DQoJCTx0ZXh0IHg9Ijw/cGhwIGVjaG8gJHg7ID8+Ig0KCQkJeT0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCkgKyAoJHF0eSAqICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKSkgKyAoMC44ICogJHBhcmFtcy0+Z2V0KCdmb290ZXJfaGVpZ2h0JywgMjQpKTsgPz4iPg0KCQkJPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnVG9kYXknKSAuICc6ICcgLiAkbm93LT5mb3JtYXQoJ2ogTSBZJyk7ID8+DQoJCTwvdGV4dD4NCgk8L2c+DQo8L3N2Zz4NCjw/cGhwIGlmICgkcGFyYW1zLT5nZXQoJ3Nob3dfbGVnZW5kJywgMCkgPT0gMSk6ID8+DQo8P3BocCANCi8vIGdldCB0aGUgbGVnZW5kIHZhbHVlcw0KJGxlZ2VuZCA9ICRoZWxwZXItPmxlZ2VuZCgpOw0KPz4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLyogQm94IFNoYWRvdyAqLw0KCS52Y3MtYm94LXNoYWRvdy1tZWRpdW0gew0KCQlib3gtc2hhZG93OiAwIDEwcHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDAuNXJlbSAxLjVyZW0gcmdiYSgwLCAwLCAwLCAwLjI1KTsNCgl9DQoJLyogQ2FyZCBTdHlsZXMgKi8NCgkudmNzLWNhcmQgew0KCQlib3JkZXItcmFkaXVzOiA0cHg7DQoJCW1hcmdpbi10b3A6IDE1cHg7DQoJfQ0KCS52Y3MtY2FyZC1sZWdlbmQgew0KCQliYWNrZ3JvdW5kLWNvbG9yOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnbGVnZW5kX2JhY2tncm91bmRfY29sb3InLCAnIzQ5NDQ0NCcpOyA/PjsNCgkJY29sb3I6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdsZWdlbmRfdGV4dF9jb2xvcicsICcjZmJmM2VmJyk7ID8+Ow0KCX0NCgkudmNzLWNhcmQtYm9keSB7DQoJCXBhZGRpbmc6IDRweDsNCgl9DQoJLyogR3JpZCBTdHlsZXMgKi8NCgkudmNzLWdyaWQgew0KCQlkaXNwbGF5OiBmbGV4Ow0KCQlmbGV4LXdyYXA6IHdyYXA7DQoJfQ0KCS52Y3MtZ3JpZC1tYXRjaCA+IGRpdiB7DQoJCXBhZGRpbmc6IDVweDsNCgkJbWluLWhlaWdodDogMXB4Ow0KCQltYXJnaW46IDEwcHg7DQoJfQ0KCS8qIEZsZXhib3ggU3R5bGVzICovDQoJLnZjcy1mbGV4IHsNCgkJZGlzcGxheTogZmxleDsNCgkJYWxpZ24taXRlbXM6IGNlbnRlcjsNCgkJanVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KCX0NCgkudmNzLWZsZXgtbWlkZGxlIHsNCgkJYWxpZ24taXRlbXM6IGNlbnRlcjsNCgl9DQoJLyogQ29sb3IgQm94IFN0eWxlcyAqLw0KCS52Y3MtY29sb3ItYm94IHsNCgkJd2lkdGg6IDIwcHg7DQoJCWhlaWdodDogMjBweDsNCgkJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCQltYXJnaW4tcmlnaHQ6IDVweDsNCgl9DQoJLnZjcy1mdXR1cmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZnV0dXJlX2NvbG9yJywgJyMwMDAnKTsgPz47IH0NCgkudmNzLWVvbCB7IGJhY2tncm91bmQtY29sb3I6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdlbmRfb2ZfbGlmZV9jb2xvcicsICcjZjMzJyk7ID8+OyB9DQoJPD9waHAgZm9yZWFjaCAoJGxlZ2VuZCBhcyAkc3RhdGUpOiA/Pg0KCQkuPD9waHAgZWNobyAkc3RhdGUtPnN0YXRlOyA/PiB7IGJhY2tncm91bmQtY29sb3I6IDw/cGhwIGVjaG8gJHN0YXRlLT5jb2xvcjsgPz47IH0NCgk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCS8qIE1lZGlhIFF1ZXJ5IGZvciBzbWFsbGVyIHNjcmVlbnMgKi8NCglAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsNCgkJLnZjcy1ncmlkIHsNCgkJCWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQoJCX0NCgkJLnZjcy1mbGV4IHsNCgkJCWRpc3BsYXk6IGJsb2NrOw0KCQl9DQoJCS52Y3MtZ3JpZC1tYXRjaCA+IGRpdiB7DQoJCQltYXJnaW46IDRweDsNCgkJCXBhZGRpbmc6IDA7DQoJCX0NCgl9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcz0idmNzLWJveC1zaGFkb3ctbWVkaXVtIj4NCgk8ZGl2IGNsYXNzPSJ2Y3MtY2FyZCB2Y3MtY2FyZC1sZWdlbmQgdmNzLWNhcmQtYm9keSI+DQoJCTxkaXYgY2xhc3M9InZjcy1ncmlkLW1hdGNoIHZjcy1ncmlkIj4NCgkJCTxkaXYgY2xhc3M9InZjcy1mbGV4IHZjcy1mbGV4LW1pZGRsZSI+DQoJCQkJPHNwYW4NCgkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggdmNzLWZ1dHVyZSBoYXNUb29sdGlwIg0KCQkJCQl0aXRsZT0iPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnUGxhbm5lZCByZWxlYXNlIHNjaGVkdWxlJyk7ID8+Ig0KCQkJCT48L3NwYW4+PD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnRnV0dXJlIFJlbGVhc2VzJyk7ID8+DQoJCQk8L2Rpdj4NCgkJCTw/cGhwIGZvcmVhY2ggKCRsZWdlbmQgYXMgJHN0YXRlKTogPz4NCgkJCQk8ZGl2IGNsYXNzPSJ2Y3MtZmxleCB2Y3MtZmxleC1taWRkbGUiPg0KCQkJCQk8c3Bhbg0KCQkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggPD9waHAgZWNobyAkc3RhdGUtPnN0YXRlOyA/PiBoYXNUb29sdGlwIg0KCQkJCQkJdGl0bGU9Ijw/cGhwIGVjaG8gJHN0YXRlLT5kZXNjcmlwdGlvbiA/PyAnJzsgPz4iDQoJCQkJCT48L3NwYW4+PD9waHAgZWNobyAkc3RhdGUtPmxhYmVsOyA/Pg0KCQkJCTwvZGl2Pg0KCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4NCgkJCTxkaXYgY2xhc3M9InZjcy1mbGV4IHZjcy1mbGV4LW1pZGRsZSI+DQoJCQkJPHNwYW4NCgkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggdmNzLWVvbCBoYXNUb29sdGlwIg0KCQkJCQl0aXRsZT0iPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnVmVyc2lvbiBFbmQgb2YgTGlmZSBzY2hlZHVsZSAtIGV4cGVjdCBubyBtb3JlIHN1cHBvcnQnKTsgPz4iDQoJCQkJPjwvc3Bhbj48P3BocCBlY2hvIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdWZXJzaW9uIGF0IEVuZCBvZiBMaWZlJyk7ID8+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4NCjw/cGhwIGVuZGlmOyA/Pg==', 'Version Calendar in SVG', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"dimention\",\"label\":\"Dimentions\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3d3bf310-a38f-4e31-89c8-d5d986f4bb53\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"f8ceaba3-04d3-406d-abb9-c8372100817c\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3e72e2ab-0731-46f1-83ac-8bffddcd5634\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"12ecc6cc-9195-4633-8ecd-27ecc0643bd4\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"a2f93b12-c3fd-4e00-9732-0c97a7f37489\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"fb71c5cc-65d9-4389-8599-b94f4eecc97c\",\"custom_value\":\"\"}}},\"fields1\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"style\",\"label\":\"Styles\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"7414d14b-b802-4ac2-9090-218cdb32156c\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"1805a9da-75bf-41d6-b120-4c021fd93d8d\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"8f485452-b062-4ec9-9fa5-0182d04d8d7c\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"8097f524-48e6-470a-aa42-e4383d3019fa\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"f83befac-e15e-421c-83a0-c17e99492b79\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"9e2dcfc2-ea21-4caf-88aa-f0706d5878e5\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"0a6ee559-822b-4cd1-a049-d956ba2ff80b\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"cb60a327-5ce5-4b48-a8e0-27321022bf40\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"a2e37110-c69f-41b3-b05b-f5f51d0d9ab4\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"dc416a4a-a19f-4ef5-a703-e2334df42efd\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"8f1c9c1f-9d64-4f6c-9066-777665c7dcac\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"11bf8b86-99ad-4003-82eb-c55c16d0a041\",\"custom_value\":\"\"}}},\"fields2\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"versions\",\"label\":\"Versions\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"9f5ddbec-3f1c-4af9-8d33-a158bcaaf453\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"44a3a4aa-f601-4765-b656-2f0a01dd6fd9\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"801520d9-b7b3-47c5-a2a9-2581199ead0b\",\"custom_value\":\"\"}}}}', '2dcaa8af-0bb0-4fac-8584-4e4e418620cd', '', 'Ly8gSW5jbHVkZSB0aGUgaGVscGVyIGZ1bmN0aW9ucyBvbmx5IG9uY2UNClxKTG9hZGVyOjpyZWdpc3RlcignTW9kW1tbTW9kdWxlXV1dSGVscGVyJywgX19ESVJfXyAuICcvaGVscGVyLnBocCcpOw0KDQp0cnkNCnsNCgkvLyBHZXQgdGhlIEhlbHBlciBjbGFzcw0KCSRoZWxwZXIgPSBuZXcgTW9kW1tbTW9kdWxlXV1dSGVscGVyKCRwYXJhbXMpOw0KDQoJLy8gc2V0IHRoZSBicmFuY2hlcw0KCSRicmFuY2hlcyA9ICRoZWxwZXItPmJyYW5jaGVzKCk7DQoNCgkvLyBzZXQgYnJhbmNoIHF0eQ0KCSRxdHkgPSBjb3VudCgkYnJhbmNoZXMpOw0KDQoJLy8gZ2V0IHRoZSBtb2R1bGUgY2xhc3Mgc2Z4IChsb2NhbCkNCgkkbW9kdWxlY2xhc3Nfc2Z4ID0gaHRtbHNwZWNpYWxjaGFycygkcGFyYW1zLT5nZXQoJ21vZHVsZWNsYXNzX3NmeCcpLCBFTlRfQ09NUEFULCAnVVRGLTgnKTsNCg0KCS8vIGxvYWQgdGhlIGRlZmF1bHQgVG1wbA0KCXJlcXVpcmUgSm9vbWxhX19fZjE1ZDU1NmRfMzNkZF80ZWUzX2EwZjdfMDY1M2U0YTdhMWU0X19fUG93ZXI6OmdldExheW91dFBhdGgoJ21vZF9bW1ttb2R1bGVdXV0nLCAkcGFyYW1zLT5nZXQoJ2xheW91dCcsICdkZWZhdWx0JykpOw0KfSANCmNhdGNoIChFeGNlcHRpb24gJGUpIA0Kew0KCS8vIE91dHB1dCBhIHdhcm5pbmcgbWVzc2FnZSBhbG9uZyB3aXRoIHRoZSBleGNlcHRpb24gbWVzc2FnZQ0KCWVjaG8gIldhcm5pbmc6ICIgLiAkZS0+Z2V0TWVzc2FnZSgpOw0KfQ==', '2.0.1', 'Version_Calendar_svg', '', '', '', 'Ly8gVE9ETw==', '', '', '', 'IyBWZXJzaW9uIENhbGVuZGFyIGluIFNWRyAoW1tbbW9kdWxlLnZlcnNpb25dXV0pDQoNCj4gVGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIHdhcyB0YWtlbiBmcm9tIHRoZSBbUEhQIHN1cHBvcnRlZCB2ZXJzaW9uc10oaHR0cHM6Ly9naXRodWIuY29tL3BocC93ZWItcGhwL2Jsb2IvbWFzdGVyL2ltYWdlcy9zdXBwb3J0ZWQtdmVyc2lvbnMucGhwKS4NCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbT3BlbiBTb3VyY2UgTWF0dGVyc10oaHR0cDovL3d3dy5qb29tbGEub3JnKQ0KKyAqQXV0aG9yKjogW0pvb21sYSEgUHJvamVjdF0obWFpbHRvOmFkbWluQGpvb21sYS5vcmcpDQorICpOYW1lKjogW1ZlcnNpb24gQ2FsZW5kYXIgc3ZnXShodHRwOi8vd3d3Lmpvb21sYS5vcmcpDQorICpGaXJzdCBCdWlsZCo6IDNyZCBTZXB0ZW1iZXIsIDIwMjINCisgKlZlcnNpb24qOiBbW1ttb2R1bGUudmVyc2lvbl1dXQ0KKyAqQ29weXJpZ2h0KjogKEMpIDIwMjIgT3BlbiBTb3VyY2UgTWF0dGVycywgSW5jLg0KKyAqTGljZW5zZSo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0', 0, '', '', 'Version Calendar', 1, 0, 1, '', '', 1, '2022-09-03 04:42:25', '2024-09-16 16:06:50', 70, 0, 1, 8); +INSERT INTO `#__componentbuilder_joomla_module` (`id`, `class_helper_code`, `class_helper_header`, `add_default_header`, `add_class_helper`, `add_class_helper_header`, `add_php_method_uninstall`, `add_php_postflight_install`, `add_php_postflight_update`, `add_php_preflight_install`, `add_php_preflight_uninstall`, `add_php_preflight_update`, `add_php_script_construct`, `add_sales_server`, `add_sql`, `add_sql_uninstall`, `add_update_server`, `addreadme`, `custom_get`, `default_header`, `default`, `description`, `fields`, `guid`, `layout_data`, `libraries`, `mod_code`, `module_version`, `name`, `php_method_uninstall`, `php_postflight_install`, `php_postflight_update`, `php_preflight_install`, `php_preflight_uninstall`, `php_preflight_update`, `php_script_construct`, `readme`, `sales_server`, `sql`, `sql_uninstall`, `system_name`, `target`, `update_server`, `update_server_target`, `update_server_url`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES +(8, '', '', 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 'PGgxPjw/cGhwIGVjaG8gSm9vbWxhX19fYmE2MzI2ZWZfY2I3OV80MzQ4XzgwZjRfYWIwODYwODJlM2M1X19fUG93ZXI6Ol8oJ2NQYW5lbCBSZWRpcmVjdCcpOyA/PjwvaDE+DQo8cD48P3BocCBlY2hvIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdTZXR1cCB5b3VyIHJlZGlyZWN0IGluIHRoZSBhZG1pbiBtb2RlbCA8Yj5jUGFuZWwgUmVkaXJlY3Q8L2I+IG9yIGNoYW5nZSB0aGlzIG1vZGVscyA8Yj5BY2Nlc3M8L2I+IHRvIG5vdCB0YXJnZXQgdGhpcyB1c2VycyBhY2Nlc3MgbGV2ZWwuJyk7ID8+PC9wPg==', 'To Redirect your Control Panel to any other part of the admin area in your Joomla for a selected group of users', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Details\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"12035b51-753b-4e3f-9f41-cde3a6046286\",\"custom_value\":\"\"}}}}', 'c013529f-2a8d-4e93-8767-ed2583867aeb', 'CQkvLyBnZXQgdGhlIHNldCB2YWx1ZXMgZm9ybSBjcGFuZWwgcmVkaXJlY3QgbW9kdWxlDQoJCSRyZWRpcmVjdCA9ICRkYXRhWydwYXJhbXMnXS0+Z2V0KCdyZWRpcmVjdCcsbnVsbCk7DQoNCgkJLy8gcmVkaXJlY3QgaWYgdGhlIHVzZXIgaXMgaW4gZ2l2ZW4gc2VsZWN0ZWQgZ3JvdXANCgkJaWYgKCRyZWRpcmVjdCAmJiBpc19vYmplY3QoJHJlZGlyZWN0KSAmJiBjb3VudCgoYXJyYXkpJHJlZGlyZWN0KSA+IDApDQoJCXsNCgkJCS8vIHNldCB0aGUgdXNlciBvYmplY3QNCgkJCSR1c2VyID0gJGRhdGFbJ2FwcCddLT5nZXRJZGVudGl0eSgpOw0KCQkJLy8gZ2V0IHVzZXIgZ3JvdXBzDQoJCQkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0QXV0aG9yaXNlZEdyb3VwcygpOw0KCQkJLy8gbG9vcCBvdmVyIHRoZSBzZXQgdmFsdWVzDQoJCQlmb3JlYWNoICgkcmVkaXJlY3QgYXMgJGdvKQ0KCQkJew0KCQkJCWlmIChpc19vYmplY3QoJGdvKSkNCgkJCQl7DQoJCQkJCWlmIChpc19hcnJheSgkZ28tPmdyb3VwcykgJiYgY291bnQoJGdvLT5ncm91cHMpKQ0KCQkJCQl7DQoJCQkJCQlpZiAoYXJyYXlfaW50ZXJzZWN0KCRnby0+Z3JvdXBzLCAkZ3JvdXBzKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBtYXRjaCBmb3VuZCAtIHJlZGlyZWN0DQoJCQkJCQkJJGRhdGFbJ2FwcCddLT5yZWRpcmVjdCgkZ28tPnVybCk7DQoJCQkJCQkJYnJlYWs7DQoNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ==', '', 'Ly8gZ2V0IHRoZSBzZXQgdmFsdWVzIGZvcm0gY3BhbmVsIHJlZGlyZWN0IG1vZHVsZQ0KJHJlZGlyZWN0ID0gJHBhcmFtcy0+Z2V0KCdyZWRpcmVjdCcsbnVsbCk7DQoNCi8vIHJlZGlyZWN0IGlmIHRoZSB1c2VyIGlzIGluIGdpdmVuIHNlbGVjdGVkIGdyb3VwDQppZiAoJHJlZGlyZWN0ICYmIGlzX29iamVjdCgkcmVkaXJlY3QpICYmIGNvdW50KChhcnJheSkkcmVkaXJlY3QpID4gMCkNCnsNCgkvLyBnZXQgYXBwbGljYXRpb24NCgkkYXBwID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldEFwcGxpY2F0aW9uKCk7DQoJLy8gc2V0IHRoZSB1c2VyIG9iamVjdA0KCSR1c2VyID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldFVzZXIoKTsNCgkvLyBnZXQgdXNlciBncm91cHMNCgkkZ3JvdXBzCT0gKGFycmF5KSAkdXNlci0+Z2V0QXV0aG9yaXNlZEdyb3VwcygpOw0KCS8vIGxvb3Agb3ZlciB0aGUgc2V0IHZhbHVlcw0KCWZvcmVhY2ggKCRyZWRpcmVjdCBhcyAkZ28pDQoJew0KCQlpZiAoaXNfb2JqZWN0KCRnbykpDQoJCXsNCgkJCWlmIChpc19hcnJheSgkZ28tPmdyb3VwcykgJiYgY291bnQoJGdvLT5ncm91cHMpKQ0KCQkJew0KCQkJCWlmIChhcnJheV9pbnRlcnNlY3QoJGdvLT5ncm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gbWF0Y2ggZm91bmQgLSByZWRpcmVjdA0KCQkJCQkkYXBwLT5yZWRpcmVjdCgkZ28tPnVybCk7DQoJCQkJCWJyZWFrOw0KDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyBnZXQgdGhlIG1vZHVsZSBjbGFzcyBzZnggKGxvY2FsKQ0KJG1vZHVsZWNsYXNzX3NmeCA9IGh0bWxzcGVjaWFsY2hhcnMoJHBhcmFtcy0+Z2V0KCdtb2R1bGVjbGFzc19zZngnLCAnJyksIEVOVF9DT01QQVQsICdVVEYtOCcpOw0KDQovLyBsb2FkIHRoZSBkZWZhdWx0IFRtcGwNCnJlcXVpcmUgSm9vbWxhX19fZjE1ZDU1NmRfMzNkZF80ZWUzX2EwZjdfMDY1M2U0YTdhMWU0X19fUG93ZXI6OmdldExheW91dFBhdGgoJ21vZF9bW1ttb2R1bGVdXV0nLCAkcGFyYW1zLT5nZXQoJ2xheW91dCcsICdkZWZhdWx0JykpOw==', '5.0.0', 'cPanelRedirect', '', '', '', 'Ly8gVE9ETyBwcmVmbGlnaHQgbXVzdCBiZSBhbiBpbnN0YW5jZS4uLg==', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', 0, '', '', 'cPanel Redirect', 2, 0, 1, '', '', 1, '2016-06-01 10:20:06', '2025-08-28 23:54:26', 25, 0, 1, 7), +(9, '', '', 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, '', '', 'PGgxPjw/cGhwIGVjaG8gSm9vbWxhX19fYmE2MzI2ZWZfY2I3OV80MzQ4XzgwZjRfYWIwODYwODJlM2M1X19fUG93ZXI6Ol8oJ1NpdGUgUmVkaXJlY3QnKTsgPz48L2gxPg0KPHA+PD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnU2V0dXAgeW91ciByZWRpcmVjdCBpbiB0aGUgc2l0ZSBtb2RlbCA8Yj5TaXRlIFJlZGlyZWN0PC9iPiBvciBjaGFuZ2UgdGhpcyBtb2RlbHMgPGI+QWNjZXNzPC9iPiB0byBub3QgdGFyZ2V0IHRoaXMgdXNlcnMgYWNjZXNzIGxldmVsLicpOyA/PjwvcD4=', 'To Redirect your Site Page to any other part of the admin area in your Joomla for a selected group of users', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"basic\",\"label\":\"Details\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"12035b51-753b-4e3f-9f41-cde3a6046286\",\"custom_value\":\"\"}}}}', '21c9f6f5-3193-485d-94e7-f9c789a9fa2e', 'CQkvLyBnZXQgdGhlIHNldCB2YWx1ZXMgZm9ybSBjcGFuZWwgcmVkaXJlY3QgbW9kdWxlDQoJCSRyZWRpcmVjdCA9ICRkYXRhWydwYXJhbXMnXS0+Z2V0KCdyZWRpcmVjdCcsbnVsbCk7DQoNCgkJLy8gcmVkaXJlY3QgaWYgdGhlIHVzZXIgaXMgaW4gZ2l2ZW4gc2VsZWN0ZWQgZ3JvdXANCgkJaWYgKCRyZWRpcmVjdCAmJiBpc19vYmplY3QoJHJlZGlyZWN0KSAmJiBjb3VudCgoYXJyYXkpJHJlZGlyZWN0KSA+IDApDQoJCXsNCgkJCS8vIHNldCB0aGUgdXNlciBvYmplY3QNCgkJCSR1c2VyID0gJGRhdGFbJ2FwcCddLT5nZXRJZGVudGl0eSgpOw0KCQkJLy8gZ2V0IHVzZXIgZ3JvdXBzDQoJCQkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0QXV0aG9yaXNlZEdyb3VwcygpOw0KCQkJLy8gbG9vcCBvdmVyIHRoZSBzZXQgdmFsdWVzDQoJCQlmb3JlYWNoICgkcmVkaXJlY3QgYXMgJGdvKQ0KCQkJew0KCQkJCWlmIChpc19vYmplY3QoJGdvKSkNCgkJCQl7DQoJCQkJCWlmIChpc19hcnJheSgkZ28tPmdyb3VwcykgJiYgY291bnQoJGdvLT5ncm91cHMpKQ0KCQkJCQl7DQoJCQkJCQlpZiAoYXJyYXlfaW50ZXJzZWN0KCRnby0+Z3JvdXBzLCAkZ3JvdXBzKSkNCgkJCQkJCXsNCgkJCQkJCQkvLyBtYXRjaCBmb3VuZCAtIHJlZGlyZWN0DQoJCQkJCQkJJGRhdGFbJ2FwcCddLT5yZWRpcmVjdCgkZ28tPnVybCk7DQoJCQkJCQkJYnJlYWs7DQoNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ==', '', 'Ly8gZ2V0IHRoZSBzZXQgdmFsdWVzIGZvcm0gY3BhbmVsIHJlZGlyZWN0IG1vZHVsZQ0KJHJlZGlyZWN0ID0gJHBhcmFtcy0+Z2V0KCdyZWRpcmVjdCcsbnVsbCk7DQoNCi8vIHJlZGlyZWN0IGlmIHRoZSB1c2VyIGlzIGluIGdpdmVuIHNlbGVjdGVkIGdyb3VwDQppZiAoJHJlZGlyZWN0ICYmIGlzX29iamVjdCgkcmVkaXJlY3QpICYmIGNvdW50KChhcnJheSkkcmVkaXJlY3QpID4gMCkNCnsNCgkvLyBnZXQgYXBwbGljYXRpb24NCgkkYXBwID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldEFwcGxpY2F0aW9uKCk7DQoJLy8gc2V0IHRoZSB1c2VyIG9iamVjdA0KCSR1c2VyID0gSm9vbWxhX19fMzk0MDMwNjJfODRmYl80NmUwX2JhYzRfMDAyM2Y3NjZlODI3X19fUG93ZXI6OmdldFVzZXIoKTsNCgkvLyBnZXQgdXNlciBncm91cHMNCgkkZ3JvdXBzID0gKGFycmF5KSAkdXNlci0+Z2V0QXV0aG9yaXNlZEdyb3VwcygpOw0KCS8vIGxvb3Agb3ZlciB0aGUgc2V0IHZhbHVlcw0KCWZvcmVhY2ggKCRyZWRpcmVjdCBhcyAkZ28pDQoJew0KCQlpZiAoaXNfb2JqZWN0KCRnbykpDQoJCXsNCgkJCWlmIChpc19hcnJheSgkZ28tPmdyb3VwcykgJiYgY291bnQoJGdvLT5ncm91cHMpKQ0KCQkJew0KCQkJCWlmIChhcnJheV9pbnRlcnNlY3QoJGdvLT5ncm91cHMsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJLy8gbWF0Y2ggZm91bmQgLSByZWRpcmVjdA0KCQkJCQkkYXBwLT5yZWRpcmVjdCgkZ28tPnVybCk7DQoJCQkJCWJyZWFrOw0KDQoJCQkJfQ0KCQkJfQ0KCQl9DQoJfQ0KfQ0KDQovLyBnZXQgdGhlIG1vZHVsZSBjbGFzcyBzZnggKGxvY2FsKQ0KJG1vZHVsZWNsYXNzX3NmeCA9IGh0bWxzcGVjaWFsY2hhcnMoJHBhcmFtcy0+Z2V0KCdtb2R1bGVjbGFzc19zZngnLCAnJyksIEVOVF9DT01QQVQsICdVVEYtOCcpOw0KDQovLyBsb2FkIHRoZSBkZWZhdWx0IFRtcGwNCnJlcXVpcmUgSm9vbWxhX19fZjE1ZDU1NmRfMzNkZF80ZWUzX2EwZjdfMDY1M2U0YTdhMWU0X19fUG93ZXI6OmdldExheW91dFBhdGgoJ21vZF9bW1ttb2R1bGVdXV0nLCAkcGFyYW1zLT5nZXQoJ2xheW91dCcsICdkZWZhdWx0JykpOw==', '5.0.0', 'SiteRedirect', '', '', '', 'Ly8gVE9ETyBwcmVmbGlnaHQgbXVzdCBiZSBhbiBpbnN0YW5jZS4uLg==', '', '', '', 'WW91IGNhbiB1c2UgYWxsIHRoZSBub3JtYWwgbWFya2Rvd24sIGluY2x1ZGluZyB0aGUgcGxhY2UtaG9sZGVycy4=', 0, '', '', 'Site Redirect', 1, 0, 1, '', '', 1, '2016-06-01 10:20:06', '2025-08-28 23:53:16', 23, 0, 1, 7), +(10, 'CS8qKg0KCSAqIFRoZSBNb2R1bGUgUGFyYW1zDQoJICoNCgkgKiBAdmFyICAgIFJlZ2lzdHJ5DQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgJHBhcmFtczsNCg0KCS8qKg0KCSAqIFRoZSBZZWFycw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICR5ZWFyczsNCg0KCS8qKg0KCSAqIFRoZSBCcmFuY2hlcw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICRicmFuY2hlczsNCg0KCS8qKg0KCSAqIFRoZSBMZWdlbmQNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgIDEuMA0KCSAqLw0KCXByb3RlY3RlZCAkbGVnZW5kOw0KDQoJLyoqDQoJICogVGhlIFdpZHRoDQoJICoNCgkgKiBAdmFyICAgIGludA0KCSAqIEBzaW5jZSAgMS4wDQoJICovDQoJcHJvdGVjdGVkICR3aWR0aDsNCg0KCS8qKg0KCSAqIFRoZSBIZWlnaHQNCgkgKg0KCSAqIEB2YXIgICAgaW50DQoJICogQHNpbmNlICAxLjANCgkgKi8NCglwcm90ZWN0ZWQgJGhlaWdodDsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICRjb25maWcgIFRoZSBtb2R1bGUgY29uZmlnDQoJICoNCgkgKiBAc2luY2UgMS4wLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGNvbmZpZykNCgl7DQoJCSR0aGlzLT5wYXJhbXMgPSAkY29uZmlnWydwYXJhbXMnXTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgWWVhcnMNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgMS4wLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24geWVhcnMoKTogYXJyYXkNCgl7DQoJCWlmIChlbXB0eSgkdGhpcy0+eWVhcnMpKQ0KCQl7DQoJCQkkdGhpcy0+eWVhcnMgPSBpdGVyYXRvcl90b19hcnJheSgNCgkJCQluZXcgXERhdGVQZXJpb2QoDQoJCQkJCSR0aGlzLT5taW4oKSwNCgkJCQkJbmV3IFxEYXRlSW50ZXJ2YWwoJ1AxWScpLA0KCQkJCQkkdGhpcy0+bWF4KCkNCgkJCQkpDQoJCQkpOw0KCQl9DQoNCgkJcmV0dXJuICR0aGlzLT55ZWFyczsNCgl9DQoNCgkvKioNCgkgKiBHZXQgV2lkdGgNCgkgKg0KCSAqIEByZXR1cm4gaW50DQoJICogQHNpbmNlIDEuMC4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHdpZHRoKCk6IGludA0KCXsNCgkJaWYgKGVtcHR5KCR0aGlzLT53aWR0aCkpDQoJCXsNCgkJCSR5ZWFycyA9ICR0aGlzLT55ZWFycygpOw0KDQoJCQkkdGhpcy0+d2lkdGggPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApICsgDQoJCQkJJHRoaXMtPnBhcmFtcy0+Z2V0KCdtYXJnaW5fcmlnaHQnLCA1MCkgKw0KCQkJCSgoY291bnQoJHllYXJzKSAtIDEpICogJHRoaXMtPnBhcmFtcy0+Z2V0KCd5ZWFyX3dpZHRoJywgMTIwKSk7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPndpZHRoOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBIZWlnaHQNCgkgKg0KCSAqIEByZXR1cm4gaW50DQoJICogQHNpbmNlIDEuMC4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGhlaWdodCgpOiBpbnQNCgl7DQoJCWlmIChlbXB0eSgkdGhpcy0+aGVpZ2h0KSkNCgkJew0KCQkJJGJyYW5jaGVzID0gJHRoaXMtPmJyYW5jaGVzKCk7DQoNCgkJCSR0aGlzLT5oZWlnaHQgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAgMjQpICsNCgkJCQkkdGhpcy0+cGFyYW1zLT5nZXQoJ2Zvb3Rlcl9oZWlnaHQnLCAyNCkgKw0KCQkJCShjb3VudCgkYnJhbmNoZXMpICogJHRoaXMtPnBhcmFtcy0+Z2V0KCdicmFuY2hfaGVpZ2h0JywgMzApKTsNCgkJfQ0KDQoJCXJldHVybiAkdGhpcy0+aGVpZ2h0Ow0KCX0NCg0KCS8qKg0KCSAqIEdldCBCcmFuY2hlcw0KCSAqDQoJICogRmV0Y2hlcyBhbmQgcHJvY2Vzc2VzIHRoZSBicmFuY2hlcyBvciB2ZXJzaW9ucyBmcm9tIHRoZSBwYXJhbWV0ZXJzLiANCgkgKiBJdCBzYW5pdGl6ZXMgdGhlIGJyYW5jaCBkYXRhLCBjYWxjdWxhdGVzIHRoZWlyIHBvc2l0aW9ucywgc29ydHMgdGhlbSwgYW5kIHRoZW4gcmV0dXJucy4NCgkgKiBJZiBubyB2YWxpZCBicmFuY2hlcyBvciB2ZXJzaW9ucyBhcmUgZm91bmQsIGl0IHRocm93cyBhbiBleGNlcHRpb24uDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5DQoJICoNCgkgKiBAc2luY2UgMi4wLjENCgkgKiBAdGhyb3dzIEV4Y2VwdGlvbiBJZiBubyB2YWxpZCBicmFuY2hlcyBvciB2ZXJzaW9ucyBhcmUgZm91bmQuDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGJyYW5jaGVzKCk6IGFycmF5DQoJew0KCQlpZiAoZW1wdHkoJHRoaXMtPmJyYW5jaGVzKSkNCgkJew0KCQkJJGJyYW5jaGVzID0gKGFycmF5KSAkdGhpcy0+cGFyYW1zLT5nZXQoJ3ZlcnNpb25zJyk7DQoNCgkJCWlmIChlbXB0eSgkYnJhbmNoZXMpKQ0KCQkJew0KCQkJCXRocm93IG5ldyBcRXhjZXB0aW9uKCJObyB2ZXJzaW9ucyBmb3VuZC4iKTsNCgkJCX0NCgkJCSR0aGlzLT5zYW5pdGl6ZSgkYnJhbmNoZXMpOw0KDQoJCQlpZiAoZW1wdHkoJGJyYW5jaGVzKSkNCgkJCXsNCgkJCQl0aHJvdyBuZXcgXEV4Y2VwdGlvbigiTm8gdmVyc2lvbnMgZm91bmQuIik7DQoJCQl9DQoNCgkJCSR0aGlzLT5zZXRUb3AoJGJyYW5jaGVzKTsNCgkJCSR0aGlzLT5zb3J0KCRicmFuY2hlcyk7DQoNCgkJCSR0aGlzLT5icmFuY2hlcyA9ICRicmFuY2hlczsNCgkJfQ0KDQoJCXJldHVybiAkdGhpcy0+YnJhbmNoZXM7DQoJfQ0KDQoJLyoqDQoJICogR2V0IExlZ2VuZCB2YWx1ZXMgKGJ5IGNvbG9yKQ0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSAyLjAuMQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBsZWdlbmQoKTogYXJyYXkNCgl7DQoJCWlmIChlbXB0eSgkdGhpcy0+bGVnZW5kKSkNCgkJew0KCQkJJGJyYW5jaGVzID0gJHRoaXMtPmJyYW5jaGVzKCk7DQoNCgkJCWZvcmVhY2ggKCRicmFuY2hlcyBhcyAkdmVyc2lvbikNCgkJCXsNCgkJCQlmb3JlYWNoICgkdmVyc2lvbi0+ZGF0ZXMgYXMgJGRhdGUpDQoJCQkJew0KCQkJCQkkdGhpcy0+bGVnZW5kWyRkYXRlLT5jb2xvcl0gPSAkZGF0ZTsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPmxlZ2VuZDsNCgl9DQoNCgkvKioNCgkgKiBDdXJyZW50IHN0YXRlIG9mIGEgYnJhbmNoDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICRkYXRlcyAgVGhlIGJyYW5jaCBkYXRlcw0KCSAqDQoJICogQHJldHVybiBzdHJpbmd8bnVsbA0KCSAqIEBzaW5jZSAyLjAuMQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzdGF0ZShhcnJheSAkZGF0ZXMpOiA/c3RyaW5nDQoJew0KCQkvLyBEZXRlcm1pbmUgdGhlIGN1cnJlbnQgc3RhdGUuDQoJCSRub3cgPSBuZXcgXERhdGVUaW1lKCk7DQoNCgkJLy8gQ2hlY2sgaWYgdG9kYXkncyBkYXRlIGlzIGJlZm9yZSB0aGUgZWFybGllc3Qgc3RhcnQgZGF0ZS4NCgkJJGVhcmxpZXN0RGF0ZSA9IFxEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnZC1tLVknLCAkZGF0ZXNbMF0tPnN0YXJ0KTsNCgkJaWYgKCRub3cgPCAkZWFybGllc3REYXRlKQ0KCQl7DQoJCQlyZXR1cm4gJ3Zjcy1mdXR1cmUnOw0KCQl9DQoNCgkJLy8gQ2hlY2sgaWYgdG9kYXkncyBkYXRlIGlzIGFmdGVyIHRoZSBsYXRlc3QgZW5kIGRhdGUuDQoJCSRsYXRlc3REYXRlID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsIGVuZCgkZGF0ZXMpLT5lbmQpOw0KCQlpZiAoJG5vdyA+ICRsYXRlc3REYXRlKQ0KCQl7DQoJCQlyZXR1cm4gJ3Zjcy1lb2wnOw0KCQl9DQoNCgkJLy8gRGV0ZXJtaW5lIHdoaWNoIHN0YXRlIHRoZSBjdXJyZW50IGRhdGUgZmFsbHMgdW5kZXIuDQoJCWZvcmVhY2ggKCRkYXRlcyBhcyAkZGF0ZSkNCgkJew0KCQkJJGluaXRpYWwgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ2QtbS1ZJywgJGRhdGUtPnN0YXJ0KTsNCgkJCSRlbmQgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ2QtbS1ZJywgJGRhdGUtPmVuZCk7DQoNCgkJCWlmICgkbm93ID49ICRpbml0aWFsICYmICRub3cgPD0gJGVuZCkNCgkJCXsNCgkJCQlyZXR1cm4gJGRhdGUtPnN0YXRlOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTWluaW11bSBOdW1iZXIgb2YgWWVhcnMNCgkgKg0KCSAqIEByZXR1cm4gPw0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBtaW4oKQ0KCXsNCgkJJG5vdyA9IG5ldyBcRGF0ZVRpbWUoJ0phbnVhcnkgMScpOw0KCQlyZXR1cm4gJG5vdy0+c3ViKG5ldyBcRGF0ZUludGVydmFsKCdQJyAuDQoJCQkkdGhpcy0+cGFyYW1zLT5nZXQoJ21pbl95ZWFycycsIDMpIC4gJ1knKSk7DQoJfQ0KDQoJLyoqDQoJICogTWF4aW11bSBOdW1iZXIgb2YgWWVhcnMNCgkgKg0KCSAqIEByZXR1cm4gPw0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBtYXgoKQ0KCXsNCgkJJG5vdyA9IG5ldyBcRGF0ZVRpbWUoJ0phbnVhcnkgMScpOw0KCQlyZXR1cm4gJG5vdy0+YWRkKG5ldyBcRGF0ZUludGVydmFsKCdQJyAuDQoJCQkkdGhpcy0+cGFyYW1zLT5nZXQoJ21heF95ZWFycycsIDMpIC4gJ1knKSk7DQoJfQ0KDQoJLyoqDQoJICogVGhlIGNvb3JkaW5hdGVzIG9mIHRoaXMgZGF0ZQ0KCSAqDQoJICogQHBhcmFtIERhdGVUaW1lICRkYXRlIFRoZSBicmFuY2ggc3RhdGUgZGF0ZQ0KCSAqDQoJICogQHJldHVybiBmbG9hdA0KCSAqIEBzaW5jZSAxLjAuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBjb29yZGluYXRlcyhcRGF0ZVRpbWUgJGRhdGUpOiBmbG9hdA0KCXsNCgkJJGRpZmYgPSAkZGF0ZS0+ZGlmZigkdGhpcy0+bWluKCkpOw0KDQoJCWlmICghJGRpZmYtPmludmVydCkNCgkJew0KCQkJcmV0dXJuICR0aGlzLT5wYXJhbXMtPmdldCgnbWFyZ2luX2xlZnQnLCA4MCk7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPnBhcmFtcy0+Z2V0KCdtYXJnaW5fbGVmdCcsIDgwKSArDQoJCQkoJGRpZmYtPmRheXMgLw0KCQkJCSgzNjUuMjQgLyAkdGhpcy0+cGFyYW1zLT5nZXQoJ3llYXJfd2lkdGgnLCAxMjApKQ0KCQkJKTsNCgl9DQoNCgkvKioNCgkgKiBTb3J0IEJyYW5jaGVzIHN0YXRlJ3MgYnkgZGF0ZQ0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAkYnJhbmNoZXMgIFRoZSBicmFuY2hlcw0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlIDIuMC4xDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNvcnQoYXJyYXkgJiRicmFuY2hlcyk6IHZvaWQNCgl7DQoJCWZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICYkYnJhbmNoKQ0KCQl7DQoJCQl1c29ydCgkYnJhbmNoLT5kYXRlcywgZnVuY3Rpb24oJGEsICRiKSB7DQoJCQkJJHN0YXJ0RGF0ZUEgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ2QtbS1ZJywgJGEtPnN0YXJ0KTsNCgkJCQkkc3RhcnREYXRlQiA9IFxEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgnZC1tLVknLCAkYi0+c3RhcnQpOw0KDQoJCQkJaWYgKCRzdGFydERhdGVBID09ICRzdGFydERhdGVCKQ0KCQkJCXsNCgkJCQkJJGVuZERhdGVBID0gXERhdGVUaW1lOjpjcmVhdGVGcm9tRm9ybWF0KCdkLW0tWScsICRhLT5lbmQpOw0KCQkJCQkkZW5kRGF0ZUIgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJ2QtbS1ZJywgJGItPmVuZCk7DQoJCQkJCXJldHVybiAkZW5kRGF0ZUEgPD0+ICRlbmREYXRlQjsNCgkJCQl9DQoNCgkJCQlyZXR1cm4gJHN0YXJ0RGF0ZUEgPD0+ICRzdGFydERhdGVCOw0KCQkJfSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBTZXQgVG9wDQoJICoNCgkgKiBDYWxjdWxhdGVzIHRoZSB0b3AgcG9zaXRpb24gZm9yIGVhY2ggYnJhbmNoIGJhc2VkIG9uIHBhcmFtZXRlcnMgZm9yIGJyYW5jaCBoZWlnaHQgYW5kIGhlYWRlciBoZWlnaHQuDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgJGJyYW5jaGVzIFJlZmVyZW5jZSB0byB0aGUgYnJhbmNoZXMgYXJyYXkuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgMi4wLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0VG9wKGFycmF5ICYkYnJhbmNoZXMpOiB2b2lkDQoJew0KCQkkYnJhbmNoX2hlaWdodCA9ICR0aGlzLT5wYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKTsNCgkJJGhlYWRlcl9oZWlnaHQgPSAkdGhpcy0+cGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCk7DQoNCgkJJGkgPSAwOw0KCQlmb3JlYWNoICgkYnJhbmNoZXMgYXMgJGtleSA9PiAmJGJyYW5jaCkNCgkJew0KCQkJJGJyYW5jaC0+dG9wID0gJGhlYWRlcl9oZWlnaHQgKyAoJGJyYW5jaF9oZWlnaHQgKiAkaSsrKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFNhbml0aXplDQoJICoNCgkgKiBTYW5pdGl6ZXMgdGhlIGJyYW5jaGVzIGJ5IGNoZWNraW5nIHRoZSBleGlzdGVuY2UgYW5kIHR5cGUgb2YgJ2RhdGVzJyBhbmQgJ2RhdGUtPnN0YXRlJy4gDQoJICogQWxzbyBtb2RpZmllcyB0aGUgc3RhdGUgb2YgZWFjaCBkYXRlIGVudHJ5IHdpdGhpbiBhIGJyYW5jaC4NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAkYnJhbmNoZXMgUmVmZXJlbmNlIHRvIHRoZSBicmFuY2hlcyBhcnJheS4NCgkgKg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSAyLjAuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBzYW5pdGl6ZShhcnJheSAmJGJyYW5jaGVzKTogdm9pZA0KCXsNCgkJZm9yZWFjaCAoJGJyYW5jaGVzIGFzICRrZXkgPT4gJiRicmFuY2gpDQoJCXsNCgkJCWlmIChlbXB0eSgkYnJhbmNoLT5kYXRlcykgfHwgIWlzX29iamVjdCgkYnJhbmNoLT5kYXRlcykpDQoJCQl7DQoJCQkJdW5zZXQoJGJyYW5jaGVzWyRrZXldKTsNCgkJCQljb250aW51ZTsNCgkJCX0NCg0KCQkJJGJyYW5jaC0+ZGF0ZXMgPSAoYXJyYXkpICRicmFuY2gtPmRhdGVzOw0KDQoJCQkkcmVtb3ZlID0gZmFsc2U7DQoJCQlmb3JlYWNoICgkYnJhbmNoLT5kYXRlcyBhcyAkayA9PiAmJGRhdGUpDQoJCQl7DQoJCQkJaWYgKGVtcHR5KCRkYXRlLT5zdGF0ZSkpDQoJCQkJew0KCQkJCQkkcmVtb3ZlID0gdHJ1ZTsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KCQkJCSRkYXRlLT5zdGF0ZSA9ICR0aGlzLT5tYWtlU2FmZSgka2V5IC4gJy0nIC4gJGRhdGUtPnN0YXRlKTsNCgkJCX0NCg0KCQkJaWYgKCRyZW1vdmUpDQoJCQl7DQoJCQkJdW5zZXQoJGJyYW5jaGVzWyRrZXldKTsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEdldCBjc3Mgc2FmZSBjbGFzcyBuYW1lDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICAkbmFtZSAgVGhlIHN0cmluZyB0byBtYWtlIHNhZmUNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nDQoJICogQHNpbmNlIDIuMC4xDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIG1ha2VTYWZlKHN0cmluZyAkbmFtZSk6IHN0cmluZw0KCXsNCgkJLy8gRW5zdXJlIGl0IGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIGRpZ2l0DQoJCWlmIChwcmVnX21hdGNoKCcvXlswLTldLycsICRuYW1lKSkNCgkJew0KCQkJJG5hbWUgPSAndmNzLScgLiAkbmFtZTsNCgkJfQ0KDQoJCS8vIFJlcGxhY2UgYW55IG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyB3aXRoIGh5cGhlbnMNCgkJJG5hbWUgPSBwcmVnX3JlcGxhY2UoJy9bXmEtekEtWjAtOV0rLycsICctJywgJG5hbWUpOw0KDQoJCS8vIENvbnZlcnQgdG8gbG93ZXJjYXNlDQoJCSRuYW1lID0gc3RydG9sb3dlcigkbmFtZSk7DQoNCgkJcmV0dXJuICRuYW1lOw0KCX0=', 'dXNlIEpvb21sYVxSZWdpc3RyeVxSZWdpc3RyeTs=', 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, '', 'Ly8gc2V0IHRoZSBicmFuY2hlcw0KJGJyYW5jaGVzID0gJGhlbHBlci0+YnJhbmNoZXMoKTsNCi8vIHNldCBicmFuY2ggcXR5DQokcXR5ID0gY291bnQoJGJyYW5jaGVzKTs=', 'PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdib3g9IjAgMCA8P3BocCBlY2hvICRoZWxwZXItPndpZHRoKCk7ID8+IDw/cGhwIGVjaG8gJGhlbHBlci0+aGVpZ2h0KCk7ID8+Ig0KCXdpZHRoPSI8P3BocCBlY2hvICRoZWxwZXItPndpZHRoKCk7ID8+IiBoZWlnaHQ9Ijw/cGhwIGVjaG8gJGhlbHBlci0+aGVpZ2h0KCk7ID8+Ij4NCgk8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCQl0ZXh0IHsNCgkJCWZpbGw6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCd0ZXh0X2NvbG9yJywgJyMzMzMnKTsgPz47DQoJCQlmb250LWZhbWlseTogIlNvdXJjZSBTYW5zIFBybyIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQoJCQlmb250LXNpemU6IDw/cGhwIGVjaG8gKDIgLyAzKSAqICRwYXJhbXMtPmdldCgnaGVhZGVyX2hlaWdodCcsIDI0KTsgPz5weDsNCgkJfQ0KCQlnLnZjcy1mdXR1cmUgcmVjdCwNCgkJLnZjcy1icmFuY2hlcyByZWN0LnZjcy1mdXR1cmUgew0KCQkJZmlsbDogPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2Z1dHVyZV9jb2xvcicsICcjNTA5MWNkJyk7ID8+Ow0KCQl9DQoJCWcudmNzLWZ1dHVyZSB0ZXh0IHsNCgkJCWZpbGw6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdmdXR1cmVfdGV4dF9jb2xvcicsICcjZmZmJyk7ID8+Ow0KCQl9DQoJCWcudmNzLWVvbCByZWN0LA0KCQkudmNzLWJyYW5jaGVzIHJlY3QudmNzLWVvbCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZW5kX29mX2xpZmVfY29sb3InLCAnI2YzMycpOyA/PjsNCgkJfQ0KCQlnLnZjcy1lb2wgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZW5kX29mX2xpZmVfdGV4dF9jb2xvcicsICcjZmZmJyk7ID8+Ow0KCQl9DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAkdmVyc2lvbik6ID8+DQoJCQk8P3BocCBmb3JlYWNoICgkdmVyc2lvbi0+ZGF0ZXMgYXMgJGRhdGUpOiA/Pg0KCQkJCWcuPD9waHAgZWNobyAkZGF0ZS0+c3RhdGU7ID8+IHJlY3QsDQoJCQkJLnZjcy1icmFuY2hlcyByZWN0Ljw/cGhwIGVjaG8gJGRhdGUtPnN0YXRlOyA/PiB7DQoJCQkJCWZpbGw6IDw/cGhwIGVjaG8gJGRhdGUtPmNvbG9yOyA/PjsNCgkJCQl9DQoJCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCQkudmNzLWJyYW5jaC1sYWJlbHMgdGV4dCB7DQoJCWRvbWluYW50LWJhc2VsaW5lOiBjZW50cmFsOw0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCQkudmNzLXRvZGF5IGxpbmUgew0KCQkJc3Ryb2tlOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgndG9kYXlfbGluZV9jb2xvcicsICcjZjMzJyk7ID8+Ow0KCQkJc3Ryb2tlLWRhc2hhcnJheTogNywgNzsNCgkJCXN0cm9rZS13aWR0aDogM3B4Ow0KCQl9DQoJCS52Y3MtdG9kYXkgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgndG9kYXlfdGV4dF9jb2xvcicsICcjZjMzJyk7ID8+Ow0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCQkudmNzLXllYXJzIGxpbmUgew0KCQkJc3Ryb2tlOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgneWVhcnNfbGluZV9jb2xvcicsICcjMDAwJyk7ID8+Ow0KCQl9DQoJCS52Y3MteWVhcnMgdGV4dCB7DQoJCQlmaWxsOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgneWVhcnNfdGV4dF9jb2xvcicsICcjMDAwJyk7ID8+Ow0KCQkJdGV4dC1hbmNob3I6IG1pZGRsZTsNCgkJfQ0KCTwvc3R5bGU+DQoJPCEtLSBCcmFuY2ggbGFiZWxzIC0tPg0KCTxnIGNsYXNzPSJ2Y3MtYnJhbmNoLWxhYmVscyI+DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICRicmFuY2gpOiA/Pg0KCQkJPGcgY2xhc3M9Ijw/cGhwIGVjaG8gJGhlbHBlci0+c3RhdGUoJGJyYW5jaC0+ZGF0ZXMpOyA/PiI+DQoJCQkJPHJlY3QgeD0iMCIgeT0iPD9waHAgZWNobyAkYnJhbmNoLT50b3A7ID8+IiB3aWR0aD0iPD9waHAgZWNobyAwLjUgKiAkcGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApOyA/PiINCgkJCQkJaGVpZ2h0PSI8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKTsgPz4iLz4NCgkJCQk8dGV4dCB4PSI8P3BocCBlY2hvIDAuMjUgKiAkcGFyYW1zLT5nZXQoJ21hcmdpbl9sZWZ0JywgODApOyA/PiIgeT0iPD9waHAgZWNobyAkYnJhbmNoLT50b3AgKyAoMC41ICogJHBhcmFtcy0+Z2V0KCdicmFuY2hfaGVpZ2h0JywgMzApKTsgPz4iPg0KCQkJCQk8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJyYW5jaC0+dmVyc2lvbik7ID8+DQoJCQkJPC90ZXh0Pg0KCQkJPC9nPg0KCQk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCTwvZz4NCgk8IS0tIEJyYW5jaCBibG9ja3MgLS0+DQoJPGcgY2xhc3M9InZjcy1icmFuY2hlcyI+DQoJCTw/cGhwIGZvcmVhY2ggKCRicmFuY2hlcyBhcyAka2V5ID0+ICR2ZXJzaW9uKTogPz4NCgkJCTw/cGhwDQoJCQkJJHkgPSAkdmVyc2lvbi0+dG9wOw0KCQkJCSRoZWlnaHQgPSAkcGFyYW1zLT5nZXQoJ2JyYW5jaF9oZWlnaHQnLCAzMCk7DQoJCQk/Pg0KCQkJPD9waHAgZm9yZWFjaCAoJHZlcnNpb24tPmRhdGVzIGFzICRkYXRlKTogPz4NCgkJCQk8P3BocA0KCQkJCQkkeF9zdGFydCA9ICRoZWxwZXItPmNvb3JkaW5hdGVzKG5ldyBcRGF0ZVRpbWUoJGRhdGUtPnN0YXJ0KSk7DQoJCQkJCSR4X2VuZCA9ICRoZWxwZXItPmNvb3JkaW5hdGVzKG5ldyBcRGF0ZVRpbWUoJGRhdGUtPmVuZCkpOw0KCQkJCT8+DQoJCQkJPGcgY2xhc3M9Ijw/cGhwIGVjaG8gJGRhdGUtPnN0YXRlOyA/PiI+DQoJCQkJCTxyZWN0DQoJCQkJCQl4PSI8P3BocCBlY2hvICR4X3N0YXJ0OyA/PiINCgkJCQkJCXk9Ijw/cGhwIGVjaG8gJHk7ID8+Ig0KCQkJCQkJd2lkdGg9Ijw/cGhwIGVjaG8gJHhfZW5kIC0gJHhfc3RhcnQ7ID8+Ig0KCQkJCQkJaGVpZ2h0PSI8P3BocCBlY2hvICRoZWlnaHQ7ID8+Ij4NCgkJCQkJCQk8dGl0bGU+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkYXRlLT5sYWJlbCk7ID8+PC90aXRsZT4NCgkJCQkJPC9yZWN0Pg0KCQkJCTwvZz4NCgkJCTw/cGhwIGVuZGZvcmVhY2g7ID8+DQoJCTw/cGhwIGVuZGZvcmVhY2g7ID8+DQoJPC9nPg0KCTwhLS0gWWVhciBsaW5lcyAtLT4NCgk8ZyBjbGFzcz0idmNzLXllYXJzIj4NCgkJPD9waHAgZm9yZWFjaCAoJGhlbHBlci0+eWVhcnMoKSBhcyAkZGF0ZSk6ID8+DQoJCQk8bGluZSB4MT0iPD9waHAgZWNobyAkaGVscGVyLT5jb29yZGluYXRlcygkZGF0ZSk7ID8+IiB5MT0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCk7ID8+Ig0KCQkJCXgyPSI8P3BocCBlY2hvICRoZWxwZXItPmNvb3JkaW5hdGVzKCRkYXRlKTsgPz4iDQoJCQkJeTI9Ijw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdoZWFkZXJfaGVpZ2h0JywgMjQpICsgKCRxdHkgKiAkcGFyYW1zLT5nZXQoJ2JyYW5jaF9oZWlnaHQnLCAzMCkpOyA/PiIvPg0KCQkJPHRleHQgeD0iPD9waHAgZWNobyAkaGVscGVyLT5jb29yZGluYXRlcygkZGF0ZSkgOz8+IiB5PSI8P3BocCBlY2hvIDAuOCAqICRwYXJhbXMtPmdldCgnaGVhZGVyX2hlaWdodCcsIDI0KTsgPz4iPg0KCQkJCTw/cGhwIGVjaG8gJGRhdGUtPmZvcm1hdCgnaiBNIFknKTsgPz4NCgkJCTwvdGV4dD4NCgkJPD9waHAgZW5kZm9yZWFjaDsgPz4NCgk8L2c+DQoJPCEtLSBUb2RheSAtLT4NCgk8ZyBjbGFzcz0idmNzLXRvZGF5Ij4NCgkJPD9waHANCgkJCSRub3cgPSBuZXcgXERhdGVUaW1lOw0KCQkJJHggPSAkaGVscGVyLT5jb29yZGluYXRlcygkbm93KTsNCgkJPz4NCgkJPGxpbmUgeDE9Ijw/cGhwIGVjaG8gJHg7ID8+IiB5MT0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCk7ID8+IiB4Mj0iPD9waHAgZWNobyAkeDsgPz4iDQoJCQl5Mj0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCkgKyAoJHF0eSAqICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKSk7ID8+Ii8+DQoJCTx0ZXh0IHg9Ijw/cGhwIGVjaG8gJHg7ID8+Ig0KCQkJeT0iPD9waHAgZWNobyAkcGFyYW1zLT5nZXQoJ2hlYWRlcl9oZWlnaHQnLCAyNCkgKyAoJHF0eSAqICRwYXJhbXMtPmdldCgnYnJhbmNoX2hlaWdodCcsIDMwKSkgKyAoMC44ICogJHBhcmFtcy0+Z2V0KCdmb290ZXJfaGVpZ2h0JywgMjQpKTsgPz4iPg0KCQkJPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnVG9kYXknKSAuICc6ICcgLiAkbm93LT5mb3JtYXQoJ2ogTSBZJyk7ID8+DQoJCTwvdGV4dD4NCgk8L2c+DQo8L3N2Zz4NCjw/cGhwIGlmICgkcGFyYW1zLT5nZXQoJ3Nob3dfbGVnZW5kJywgMCkgPT0gMSk6ID8+DQo8P3BocCANCi8vIGdldCB0aGUgbGVnZW5kIHZhbHVlcw0KJGxlZ2VuZCA9ICRoZWxwZXItPmxlZ2VuZCgpOw0KPz4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJLyogQm94IFNoYWRvdyAqLw0KCS52Y3MtYm94LXNoYWRvdy1tZWRpdW0gew0KCQlib3gtc2hhZG93OiAwIDEwcHggNDBweCByZ2JhKDAsIDAsIDAsIDAuMTUpLCAwIDAuNXJlbSAxLjVyZW0gcmdiYSgwLCAwLCAwLCAwLjI1KTsNCgl9DQoJLyogQ2FyZCBTdHlsZXMgKi8NCgkudmNzLWNhcmQgew0KCQlib3JkZXItcmFkaXVzOiA0cHg7DQoJCW1hcmdpbi10b3A6IDE1cHg7DQoJfQ0KCS52Y3MtY2FyZC1sZWdlbmQgew0KCQliYWNrZ3JvdW5kLWNvbG9yOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnbGVnZW5kX2JhY2tncm91bmRfY29sb3InLCAnIzQ5NDQ0NCcpOyA/PjsNCgkJY29sb3I6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdsZWdlbmRfdGV4dF9jb2xvcicsICcjZmJmM2VmJyk7ID8+Ow0KCX0NCgkudmNzLWNhcmQtYm9keSB7DQoJCXBhZGRpbmc6IDRweDsNCgl9DQoJLyogR3JpZCBTdHlsZXMgKi8NCgkudmNzLWdyaWQgew0KCQlkaXNwbGF5OiBmbGV4Ow0KCQlmbGV4LXdyYXA6IHdyYXA7DQoJfQ0KCS52Y3MtZ3JpZC1tYXRjaCA+IGRpdiB7DQoJCXBhZGRpbmc6IDVweDsNCgkJbWluLWhlaWdodDogMXB4Ow0KCQltYXJnaW46IDEwcHg7DQoJfQ0KCS8qIEZsZXhib3ggU3R5bGVzICovDQoJLnZjcy1mbGV4IHsNCgkJZGlzcGxheTogZmxleDsNCgkJYWxpZ24taXRlbXM6IGNlbnRlcjsNCgkJanVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KCX0NCgkudmNzLWZsZXgtbWlkZGxlIHsNCgkJYWxpZ24taXRlbXM6IGNlbnRlcjsNCgl9DQoJLyogQ29sb3IgQm94IFN0eWxlcyAqLw0KCS52Y3MtY29sb3ItYm94IHsNCgkJd2lkdGg6IDIwcHg7DQoJCWhlaWdodDogMjBweDsNCgkJZGlzcGxheTogaW5saW5lLWJsb2NrOw0KCQltYXJnaW4tcmlnaHQ6IDVweDsNCgl9DQoJLnZjcy1mdXR1cmUgeyBiYWNrZ3JvdW5kLWNvbG9yOiA8P3BocCBlY2hvICRwYXJhbXMtPmdldCgnZnV0dXJlX2NvbG9yJywgJyMwMDAnKTsgPz47IH0NCgkudmNzLWVvbCB7IGJhY2tncm91bmQtY29sb3I6IDw/cGhwIGVjaG8gJHBhcmFtcy0+Z2V0KCdlbmRfb2ZfbGlmZV9jb2xvcicsICcjZjMzJyk7ID8+OyB9DQoJPD9waHAgZm9yZWFjaCAoJGxlZ2VuZCBhcyAkc3RhdGUpOiA/Pg0KCQkuPD9waHAgZWNobyAkc3RhdGUtPnN0YXRlOyA/PiB7IGJhY2tncm91bmQtY29sb3I6IDw/cGhwIGVjaG8gJHN0YXRlLT5jb2xvcjsgPz47IH0NCgk8P3BocCBlbmRmb3JlYWNoOyA/Pg0KCS8qIE1lZGlhIFF1ZXJ5IGZvciBzbWFsbGVyIHNjcmVlbnMgKi8NCglAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsNCgkJLnZjcy1ncmlkIHsNCgkJCWZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQoJCX0NCgkJLnZjcy1mbGV4IHsNCgkJCWRpc3BsYXk6IGJsb2NrOw0KCQl9DQoJCS52Y3MtZ3JpZC1tYXRjaCA+IGRpdiB7DQoJCQltYXJnaW46IDRweDsNCgkJCXBhZGRpbmc6IDA7DQoJCX0NCgl9DQo8L3N0eWxlPg0KPGRpdiBjbGFzcz0idmNzLWJveC1zaGFkb3ctbWVkaXVtIj4NCgk8ZGl2IGNsYXNzPSJ2Y3MtY2FyZCB2Y3MtY2FyZC1sZWdlbmQgdmNzLWNhcmQtYm9keSI+DQoJCTxkaXYgY2xhc3M9InZjcy1ncmlkLW1hdGNoIHZjcy1ncmlkIj4NCgkJCTxkaXYgY2xhc3M9InZjcy1mbGV4IHZjcy1mbGV4LW1pZGRsZSI+DQoJCQkJPHNwYW4NCgkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggdmNzLWZ1dHVyZSBoYXNUb29sdGlwIg0KCQkJCQl0aXRsZT0iPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnUGxhbm5lZCByZWxlYXNlIHNjaGVkdWxlJyk7ID8+Ig0KCQkJCT48L3NwYW4+PD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnRnV0dXJlIFJlbGVhc2VzJyk7ID8+DQoJCQk8L2Rpdj4NCgkJCTw/cGhwIGZvcmVhY2ggKCRsZWdlbmQgYXMgJHN0YXRlKTogPz4NCgkJCQk8ZGl2IGNsYXNzPSJ2Y3MtZmxleCB2Y3MtZmxleC1taWRkbGUiPg0KCQkJCQk8c3Bhbg0KCQkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggPD9waHAgZWNobyAkc3RhdGUtPnN0YXRlOyA/PiBoYXNUb29sdGlwIg0KCQkJCQkJdGl0bGU9Ijw/cGhwIGVjaG8gJHN0YXRlLT5kZXNjcmlwdGlvbiA/PyAnJzsgPz4iDQoJCQkJCT48L3NwYW4+PD9waHAgZWNobyAkc3RhdGUtPmxhYmVsOyA/Pg0KCQkJCTwvZGl2Pg0KCQkJPD9waHAgZW5kZm9yZWFjaDsgPz4NCgkJCTxkaXYgY2xhc3M9InZjcy1mbGV4IHZjcy1mbGV4LW1pZGRsZSI+DQoJCQkJPHNwYW4NCgkJCQkJY2xhc3M9InZjcy1jb2xvci1ib3ggdmNzLWVvbCBoYXNUb29sdGlwIg0KCQkJCQl0aXRsZT0iPD9waHAgZWNobyBKb29tbGFfX19iYTYzMjZlZl9jYjc5XzQzNDhfODBmNF9hYjA4NjA4MmUzYzVfX19Qb3dlcjo6XygnVmVyc2lvbiBFbmQgb2YgTGlmZSBzY2hlZHVsZSAtIGV4cGVjdCBubyBtb3JlIHN1cHBvcnQnKTsgPz4iDQoJCQkJPjwvc3Bhbj48P3BocCBlY2hvIEpvb21sYV9fX2JhNjMyNmVmX2NiNzlfNDM0OF84MGY0X2FiMDg2MDgyZTNjNV9fX1Bvd2VyOjpfKCdWZXJzaW9uIGF0IEVuZCBvZiBMaWZlJyk7ID8+DQoJCQk8L2Rpdj4NCgkJPC9kaXY+DQoJPC9kaXY+DQo8L2Rpdj4NCjw/cGhwIGVuZGlmOyA/Pg==', 'Version Calendar in SVG', '{\"fields0\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"dimention\",\"label\":\"Dimentions\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"3d3bf310-a38f-4e31-89c8-d5d986f4bb53\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"f8ceaba3-04d3-406d-abb9-c8372100817c\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"3e72e2ab-0731-46f1-83ac-8bffddcd5634\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"12ecc6cc-9195-4633-8ecd-27ecc0643bd4\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"a2f93b12-c3fd-4e00-9732-0c97a7f37489\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"fb71c5cc-65d9-4389-8599-b94f4eecc97c\",\"custom_value\":\"\"}}},\"fields1\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"style\",\"label\":\"Styles\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"7414d14b-b802-4ac2-9090-218cdb32156c\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"1805a9da-75bf-41d6-b120-4c021fd93d8d\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"8f485452-b062-4ec9-9fa5-0182d04d8d7c\",\"custom_value\":\"\"},\"fields3\":{\"field\":\"8097f524-48e6-470a-aa42-e4383d3019fa\",\"custom_value\":\"\"},\"fields4\":{\"field\":\"f83befac-e15e-421c-83a0-c17e99492b79\",\"custom_value\":\"\"},\"fields5\":{\"field\":\"9e2dcfc2-ea21-4caf-88aa-f0706d5878e5\",\"custom_value\":\"\"},\"fields6\":{\"field\":\"0a6ee559-822b-4cd1-a049-d956ba2ff80b\",\"custom_value\":\"\"},\"fields7\":{\"field\":\"cb60a327-5ce5-4b48-a8e0-27321022bf40\",\"custom_value\":\"\"},\"fields8\":{\"field\":\"a2e37110-c69f-41b3-b05b-f5f51d0d9ab4\",\"custom_value\":\"\"},\"fields9\":{\"field\":\"dc416a4a-a19f-4ef5-a703-e2334df42efd\",\"custom_value\":\"\"},\"fields10\":{\"field\":\"8f1c9c1f-9d64-4f6c-9066-777665c7dcac\",\"custom_value\":\"\"},\"fields11\":{\"field\":\"11bf8b86-99ad-4003-82eb-c55c16d0a041\",\"custom_value\":\"\"}}},\"fields2\":{\"module\":\"1\",\"file\":\"config\",\"fields_name\":\"params\",\"fieldset\":\"versions\",\"label\":\"Versions\",\"fields_rules_paths\":\"2\",\"addrulepath\":[],\"addfieldpath\":[],\"fields\":{\"fields0\":{\"field\":\"9f5ddbec-3f1c-4af9-8d33-a158bcaaf453\",\"custom_value\":\"\"},\"fields1\":{\"field\":\"44a3a4aa-f601-4765-b656-2f0a01dd6fd9\",\"custom_value\":\"\"},\"fields2\":{\"field\":\"801520d9-b7b3-47c5-a2a9-2581199ead0b\",\"custom_value\":\"\"}}}}', '2dcaa8af-0bb0-4fac-8584-4e4e418620cd', '', '', 'Ly8gSW5jbHVkZSB0aGUgaGVscGVyIGZ1bmN0aW9ucyBvbmx5IG9uY2UNClxKTG9hZGVyOjpyZWdpc3RlcignTW9kW1tbTW9kdWxlXV1dSGVscGVyJywgX19ESVJfXyAuICcvaGVscGVyLnBocCcpOw0KDQp0cnkNCnsNCgkvLyBHZXQgdGhlIEhlbHBlciBjbGFzcw0KCSRoZWxwZXIgPSBuZXcgTW9kW1tbTW9kdWxlXV1dSGVscGVyKFsncGFyYW1zJyA9PiAkcGFyYW1zXSk7DQoNCgkvLyBzZXQgdGhlIGJyYW5jaGVzDQoJJGJyYW5jaGVzID0gJGhlbHBlci0+YnJhbmNoZXMoKTsNCg0KCS8vIHNldCBicmFuY2ggcXR5DQoJJHF0eSA9IGNvdW50KCRicmFuY2hlcyk7DQoNCgkvLyBnZXQgdGhlIG1vZHVsZSBjbGFzcyBzZnggKGxvY2FsKQ0KCSRtb2R1bGVjbGFzc19zZnggPSBodG1sc3BlY2lhbGNoYXJzKCRwYXJhbXMtPmdldCgnbW9kdWxlY2xhc3Nfc2Z4JyksIEVOVF9DT01QQVQsICdVVEYtOCcpOw0KDQoJLy8gbG9hZCB0aGUgZGVmYXVsdCBUbXBsDQoJcmVxdWlyZSBKb29tbGFfX19mMTVkNTU2ZF8zM2RkXzRlZTNfYTBmN18wNjUzZTRhN2ExZTRfX19Qb3dlcjo6Z2V0TGF5b3V0UGF0aCgnbW9kX1tbW21vZHVsZV1dXScsICRwYXJhbXMtPmdldCgnbGF5b3V0JywgJ2RlZmF1bHQnKSk7DQp9IA0KY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgDQp7DQoJLy8gT3V0cHV0IGEgd2FybmluZyBtZXNzYWdlIGFsb25nIHdpdGggdGhlIGV4Y2VwdGlvbiBtZXNzYWdlDQoJZWNobyAiV2FybmluZzogIiAuICRlLT5nZXRNZXNzYWdlKCk7DQp9', '5.0.0', 'Version_calendar_svg', '', '', '', 'Ly8gVE9ETw==', '', '', '', 'IyBWZXJzaW9uIENhbGVuZGFyIGluIFNWRyAoW1tbbW9kdWxlLnZlcnNpb25dXV0pDQoNCj4gVGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIHdhcyB0YWtlbiBmcm9tIHRoZSBbUEhQIHN1cHBvcnRlZCB2ZXJzaW9uc10oaHR0cHM6Ly9naXRodWIuY29tL3BocC93ZWItcGhwL2Jsb2IvbWFzdGVyL2ltYWdlcy9zdXBwb3J0ZWQtdmVyc2lvbnMucGhwKS4NCg0KIyBCdWlsZCBEZXRhaWxzDQoNCisgKkNvbXBhbnkqOiBbT3BlbiBTb3VyY2UgTWF0dGVyc10oaHR0cDovL3d3dy5qb29tbGEub3JnKQ0KKyAqQXV0aG9yKjogW0pvb21sYSEgUHJvamVjdF0obWFpbHRvOmFkbWluQGpvb21sYS5vcmcpDQorICpOYW1lKjogW1ZlcnNpb24gQ2FsZW5kYXIgc3ZnXShodHRwOi8vd3d3Lmpvb21sYS5vcmcpDQorICpGaXJzdCBCdWlsZCo6IDNyZCBTZXB0ZW1iZXIsIDIwMjINCisgKlZlcnNpb24qOiBbW1ttb2R1bGUudmVyc2lvbl1dXQ0KKyAqQ29weXJpZ2h0KjogKEMpIDIwMjIgT3BlbiBTb3VyY2UgTWF0dGVycywgSW5jLg0KKyAqTGljZW5zZSo6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0', 0, '', '', 'Version Calendar', 1, 0, 1, '', '', 1, '2022-09-03 04:42:25', '2025-08-28 23:50:34', 73, 0, 1, 8); -- -- Dumping data for table `#__componentbuilder_joomla_plugin` @@ -2167,13 +2170,13 @@ INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `t (104, '584747d1-3a86-453d-b7a3-a2219de8d777', 'VDM.Abstraction.Model', 'Model', 'abstract class', 'Base Model\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"8aef58c1-3f70-4bd4-b9e4-3f29fcd41cff\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.Model', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"2da6d6c4-eb29-4d69-8bc2-36d96e916adf\",\"as\":\"Table\"}}', 'CS8qKg0KCSAqIExhc3QgSUQNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgYXJyYXkgJGxhc3Q7DQoNCgkvKioNCgkgKiBTZWFyY2ggVGFibGUNCgkgKg0KCSAqIEB2YXIgICAgVGFibGUNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgVGFibGUgJHRhYmxlOw0KDQoJLyoqDQoJICogVGFibGUgTmFtZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICR0YWJsZU5hbWU7DQoNCgkvKioNCgkgKiBUaGUgc3dpdGNoIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiBlbXB0eSB2YWx1ZXMNCgkgKg0KCSAqIEB2YXIgICAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByb3RlY3RlZCBib29sICRhbGxvd0VtcHR5ID0gdHJ1ZTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yDQoJICoNCgkgKiBAcGFyYW0gVGFibGUgICAgICAgICAkdGFibGUgICAgICAgIFRoZSBzZWFyY2ggdGFibGUgb2JqZWN0Lg0KCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgICR0YWJsZU5hbWUgICAgVGhlIHRhYmxlDQoJICogQHBhcmFtIGJvb2x8bnVsbCAgICAgJGFsbG93RW1wdHkgICBUaGUgc3dpdGNoIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiBlbXB0eSB2YWx1ZXMgKGRlZmF1bHQgdHJ1ZSkNCgkgKg0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChUYWJsZSAkdGFibGUsID9zdHJpbmcgJHRhYmxlTmFtZSA9IG51bGwsID9ib29sICRhbGxvd0VtcHR5ID0gbnVsbCkNCgl7DQoJCSR0aGlzLT50YWJsZSA9ICR0YWJsZTsNCgkJaWYgKCR0YWJsZU5hbWUgIT09IG51bGwpDQoJCXsNCgkJCSR0aGlzLT5zZXRUYWJsZSgkdGFibGVOYW1lKTsNCgkJfQ0KCQlpZiAoJGFsbG93RW1wdHkgIT09IG51bGwpDQoJCXsNCgkJCSR0aGlzLT5zZXRBbGxvd0VtcHR5KCRhbGxvd0VtcHR5KTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFNldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSBhY3RpdmUNCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0YWJsZShzdHJpbmcgJHRhYmxlKTogc2VsZg0KCXsNCgkJJHRoaXMtPnNldFRhYmxlKCR0YWJsZSk7DQoNCgkJcmV0dXJuICR0aGlzOw0KCX0NCg0KCS8qKg0KCSAqIE1vZGVsIHRoZSB2YWx1ZQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT52YWx1ZSh2YWx1ZSwgJ3ZhbHVlX2tleScsICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICAkdmFsdWUgICAgVGhlIHZhbHVlIHRvIG1vZGVsDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAgJGZpZWxkICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICAkdGFibGUgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBtaXhlZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCWFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiB2YWx1ZSgkdmFsdWUsIHN0cmluZyAkZmllbGQsID9zdHJpbmcgJHRhYmxlID0gbnVsbCk7DQoNCgkvKioNCgkgKiBNb2RlbCBhIHZhbHVlIG9mIG11bHRpcGxlIGl0ZW1zDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPnZhbHVlcyhBcnJheSwgJ3ZhbHVlX2tleScsICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgICRpdGVtcyAgICBUaGUgYXJyYXkgb2YgdmFsdWVzDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAkZmllbGQgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgJHRhYmxlICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZXMoP2FycmF5ICRpdGVtcywgc3RyaW5nICRmaWVsZCwgP3N0cmluZyAkdGFibGUgPSBudWxsKTogP2FycmF5DQoJew0KCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgdGFibGUNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkaXRlbXMpKQ0KCQl7DQoJCQkvLyBzZXQgdGhlIHRhYmxlIG5hbWUNCgkJCWlmIChlbXB0eSgkdGFibGUpKQ0KCQkJew0KCQkJCSR0YWJsZSA9ICR0aGlzLT5nZXRUYWJsZSgpOw0KCQkJfQ0KDQoJCQkvLyB2YWxpZGF0ZSBpZiBmaWVsZCBleGlzdCBpbiB0YWJsZQ0KCQkJaWYgKCEkdGhpcy0+dGFibGUtPmV4aXN0KCR0YWJsZSwgJGZpZWxkKSkNCgkJCXsNCgkJCQlyZXR1cm4gbnVsbDsNCgkJCX0NCg0KCQkJLy8gdmFsdWUgY291bnRlcg0KCQkJJHZhbHVlX251bWJlciA9IDA7DQoNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCB0YWJsZQ0KCQkJJGl0ZW1fYnVja2V0ID0gW107DQoNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkdmFsdWUpDQoJCQl7DQoJCQkJaWYgKCEkdGhpcy0+dmFsaWRhdGVCZWZvcmUoJHZhbHVlLCAkZmllbGQsICR0YWJsZSkpDQoJCQkJew0KCQkJCQljb250aW51ZTsNCgkJCQl9DQoNCgkJCQkkdmFsdWUgPSAkdGhpcy0+dmFsdWUoJHZhbHVlLCAkZmllbGQsICR0YWJsZSk7DQoNCgkJCQlpZiAoISR0aGlzLT52YWxpZGF0ZUFmdGVyKCR2YWx1ZSwgJGZpZWxkLCAkdGFibGUpKQ0KCQkJCXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJCQkJJGl0ZW1fYnVja2V0W10gPSAkdmFsdWU7DQoNCgkJCQkkdmFsdWVfbnVtYmVyKys7DQoJCQl9DQoNCgkJCS8vIGRvIHdlIGhhdmUgYW55IHZhbHVlcyBsZWZ0DQoJCQlpZiAoJHZhbHVlX251bWJlciA+IDApDQoJCQl7DQoJCQkJcmV0dXJuICRpdGVtX2J1Y2tldDsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIE1vZGVsIHRoZSB2YWx1ZXMgb2YgYW4gaXRlbQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5pdGVtKE9iamVjdCwgJ3RhYmxlX25hbWUnKTsNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdHxudWxsICAgICRpdGVtICAgICAgVGhlIGl0ZW0gb2JqZWN0DQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAgJHRhYmxlICAgICBUaGUgdGFibGUNCgkgKg0KCSAqIEByZXR1cm4gIG9iamVjdHxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW0oP29iamVjdCAkaXRlbSwgP3N0cmluZyAkdGFibGUgPSBudWxsKTogP29iamVjdA0KCXsNCgkJLy8gd2UgbXVzdCBoYXZlIGFuIG9iamVjdA0KCQlpZiAoZW1wdHkoJGl0ZW0pKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KDQoJCS8vIHNldCB0aGUgdGFibGUgbmFtZQ0KCQlpZiAoZW1wdHkoJHRhYmxlKSkNCgkJew0KCQkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCk7DQoJCX0NCg0KCQlpZiAoKCRmaWVsZHMgPSAkdGhpcy0+Z2V0VGFibGVGaWVsZHMoJHRhYmxlLCB0cnVlKSkgIT09IG51bGwpDQoJCXsNCgkJCS8vIGZpZWxkIGNvdW50ZXINCgkJCSRmaWVsZF9udW1iZXIgPSAwOw0KDQoJCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgdGFibGUNCgkJCSRpdGVtX2J1Y2tldCA9IG5ldyBcc3RkQ2xhc3MoKTsNCg0KCQkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpDQoJCQl7DQoJCQkJLy8gbW9kZWwgYSB2YWx1ZSBpZiBpdCBleGlzdHMNCgkJCQlpZihpc3NldCgkaXRlbS0+eyRmaWVsZH0pKQ0KCQkJCXsNCgkJCQkJaWYgKCEkdGhpcy0+dmFsaWRhdGVCZWZvcmUoJGl0ZW0tPnskZmllbGR9LCAkZmllbGQsICR0YWJsZSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoNCgkJCQkJJGl0ZW0tPnskZmllbGR9ID0gJHRoaXMtPnZhbHVlKCRpdGVtLT57JGZpZWxkfSwgJGZpZWxkLCAkdGFibGUpOw0KDQoJCQkJCWlmICghJHRoaXMtPnZhbGlkYXRlQWZ0ZXIoJGl0ZW0tPnskZmllbGR9LCAkZmllbGQsICR0YWJsZSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoNCgkJCQkJJGl0ZW1fYnVja2V0LT57JGZpZWxkfSA9ICRpdGVtLT57JGZpZWxkfTsNCg0KCQkJCQkkZmllbGRfbnVtYmVyKys7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBhbGwgaXRlbXMgbXVzdCBoYXZlIG1vcmUgdGhhbiBvbmUgZmllbGQgb3IgaXRzIGVtcHR5ICgxID0ga2V5KQ0KCQkJaWYgKCRmaWVsZF9udW1iZXIgPiAxKQ0KCQkJew0KCQkJCXJldHVybiAkaXRlbV9idWNrZXQ7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBNb2RlbCB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIGl0ZW1zDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPml0ZW1zKEFycmF5LCAndGFibGVfbmFtZScpOw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICAkaXRlbXMgICAgVGhlIGFycmF5IG9mIGl0ZW0gb2JqZWN0cw0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgICR0YWJsZSAgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW1zKD9hcnJheSAkaXRlbXMgPSBudWxsLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOiA/YXJyYXkNCgl7DQoJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCB0YWJsZQ0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRpdGVtcykpDQoJCXsNCgkJCS8vIHNldCB0aGUgdGFibGUgbmFtZQ0KCQkJaWYgKGVtcHR5KCR0YWJsZSkpDQoJCQl7DQoJCQkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCk7DQoJCQl9DQoNCgkJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaWQgPT4gJiRpdGVtKQ0KCQkJew0KCQkJCS8vIG1vZGVsIHRoZSBpdGVtDQoJCQkJaWYgKCgkaXRlbSA9ICR0aGlzLT5pdGVtKCRpdGVtLCAkdGFibGUpKSAhPT0gbnVsbCkNCgkJCQl7DQoJCQkJCS8vIGFkZCB0aGUgbGFzdCBJRA0KCQkJCQkkdGhpcy0+bGFzdFskdGFibGVdID0gJGl0ZW0tPmlkID8/ICR0aGlzLT5sYXN0WyR0YWJsZV0gPz8gbnVsbDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5zZXQoJGl0ZW1zWyRpZF0pOw0KCQkJCX0NCgkJCX0NCg0KCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkaXRlbXMpKQ0KCQkJew0KCQkJCXJldHVybiAkaXRlbXM7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBNb2RlbCB0aGUgdmFsdWVzIG9mIGFuIHJvdw0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5pdGVtKEFycmF5LCAndGFibGVfbmFtZScpOw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICAgJGl0ZW0gICAgICBUaGUgaXRlbSBhcnJheQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgICR0YWJsZSAgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJvdyg/YXJyYXkgJGl0ZW0sID9zdHJpbmcgJHRhYmxlID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gd2UgbXVzdCBoYXZlIGFuIGFycmF5DQoJCWlmIChlbXB0eSgkaXRlbSkpDQoJCXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoNCgkJLy8gc2V0IHRoZSB0YWJsZSBuYW1lDQoJCWlmIChlbXB0eSgkdGFibGUpKQ0KCQl7DQoJCQkkdGFibGUgPSAkdGhpcy0+Z2V0VGFibGUoKTsNCgkJfQ0KDQoJCWlmICgoJGZpZWxkcyA9ICR0aGlzLT5nZXRUYWJsZUZpZWxkcygkdGFibGUsIHRydWUpKSAhPT0gbnVsbCkNCgkJew0KCQkJLy8gZmllbGQgY291bnRlcg0KCQkJJGZpZWxkX251bWJlciA9IDA7DQoNCgkJCS8vIGNoZWNrIGlmIHRoaXMgaXMgYSB2YWxpZCB0YWJsZQ0KCQkJJGl0ZW1fYnVja2V0ID0gW107DQoNCgkJCWZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKQ0KCQkJew0KCQkJCS8vIG1vZGVsIGEgdmFsdWUgaWYgaXQgZXhpc3RzDQoJCQkJaWYoaXNzZXQoJGl0ZW1bJGZpZWxkXSkpDQoJCQkJew0KCQkJCQlpZiAoISR0aGlzLT52YWxpZGF0ZUJlZm9yZSgkaXRlbVskZmllbGRdLCAkZmllbGQsICR0YWJsZSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoNCgkJCQkJJGl0ZW1bJGZpZWxkXSA9ICR0aGlzLT52YWx1ZSgkaXRlbVskZmllbGRdLCAkZmllbGQsICR0YWJsZSk7DQoNCgkJCQkJaWYgKCEkdGhpcy0+dmFsaWRhdGVBZnRlcigkaXRlbVskZmllbGRdLCAkZmllbGQsICR0YWJsZSkpDQoJCQkJCXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoNCgkJCQkJJGl0ZW1fYnVja2V0WyRmaWVsZF0gPSAkaXRlbVskZmllbGRdOw0KDQoJCQkJCSRmaWVsZF9udW1iZXIrKzsNCgkJCQl9DQoJCQl9DQoNCgkJCS8vIGFsbCBpdGVtcyBtdXN0IGhhdmUgbW9yZSB0aGFuIG9uZSBmaWVsZCBvciBpdHMgZW1wdHkgKDEgPSBpZCBvciBndWlkKQ0KCQkJaWYgKCRmaWVsZF9udW1iZXIgPiAxKQ0KCQkJew0KCQkJCXJldHVybiAkaXRlbV9idWNrZXQ7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBNb2RlbCB0aGUgdmFsdWVzIG9mIG11bHRpcGxlIHJvd3MNCgkgKiAgICAgICAgICBFeGFtcGxlOiAkdGhpcy0+aXRlbXMoQXJyYXksICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgICAkaXRlbXMgICAgVGhlIGFycmF5IG9mIGl0ZW0gYXJyYXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICAkdGFibGUgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoP2FycmF5ICRpdGVtcyA9IG51bGwsID9zdHJpbmcgJHRhYmxlID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIHRhYmxlDQoJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJGl0ZW1zKSkNCgkJew0KCQkJLy8gc2V0IHRoZSB0YWJsZSBuYW1lDQoJCQlpZiAoZW1wdHkoJHRhYmxlKSkNCgkJCXsNCgkJCQkkdGFibGUgPSAkdGhpcy0+Z2V0VGFibGUoKTsNCgkJCX0NCg0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpZCA9PiAmJGl0ZW0pDQoJCQl7DQoJCQkJLy8gbW9kZWwgdGhlIGl0ZW0NCgkJCQlpZiAoKCRpdGVtID0gJHRoaXMtPnJvdygkaXRlbSwgJHRhYmxlKSkgIT09IG51bGwpDQoJCQkJew0KCQkJCQkvLyBhZGQgdGhlIGxhc3QgSUQNCgkJCQkJJHRoaXMtPmxhc3RbJHRhYmxlXSA9ICRpdGVtWydpZCddID8/ICR0aGlzLT5sYXN0WyR0YWJsZV0gPz8gbnVsbDsNCgkJCQl9DQoJCQkJZWxzZQ0KCQkJCXsNCgkJCQkJdW5zZXQoJGl0ZW1zWyRpZF0pOw0KCQkJCX0NCgkJCX0NCg0KCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkaXRlbXMpKQ0KCQkJew0KCQkJCXJldHVybiAkaXRlbXM7DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBHZXQgbGFzdCBtb2RlbGVkIElEDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPmxhc3QoJ3RhYmxlX25hbWUnKTsNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgICAkdGFibGUgICAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgaW50fG51bGwNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gbGFzdCg/c3RyaW5nICR0YWJsZSA9IG51bGwpOiA/aW50DQoJew0KCQkvLyBzZXQgdGhlIHRhYmxlIG5hbWUNCgkJaWYgKGVtcHR5KCR0YWJsZSkpDQoJCXsNCgkJCSR0YWJsZSA9ICR0aGlzLT5nZXRUYWJsZSgpOw0KCQl9DQoNCgkJLy8gY2hlY2sgaWYgdGhpcyBpcyBhIHZhbGlkIHRhYmxlDQoJCWlmICgkdGFibGUgJiYgaXNzZXQoJHRoaXMtPmxhc3RbJHRhYmxlXSkpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+bGFzdFskdGFibGVdOw0KCQl9DQoNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogU2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZQ0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgICR0YWJsZU5hbWUgIFRoZSB0YWJsZSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldFRhYmxlKHN0cmluZyAkdGFibGVOYW1lKTogdm9pZA0KCXsNCgkJJHRoaXMtPnRhYmxlTmFtZSA9ICR0YWJsZU5hbWU7DQoJfQ0KDQoJLyoqDQoJICogU2V0IHRoZSBzd2l0Y2ggdG8gY29udHJvbCB0aGUgYmVoYXZpb3VyIG9mIGVtcHR5IHZhbHVlcw0KCSAqDQoJICogQHBhcmFtIGJvb2wgICAkYWxsb3dFbXB0eSAgVGhlIHN3aXRjaA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXRBbGxvd0VtcHR5KGJvb2wgJGFsbG93RW1wdHkpOiB2b2lkDQoJew0KCQkkdGhpcy0+YWxsb3dFbXB0eSA9ICRhbGxvd0VtcHR5Ow0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRUYWJsZSgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+dGFibGVOYW1lOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgc3dpdGNoIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiBlbXB0eSB2YWx1ZXMNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxsb3dFbXB0eSgpOiBib29sDQoJew0KCQlyZXR1cm4gJHRoaXMtPmFsbG93RW1wdHk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZSdzIGZpZWxkcyAoaW5jbHVkaW5nIGRlZmF1bHRzKQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICAgIFRoZSBhcmVhDQoJICogQHBhcmFtICAgYm9vbCAgICAkZGVmYXVsdCAgIEFkZCB0aGUgZGVmYXVsdCBmaWVsZHMNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFRhYmxlRmllbGRzKHN0cmluZyAkdGFibGUsIGJvb2wgJGRlZmF1bHQgPSBmYWxzZSk6ID9hcnJheQ0KCXsNCgkJcmV0dXJuICR0aGlzLT50YWJsZS0+ZmllbGRzKCR0YWJsZSwgJGRlZmF1bHQpOw0KCX0NCg0KCS8qKg0KCSAqIFZhbGlkYXRlIGJlZm9yZSB0aGUgdmFsdWUgaXMgbW9kZWxsZWQgKGJhc2ljLCBvdmVycmlkZSBpbiBjaGlsZCBjbGFzcykNCgkgKg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAgJHZhbHVlICAgVGhlIGZpZWxkIHZhbHVlDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAkZmllbGQgICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICR0YWJsZSAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZUJlZm9yZSgmJHZhbHVlLCA/c3RyaW5nICRmaWVsZCA9IG51bGwsID9zdHJpbmcgJHRhYmxlID0gbnVsbCk6IGJvb2w7DQoNCgkvKioNCgkgKiBWYWxpZGF0ZSBhZnRlciB0aGUgdmFsdWUgaXMgbW9kZWxsZWQgKGJhc2ljLCBvdmVycmlkZSBpbiBjaGlsZCBjbGFzcykNCgkgKg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAgICAgJHZhbHVlICAgVGhlIGZpZWxkIHZhbHVlDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAkZmllbGQgICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICR0YWJsZSAgIFRoZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCWFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZUFmdGVyKCYkdmFsdWUsID9zdHJpbmcgJGZpZWxkID0gbnVsbCwgP3N0cmluZyAkdGFibGUgPSBudWxsKTogYm9vbDs=', '{}', '{}', '{\"source\":{\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56-settings\":\"d0e288fa06bf1fb2326fc7508dd27bc2070e448e\",\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56-power\":\"dc2d8b985257c2ce09e4328112e9c8a70eb5e184\",\"1a1b6f3d-f16c-431a-b270-7a8a80cc7f56-readme\":\"3ad9612244d57ddd86f59f97436493e06b5ea6df\"}}', 1, '2022-09-13 10:05:47', 55, 0, 1), (124, '06f8eada-d59b-441c-b287-0aea1793da5a', 'VDM.Database.Load', 'Load', 'final class', 'Database Load\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '6cbef8f8-4813-48e3-b05a-65e1aea95171', '', '', '', '{\"0\":\"2ad31f74-f579-499d-b98b-c4f54fd615dd\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Load', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIExvYWQgZGF0YSByb3dzIGFzIGFuIGFycmF5IG9mIGFzc29jaWF0ZWQgYXJyYXlzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJHNlbGVjdCwgYXJyYXkgJHRhYmxlcywgP2FycmF5ICR3aGVyZSA9IG51bGwsDQoJCT9hcnJheSAkb3JkZXIgPSBudWxsLCA/aW50ICRsaW1pdCA9IG51bGwpOiA/YXJyYXkNCgl7DQoJCS8vIHNldCBrZXkgaWYgZm91bmQNCgkJJGtleSA9ICR0aGlzLT5nZXRLZXkoJHNlbGVjdCk7DQoNCgkJLy8gY2hlY2sgaWYgd2UgY2FuIGdldCBtYW55IHJvd3MNCgkJaWYgKCR0aGlzLT5tYW55KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpKQ0KCQl7DQoJCQkvLyByZXR1cm4gYXNzb2NpYXRlZCBhcnJheXMgZnJvbSB0aGUgdGFibGUgcmVjb3Jkcw0KCQkJcmV0dXJuICR0aGlzLT5kYi0+bG9hZEFzc29jTGlzdCgka2V5KTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCBkYXRhIHJvd3MgYXMgYW4gYXJyYXkgb2Ygb2JqZWN0cw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkd2hlcmUgICAgQXJyYXkgb2Ygd2hlcmUga2V5PT52YWx1ZSBtYXRjaCBleGlzdA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZA0KCSAqDQoJICogQHJldHVybiAgYXJyYXl8bnVsbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gc2V0IGtleSBpZiBmb3VuZA0KCQkka2V5ID0gJHRoaXMtPmdldEtleSgkc2VsZWN0KTsNCg0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG1hbnkgcm93cw0KCQlpZiAoJHRoaXMtPm1hbnkoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIsICRsaW1pdCkpDQoJCXsNCgkJCS8vIHJldHVybiBhc3NvY2lhdGVkIGFycmF5cyBmcm9tIHRoZSB0YWJsZSByZWNvcmRzDQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkT2JqZWN0TGlzdCgka2V5KTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCBkYXRhIHJvdyBhcyBhbiBhc3NvY2lhdGVkIGFycmF5DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgJHRhYmxlcyAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICR3aGVyZSAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvdyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/YXJyYXkNCgl7DQoJCS8vIGNoZWNrIGlmIHdlIGNhbiBnZXQgb25lIHJvdw0KCQlpZiAoJHRoaXMtPm9uZSgkc2VsZWN0LCAkdGFibGVzLCAkd2hlcmUsICRvcmRlcikpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+ZGItPmxvYWRBc3NvYygpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIGRhdGEgcm93IGFzIGFuIG9iamVjdA0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICR0YWJsZXMgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICAgIEFycmF5IG9mIGhvdyB0byBvcmRlciB0aGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgb2JqZWN0fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/b2JqZWN0DQoJew0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG9uZSByb3cNCgkJaWYgKCR0aGlzLT5vbmUoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkT2JqZWN0KCk7DQoJCX0NCg0KCQkvLyBkYXRhIGRvZXMgbm90IGV4aXN0DQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgbWF4IHZhbHVlIGJhc2VkIG9uIGEgZmlsdGVyZWQgcmVzdWx0IGZyb20gYSBnaXZlbiB0YWJsZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkZmllbGQgICAgIFRoZSBmaWVsZCBrZXkNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICR0YWJsZXMgICAgVGhlIHRhYmxlcw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgJGZpbHRlciAgICBUaGUgZmlsdGVyIGtleXMNCgkgKg0KCSAqIEByZXR1cm4gIGludHxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIG1heCgkZmllbGQsIGFycmF5ICR0YWJsZXMsIGFycmF5ICRmaWx0ZXIpOiA/aW50DQoJew0KCQlpZiAoKCR0YWJsZXMgPSAkdGhpcy0+bm9ybWFsaXplVGFibGVzKCR0YWJsZXMpKSA9PT0gbnVsbCkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCg0KCQkvLyBnZXQgdGhlIHF1ZXJ5DQoJCSRxdWVyeSA9ICR0aGlzLT5xdWVyeShbImFsbCIgPT4gIk1BWChgJGZpZWxkYCkiXSwgJHRhYmxlcywgJGZpbHRlcik7DQoNCgkJLy8gTG9hZCB0aGUgbWF4IG51bWJlcg0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdmFsdWVzDQoJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuIChpbnQpICR0aGlzLT5kYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGl0ZW1zIGJhc2VkIG9uIGZpbHRlciByZXN1bHQgZnJvbSBhIGdpdmVuIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICR0YWJsZXMgICAgVGhlIHRhYmxlDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAkZmlsdGVyICAgIFRoZSBmaWx0ZXIga2V5cw0KCSAqDQoJICogQHJldHVybiAgaW50fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gY291bnQoYXJyYXkgJHRhYmxlcywgYXJyYXkgJGZpbHRlcik6ID9pbnQNCgl7DQoJCWlmICgoJHRhYmxlcyA9ICR0aGlzLT5ub3JtYWxpemVUYWJsZXMoJHRhYmxlcykpID09PSBudWxsKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KDQoJCS8vIGdldCB0aGUgcXVlcnkNCgkJJHF1ZXJ5ID0gJHRoaXMtPnF1ZXJ5KFsiYWxsIiA9PiAnQ09VTlQoKiknXSwgJHRhYmxlcywgJGZpbHRlcik7DQoNCgkJLy8gTG9hZCB0aGUgbWF4IG51bWJlcg0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIGNoZWNrIGlmIHdlIGhhdmUgdmFsdWVzDQoJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJew0KCQkJcmV0dXJuIChpbnQpICR0aGlzLT5kYi0+bG9hZFJlc3VsdCgpOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIG9uZSB2YWx1ZSBmcm9tIGEgcm93DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgJHRhYmxlcyAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICR3aGVyZSAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBtaXhlZA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBjYW4gZ2V0IG9uZSB2YWx1ZQ0KCQlpZiAoJHRoaXMtPm9uZSgkc2VsZWN0LCAkdGFibGVzLCAkd2hlcmUsICRvcmRlcikpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+ZGItPmxvYWRSZXN1bHQoKTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCB2YWx1ZXMgZnJvbSBtdWx0aXBsZSByb3dzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHZhbHVlcyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9hcnJheQ0KCXsNCgkJLy8gY2hlY2sgaWYgd2UgY2FuIGdldCBtYW55IHJvd3MNCgkJaWYgKCR0aGlzLT5tYW55KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmRiLT5sb2FkQ29sdW1uKCk7DQoJCX0NCg0KCQkvLyBkYXRhIGRvZXMgbm90IGV4aXN0DQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIExvYWQgbWFueQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkd2hlcmUgICAgQXJyYXkgb2Ygd2hlcmUga2V5PT52YWx1ZSBtYXRjaCBleGlzdA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBtYW55KGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLA0KCQk/YXJyYXkgJG9yZGVyID0gbnVsbCwgP2ludCAkbGltaXQgPSBudWxsKTogYm9vbA0KCXsNCgkJaWYgKCgkdGFibGVzID0gJHRoaXMtPm5vcm1hbGl6ZVRhYmxlcygkdGFibGVzKSkgPT09IG51bGwpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCS8vIGdldCB0aGUgcXVlcnkNCgkJJHF1ZXJ5ID0gJHRoaXMtPnF1ZXJ5KCRzZWxlY3QsICR0YWJsZXMsICR3aGVyZSwgJG9yZGVyLCAkbGltaXQpOw0KDQoJCS8vIExvYWQgdGhlIGl0ZW1zDQoJCSR0aGlzLT5kYi0+c2V0UXVlcnkoJHF1ZXJ5KTsNCgkJJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJLy8gY2hlY2sgaWYgd2UgaGF2ZSB2YWx1ZXMNCgkJaWYgKCR0aGlzLT5kYi0+Z2V0TnVtUm93cygpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KDQoJCS8vIGRhdGEgZG9lcyBub3QgZXhpc3QNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIExvYWQgb25lDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAkc2VsZWN0ICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICR0YWJsZXMgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIG9uZShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiBib29sDQoJew0KCQlpZiAoKCR0YWJsZXMgPSAkdGhpcy0+bm9ybWFsaXplVGFibGVzKCR0YWJsZXMpKSA9PT0gbnVsbCkNCgkJew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gZ2V0IHRoZSBxdWVyeQ0KCQkkcXVlcnkgPSAkdGhpcy0+cXVlcnkoJHNlbGVjdCwgJHRhYmxlcywgJHdoZXJlLCAkb3JkZXIpOw0KDQoJCS8vIExvYWQgdGhlIGl0ZW0NCgkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnksIDAsIDEpOw0KCQkkdGhpcy0+ZGItPmV4ZWN1dGUoKTsNCg0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIHZhbHVlcw0KCQlpZiAoJHRoaXMtPmRiLT5nZXROdW1Sb3dzKCkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoNCgkJLy8gZGF0YSBkb2VzIG5vdCBleGlzdA0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBxdWVyeSBvYmplY3QuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkdGFibGVzICAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaC4NCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgJHdoZXJlICAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QuDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGEuDQoJICogQHBhcmFtICAgaW50fG51bGwgICAgICRsaW1pdCAgICBMaW1pdCB0aGUgbnVtYmVyIG9mIHZhbHVlcyByZXR1cm5lZC4NCgkgKg0KCSAqIEByZXR1cm4gIG9iamVjdHxudWxsICBUaGUgcXVlcnkgb2JqZWN0IChEYXRhYmFzZVF1ZXJ5KS4NCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBxdWVyeShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwNCgkJP2FycmF5ICRvcmRlciA9IG51bGwsID9pbnQgJGxpbWl0ID0gbnVsbCk6ID9vYmplY3QNCgl7DQoJCSRxdWVyeSA9ICR0aGlzLT5kYi0+Y3JlYXRlUXVlcnkoKTsNCg0KCQkkdGhpcy0+YXBwbHlTZWxlY3QoJHF1ZXJ5LCAkc2VsZWN0KTsNCgkJJHRoaXMtPmFwcGx5RnJvbUFuZEpvaW5zKCRxdWVyeSwgJHRhYmxlcyk7DQoJCSR0aGlzLT5hcHBseVdoZXJlKCRxdWVyeSwgJHdoZXJlKTsNCgkJJHRoaXMtPmFwcGx5T3JkZXIoJHF1ZXJ5LCAkb3JkZXIpOw0KCQkkdGhpcy0+YXBwbHlMaW1pdCgkcXVlcnksICRsaW1pdCk7DQoNCgkJcmV0dXJuICRxdWVyeTsNCgl9DQoNCgkvKioNCgkgKiBBcHBseSBTRUxFQ1QgY2xhdXNlIHRvIHRoZSBxdWVyeS4NCgkgKg0KCSAqIFN1cHBvcnRzIGF1dG8tYWxpYXNpbmcgYW5kIGludGVsbGlnZW50IHByZWZpeGluZy4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJHF1ZXJ5ICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBhcnJheSAgICRzZWxlY3QgIFRoZSBzZWxlY3QgZGVmaW5pdGlvbi4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseVNlbGVjdChvYmplY3QgJHF1ZXJ5LCBhcnJheSAkc2VsZWN0KTogdm9pZA0KCXsNCgkJLy8gSGFuZGxlICdhbGwnIHNlcGFyYXRlbHkgZmlyc3QNCgkJaWYgKGlzc2V0KCRzZWxlY3RbJ2FsbCddKSkNCgkJew0KCQkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkc2VsZWN0WydhbGwnXSkpDQoJCQl7DQoJCQkJZm9yZWFjaCAoJHNlbGVjdFsnYWxsJ10gYXMgJHNlbGVjdEFsbCkNCgkJCQl7DQoJCQkJCSRxdWVyeS0+c2VsZWN0KCRzZWxlY3RBbGwpOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZiAoaXNfc3RyaW5nKCRzZWxlY3RbJ2FsbCddKSkNCgkJCXsNCgkJCQkkcXVlcnktPnNlbGVjdCgkc2VsZWN0WydhbGwnXSk7DQoJCQl9DQoNCgkJCXVuc2V0KCRzZWxlY3RbJ2FsbCddKTsNCgkJfQ0KDQoJCS8vIE5vcm1hbGl6ZSB0aGUgc2VsZWN0IGFycmF5IHRvIGVuc3VyZSBrZXk9PmFsaWFzIHBhaXJzDQoJCSRub3JtYWxpemVkID0gJHRoaXMtPm5vcm1hbGl6ZVNlbGVjdEFycmF5KCRzZWxlY3QpOw0KDQoJCWlmICghQXJyYXlIZWxwZXI6OmNoZWNrKCRub3JtYWxpemVkKSkNCgkJew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJLy8gUXVvdGUgYW5kIGFwcGx5IHRvIHF1ZXJ5DQoJCSRxdWVyeS0+c2VsZWN0KA0KCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoDQoJCQkJYXJyYXlfa2V5cygkbm9ybWFsaXplZCksDQoJCQkJYXJyYXlfdmFsdWVzKCRub3JtYWxpemVkKQ0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIEFwcGx5IEZST00gYW5kIEpPSU4gY2xhdXNlcy4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJHF1ZXJ5ICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBhcnJheSAgICR0YWJsZXMgIFRoZSB0YWJsZSBkZWZpbml0aW9ucy4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseUZyb21BbmRKb2lucyhvYmplY3QgJHF1ZXJ5LCBhcnJheSAkdGFibGVzKTogdm9pZA0KCXsNCgkJJHF1ZXJ5LT5mcm9tKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0aGlzLT5nZXRUYWJsZSgkdGFibGVzWydhJ10pLCAnYScpKTsNCgkJdW5zZXQoJHRhYmxlc1snYSddKTsNCg0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCR0YWJsZXMpKQ0KCQl7DQoJCQlmb3JlYWNoICgkdGFibGVzIGFzICRhcyA9PiAkZGV0YWlscykNCgkJCXsNCgkJCQkkdGFibGVfbmFtZSA9ICRkZXRhaWxzWyduYW1lJ10gPz8gbnVsbDsNCgkJCQkkam9pbl9vbiA9ICRkZXRhaWxzWydqb2luX29uJ10gPz8gbnVsbDsNCgkJCQkkYXNfb24gPSAkZGV0YWlsc1snYXNfb24nXSA/PyBudWxsOw0KCQkJCSRqb2luID0gc3RydG91cHBlcigkZGV0YWlsc1snam9pbiddID8/ICdMRUZUJyk7DQoNCgkJCQlpZiAoZW1wdHkoJHRhYmxlX25hbWUpIHx8IGVtcHR5KCRqb2luX29uKSB8fCBlbXB0eSgkYXNfb24pKQ0KCQkJCXsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0KDQoJCQkJLy8gYmFzaWMgam9pbiBmb3Igbm93IDopDQoJCQkJJHF1ZXJ5LT5qb2luKA0KCQkJCQkkam9pbiwNCgkJCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoJHRoaXMtPmdldFRhYmxlKCR0YWJsZV9uYW1lKSwgJGFzKQ0KCQkJCQkuICcgT04gKCcgLiAkdGhpcy0+ZGItPnF1b3RlTmFtZSgkam9pbl9vbikNCgkJCQkJLiAnID0gJyAuICR0aGlzLT5kYi0+cXVvdGVOYW1lKCRhc19vbikgLiAnKScNCgkJCQkpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQXBwbHkgV0hFUkUgY2xhdXNlcy4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAgICRxdWVyeSAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgIFdoZXJlIGNsYXVzZSBhcnJheS4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseVdoZXJlKG9iamVjdCAkcXVlcnksID9hcnJheSAkd2hlcmUpOiB2b2lkDQoJew0KCQkkd2hlcmUgPSAkdGhpcy0+bm9ybWFsaXplS2V5cygkd2hlcmUgPz8gW10pOw0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkd2hlcmUpKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlmb3JlYWNoICgkd2hlcmUgYXMgJGtleSA9PiAkY29uZGl0aW9uKQ0KCQl7DQoJCQkkdGhpcy0+aGFuZGxlV2hlcmVDb25kaXRpb24oJHF1ZXJ5LCAka2V5LCAkY29uZGl0aW9uKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEFwcGx5IE9SREVSIEJZIGNsYXVzZS4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAgICRxdWVyeSAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgIE9yZGVyIGJ5IGNsYXVzZS4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseU9yZGVyKG9iamVjdCAkcXVlcnksID9hcnJheSAkb3JkZXIpOiB2b2lkDQoJew0KCQkkb3JkZXIgPSAkdGhpcy0+bm9ybWFsaXplS2V5cygkb3JkZXIgPz8gW10pOw0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRvcmRlcikpDQoJCXsNCgkJCWZvcmVhY2ggKCRvcmRlciBhcyAka2V5ID0+ICRkaXJlY3Rpb24pDQoJCQl7DQoJCQkJJHF1ZXJ5LT5vcmRlcigkdGhpcy0+ZGItPnF1b3RlTmFtZSgka2V5KSAuICcgJyAuICRkaXJlY3Rpb24pOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQXBwbHkgTElNSVQgY2xhdXNlLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgICRxdWVyeSAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgJGxpbWl0ICBOdW1iZXIgb2YgcmVjb3JkcyB0byBsaW1pdC4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBhcHBseUxpbWl0KG9iamVjdCAkcXVlcnksID9pbnQgJGxpbWl0KTogdm9pZA0KCXsNCgkJaWYgKGlzX251bWVyaWMoJGxpbWl0KSkNCgkJew0KCQkJJHF1ZXJ5LT5zZXRMaW1pdCgkbGltaXQpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBrZXkgZnJvbSB0aGUgc2VsZWN0aW9uIGFycmF5Lg0KCSAqDQoJICogVGhpcyBmdW5jdGlvbiByZXRyaWV2ZXMgYSBrZXkgZnJvbSB0aGUgcHJvdmlkZWQgc2VsZWN0aW9uIGFycmF5Lg0KCSAqIFRoZSBrZXkgaXMgcmVtb3ZlZCBmcm9tIHRoZSBhcnJheSBhZnRlciBiZWluZyByZXRyaWV2ZWQuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cy4NCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZ3xudWxsICAgVGhlIGtleSwgb3IgbnVsbCBpZiBubyBrZXkgaXMgZm91bmQuDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEtleShhcnJheSAmJHNlbGVjdCk6ID9zdHJpbmcNCgl7DQoJCSRrZXkgPSBudWxsOw0KDQoJCS8vIENoZWNrIGZvciAna2V5JyBmaXJzdCBhbmQgZW5zdXJlIGl0J3MgYSBzdHJpbmcuDQoJCWlmIChpc3NldCgkc2VsZWN0WydrZXknXSkgJiYgaXNfc3RyaW5nKCRzZWxlY3RbJ2tleSddKSkNCgkJew0KCQkJJGtleSA9ICRzZWxlY3RbJ2tleSddOw0KCQkJdW5zZXQoJHNlbGVjdFsna2V5J10pOyAvLyBSZW1vdmUgJ2tleScgZnJvbSB0aGUgYXJyYXkuDQoJCX0NCg0KCQlyZXR1cm4gJGtleTsNCgl9DQoNCgkvKioNCgkgKiBOb3JtYWxpemUgbWl4ZWQtZm9ybWF0IHRhYmxlIGRlZmluaXRpb25zIHRvIGEgY29uc2lzdGVudCBzdHJ1Y3R1cmUuDQoJICoNCgkgKiBTdXBwb3J0ZWQgZm9ybWF0czoNCgkgKiAtIFsnYScgPT4gJ3RhYmxlJ10NCgkgKiAtIFsnYScgPT4gJ3RhYmxlJywgJ2InID0+IFsnbmFtZScgPT4gJ3RhYmxlMicsICdqb2luX29uJyA9PiAnYS5pZCcsICdhc19vbicgPT4gJ2IuZW50aXR5J11dDQoJICogLSBbJ2EudGFibGUnLCAnYi50YWJsZTIuaWQuZW50aXR5J10NCgkgKiAtIFsnYTp0YWJsZScsICdiOnRhYmxlMjppZDplbnRpdHknXQ0KCSAqIC0gWyd0YWJsZSddDQoJICogLSBbJ3RhYmxlJywgJ3RhYmxlMi5pZC5lbnRpdHknXQ0KCSAqIC0gWyd0YWJsZScsICd0YWJsZTI6aWQ6ZW50aXR5J10NCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkdGFibGVzICBUaGUgcmF3IGlucHV0DQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsICBOb3JtYWxpemVkIFsnYWxpYXMnID0+ICd0YWJsZSddIGFuZCBqb2luIG1hcHBpbmdzLCBvciBudWxsIGlmICdhJyBpcyBtaXNzaW5nDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gbm9ybWFsaXplVGFibGVzKGFycmF5ICR0YWJsZXMpOiA/YXJyYXkNCgl7DQoJCWlmIChlbXB0eSgkdGFibGVzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCg0KCQkkbm9ybWFsaXplZCA9IFtdOw0KDQoJCWZvcmVhY2ggKCR0YWJsZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCWlmIChpc19pbnQoJGtleSkpDQoJCQl7DQoJCQkJJHRoaXMtPnBhcnNlVmFyaW91c1N5bnRheCgkdmFsdWUsICRub3JtYWxpemVkKTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+cGFyc2VBc3NvY1N5bnRheCgka2V5LCAkdmFsdWUsICRub3JtYWxpemVkKTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBpc3NldCgkbm9ybWFsaXplZFsnYSddKSA/ICRub3JtYWxpemVkIDogbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBOb3JtYWxpemUgYWxsIEtleXMgaW4gYXJyYXkgYnkgZW5zdXJpbmc6DQoJICogLSBBbGwga2V5cyBhcmUgZnVsbHkgcXVhbGlmaWVkIChhZGQgImEuIiBpZiBtaXNzaW5nKQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICRkYXRhICBUaGUgcmF3IGRhdGUgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5ICBOb3JtYWxpemVkIGFycmF5IHdpdGggJ3RhYmxlLmNvbHVtbicgPT4gJHZhbHVlDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleXMoYXJyYXkgJGRhdGEpOiBhcnJheQ0KCXsNCgkJJG5vcm1hbGl6ZWQgPSBbXTsNCg0KCQlmb3JlYWNoICgkZGF0YSBhcyAka2V5ID0+ICR2YWx1ZSkNCgkJew0KCQkJLy8gSWYgaW5kZXhlZCBhcnJheSAobm8gYWxpYXMpLCB3ZSBpZ25vcmUgdGhpcyByb3cNCgkJCWlmIChpc19pbnQoJGtleSkpDQoJCQl7DQoJCQkJY29udGludWU7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGNvbHVtbiA9ICR0aGlzLT5ub3JtYWxpemVDb2x1bW4oJ2EnLCAka2V5KTsNCgkJCX0NCg0KCQkJJG5vcm1hbGl6ZWRbJGNvbHVtbl0gPSAkdmFsdWU7DQoJCX0NCg0KCQlyZXR1cm4gJG5vcm1hbGl6ZWQ7DQoJfQ0KDQoJLyoqDQoJICogTm9ybWFsaXplIFNFTEVDVCBhcnJheSBieSBlbnN1cmluZzoNCgkgKiAtIEFsbCBrZXlzIGFyZSBmdWxseSBxdWFsaWZpZWQgKGFkZCAiYS4iIGlmIG1pc3NpbmcpDQoJICogLSBBbGwgdmFsdWVzIGFyZSBhbGlhc2VzIChlaXRoZXIgcHJvdmlkZWQgb3IgZXh0cmFjdGVkIGZyb20ga2V5KQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICRzZWxlY3QgIFRoZSByYXcgc2VsZWN0IGFycmF5DQoJICoNCgkgKiBAcmV0dXJuICBhcnJheSAgTm9ybWFsaXplZCBhcnJheSB3aXRoICd0YWJsZS5jb2x1bW4nID0+ICdhbGlhcycNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gbm9ybWFsaXplU2VsZWN0QXJyYXkoYXJyYXkgJHNlbGVjdCk6IGFycmF5DQoJew0KCQkkbm9ybWFsaXplZCA9IFtdOw0KDQoJCWZvcmVhY2ggKCRzZWxlY3QgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCS8vIElmIGluZGV4ZWQgYXJyYXkgKG5vIGFsaWFzKSwgdXNlIHRoZSB2YWx1ZSBhcyBrZXkNCgkJCWlmIChpc19pbnQoJGtleSkpDQoJCQl7DQoJCQkJJGNvbHVtbiA9ICR0aGlzLT5ub3JtYWxpemVDb2x1bW4oJ2EnLCAkdmFsdWUpOw0KCQkJCSRhbGlhcyAgPSAkdGhpcy0+ZXh0cmFjdEFsaWFzKCRjb2x1bW4pOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSRjb2x1bW4gPSAkdGhpcy0+bm9ybWFsaXplQ29sdW1uKCdhJywgJGtleSk7DQoJCQkJJGFsaWFzICA9IGlzX3N0cmluZygkdmFsdWUpICYmICR2YWx1ZSAhPT0gJycgPyAkdmFsdWUgOiAkdGhpcy0+ZXh0cmFjdEFsaWFzKCRjb2x1bW4pOw0KCQkJfQ0KDQoJCQkkbm9ybWFsaXplZFskY29sdW1uXSA9ICRhbGlhczsNCgkJfQ0KDQoJCXJldHVybiAkbm9ybWFsaXplZDsNCgl9DQoNCgkvKioNCgkgKiBFeHRyYWN0cyB0aGUgYWxpYXMgZnJvbSBhIGNvbHVtbiBuYW1lLg0KCSAqIChlLmcuLCAiYS5pZCIg4oaSICJpZCIsICJiLnVzZXJfbmFtZSIg4oaSICJ1c2VyX25hbWUiLCAibmFtZSIg4oaSICJuYW1lIikNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGNvbHVtbiAgRnVsbHktcXVhbGlmaWVkIGNvbHVtbiBuYW1lDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcgIEFsaWFzDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RBbGlhcyhzdHJpbmcgJGNvbHVtbik6IHN0cmluZw0KCXsNCgkJJHBhcnRzID0gZXhwbG9kZSgnLicsICRjb2x1bW4pOw0KCQlyZXR1cm4gZW5kKCRwYXJ0cyk7DQoJfQ0KDQoJLyoqDQoJICogSGFuZGxlIGEgc2luZ2xlIHdoZXJlIGNvbmRpdGlvbi4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAgJHF1ZXJ5ICAgICBUaGUgcXVlcnkgb2JqZWN0Lg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJGNvbHVtbiAgICBUaGUgY29sdW1uIG5hbWUuDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAkY29uZGl0aW9uIFRoZSBjb25kaXRpb24gdmFsdWUgb3IgY29uZmlnIGFycmF5Lg0KCSAqIEBwYXJhbSAgIGludCAgICAgICAgJGNvdW50ZXIgICBUaGUgZGVwdGggY291bnRlci4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaGFuZGxlV2hlcmVDb25kaXRpb24ob2JqZWN0ICRxdWVyeSwgc3RyaW5nICRjb2x1bW4sICRjb25kaXRpb24sIGludCAkY291bnRlciA9IDApOiB2b2lkDQoJew0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRjb25kaXRpb24pKQ0KCQl7DQoJCQlpZiAoIWlzc2V0KCRjb25kaXRpb25bJ3ZhbHVlJ10sICRjb25kaXRpb25bJ29wZXJhdG9yJ10pKQ0KCQkJew0KCQkJCS8vIGFsbG93IG9ubHkgb25lIHN0ZXAgZG93biwgc28gb25lIGNvbHVtbiBjYW4gZGlmZmVyZW50IHdoZXJlIG1hcHBpbmcNCgkJCQlpZiAoJGNvdW50ZXIgPT09IDApDQoJCQkJew0KCQkJCQkkY291bnRlcisrOw0KCQkJCQlmb3JlYWNoICgkY29uZGl0aW9uIGFzICRjb2x1bW5fY29uZGl0aW9uKQ0KCQkJCQl7DQoJCQkJCQkkdGhpcy0+aGFuZGxlV2hlcmVDb25kaXRpb24oJHF1ZXJ5LCAkY29sdW1uLCAkY29sdW1uX2NvbmRpdGlvbiwgJGNvdW50ZXIpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybjsNCgkJCX0NCg0KCQkJJHRoaXMtPmhhbmRsZUFkdmFuY2VkQ29uZGl0aW9uKA0KCQkJCSRxdWVyeSwNCgkJCQkkdGhpcy0+ZGItPnF1b3RlTmFtZSgkY29sdW1uKSwNCgkJCQkkY29uZGl0aW9uWyd2YWx1ZSddLA0KCQkJCSRjb25kaXRpb25bJ29wZXJhdG9yJ10sDQoJCQkJJGNvbmRpdGlvblsncXVvdGUnXSA/PyB0cnVlDQoJCQkpOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJLy8gU2ltcGxlIGtleSA9IHZhbHVlIGNsYXVzZQ0KCQkJJHF1ZXJ5LT53aGVyZSgkdGhpcy0+ZGItPnF1b3RlTmFtZSgkY29sdW1uKSAuICcgPSAnIC4gJHRoaXMtPnF1b3RlKCRjb25kaXRpb24pKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZSBhZHZhbmNlZCAob3BlcmF0b3ItYmFzZWQpIHdoZXJlIGNvbmRpdGlvbnMuDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAgICAgICRxdWVyeSAgICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICRjb2x1bW4gICAgVGhlIHF1b3RlZCBjb2x1bW4gbmFtZS4NCgkgKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICR2YWx1ZSAgICAgVGhlIHZhbHVlIHRvIGNvbXBhcmUuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICAkb3BlcmF0b3IgIFRoZSBTUUwgb3BlcmF0b3IgdG8gdXNlLg0KCSAqIEBwYXJhbSAgIGJvb2wgICAgICAgICAgJHF1b3RlICAgICBXaGV0aGVyIHRvIHF1b3RlIHRoZSB2YWx1ZShzKS4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaGFuZGxlQWR2YW5jZWRDb25kaXRpb24oDQoJCW9iamVjdCAkcXVlcnksDQoJCXN0cmluZyAkY29sdW1uLA0KCQkkdmFsdWUsDQoJCXN0cmluZyAkb3BlcmF0b3IsDQoJCWJvb2wgJHF1b3RlID0gdHJ1ZQ0KCSk6IHZvaWQNCgl7DQoJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJHZhbHVlKSkNCgkJew0KCQkJJHRoaXMtPmhhbmRsZUFycmF5Q29uZGl0aW9uKCRxdWVyeSwgJGNvbHVtbiwgJHZhbHVlLCAkb3BlcmF0b3IsICRxdW90ZSk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQkkdGhpcy0+aGFuZGxlU2NhbGFyQ29uZGl0aW9uKCRxdWVyeSwgJGNvbHVtbiwgJHZhbHVlLCAkb3BlcmF0b3IsICRxdW90ZSk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBIYW5kbGUgYW4gYXJyYXktYmFzZWQgY29uZGl0aW9uLCBlLmcuLCBJTiAoLi4uKSBvciBOT1QgSU4gKC4uLikuDQoJICoNCgkgKiBAcGFyYW0gICBvYmplY3QgICAgICRxdWVyeSAgICAgVGhlIHF1ZXJ5IG9iamVjdC4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICRjb2x1bW4gICAgVGhlIHF1b3RlZCBjb2x1bW4gbmFtZS4NCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICR2YWx1ZXMgICAgVGhlIGFycmF5IG9mIHZhbHVlcy4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICRvcGVyYXRvciAgVGhlIFNRTCBvcGVyYXRvciAoZS5nLiwgSU4sIE5PVCBJTikuDQoJICogQHBhcmFtICAgYm9vbCAgICAgICAkcXVvdGUgICAgIFdoZXRoZXIgdG8gcXVvdGUgdGhlIHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaGFuZGxlQXJyYXlDb25kaXRpb24oDQoJCW9iamVjdCAkcXVlcnksDQoJCXN0cmluZyAkY29sdW1uLA0KCQlhcnJheSAkdmFsdWVzLA0KCQlzdHJpbmcgJG9wZXJhdG9yLA0KCQlib29sICRxdW90ZSA9IHRydWUNCgkpOiB2b2lkDQoJew0KCQkkbGlzdCA9ICRxdW90ZQ0KCQkJPyBpbXBsb2RlKCcsJywgYXJyYXlfbWFwKGZuKCR2KSA9PiAkdGhpcy0+cXVvdGUoJHYpLCAkdmFsdWVzKSkNCgkJCTogaW1wbG9kZSgnLCcsICR2YWx1ZXMpOw0KDQoJCSRxdWVyeS0+d2hlcmUoInskY29sdW1ufSB7JG9wZXJhdG9yfSAoeyRsaXN0fSkiKTsNCgl9DQoNCgkvKioNCgkgKiBIYW5kbGUgYSBzY2FsYXIgdmFsdWUgY29uZGl0aW9uLg0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgICAkcXVlcnkgICAgIFRoZSBxdWVyeSBvYmplY3QuDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkY29sdW1uICAgIFRoZSBxdW90ZWQgY29sdW1uIG5hbWUuDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAkdmFsdWUgICAgIFRoZSB2YWx1ZSB0byBjb21wYXJlLg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJG9wZXJhdG9yICBUaGUgU1FMIG9wZXJhdG9yIChlLmcuLCA9LCAhPSwgPikuDQoJICogQHBhcmFtICAgYm9vbCAgICAgICAkcXVvdGUgICAgIFdoZXRoZXIgdG8gcXVvdGUgdGhlIHZhbHVlLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBoYW5kbGVTY2FsYXJDb25kaXRpb24oDQoJCW9iamVjdCAkcXVlcnksDQoJCXN0cmluZyAkY29sdW1uLA0KCQkkdmFsdWUsDQoJCXN0cmluZyAkb3BlcmF0b3IsDQoJCWJvb2wgJHF1b3RlID0gdHJ1ZQ0KCSk6IHZvaWQNCgl7DQoJCSRmb3JtYXR0ZWQgPSAkcXVvdGUgPyAkdGhpcy0+cXVvdGUoJHZhbHVlKSA6ICR2YWx1ZTsNCgkJJHF1ZXJ5LT53aGVyZSgieyRjb2x1bW59IHskb3BlcmF0b3J9IHskZm9ybWF0dGVkfSIpOw0KCX0NCg0KCS8qKg0KCSAqIFBhcnNlIHZhcmlvdXMgc2hvcnQgc3ludGF4ZXM6IGNvbG9uLCBwaXBlLCBkb3QsIG9yIGZhbGxiYWNrIGZsYXQgdmFsdWUuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICRlbnRyeSAgICAgICBUaGUgcmF3IHN0cmluZyBlbnRyeQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICRhbGlhcyAgICAgICBPcHRpb25hbCBvdmVycmlkZSBhbGlhcw0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVZhcmlvdXNTeW50YXgoc3RyaW5nICRlbnRyeSwgYXJyYXkgJiRub3JtYWxpemVkLCA/c3RyaW5nICRhbGlhcyA9IG51bGwpOiB2b2lkDQoJew0KCQkkZW50cnkgPSB0cmltKCRlbnRyeSk7DQoNCgkJaWYgKCRlbnRyeSA9PT0gJycpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmIChzdHJwb3MoJGVudHJ5LCAnOicpICE9PSBmYWxzZSkNCgkJew0KCQkJJHRoaXMtPnBhcnNlQ29sb25TeW50YXgoJGFsaWFzID8gInskYWxpYXN9OnskZW50cnl9IiA6ICRlbnRyeSwgJG5vcm1hbGl6ZWQpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKHN0cnBvcygkZW50cnksICd8JykgIT09IGZhbHNlKQ0KCQl7DQoJCQkkdGhpcy0+cGFyc2VQaXBlU3ludGF4KCRhbGlhcyA/ICJ7JGFsaWFzfXx7JGVudHJ5fSIgOiAkZW50cnksICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmIChzdHJwb3MoJGVudHJ5LCAnLicpICE9PSBmYWxzZSkNCgkJew0KCQkJJHRoaXMtPnBhcnNlRG90U3ludGF4KCRhbGlhcyA/ICJ7JGFsaWFzfS57JGVudHJ5fSIgOiAkZW50cnksICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCS8vIERlZmF1bHQ6IGZsYXQgdGFibGUgbmFtZQ0KCQlpZiAoIWVtcHR5KCRhbGlhcykpDQoJCXsNCgkJCWlmICgkYWxpYXMgPT09ICdhJykgLy8gc3RvcCBpbmZpbml0ZSByZWN1cnNpb24NCgkJCXsNCgkJCQkkdGhpcy0+YWRkVGFibGVFbnRyeSgkYWxpYXMsICRlbnRyeSwgJG5vcm1hbGl6ZWQpOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHRoaXMtPnBhcnNlRmxhdFRhYmxlKCRlbnRyeSwgJG5vcm1hbGl6ZWQpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogUGFyc2UgY29sb24gc3ludGF4IHN1Y2ggYXMgImE6dGFibGUiLCAiYjp0YWJsZTpqb2luX29uOmFzX29uIiwgb3IgInRhYmxlOmpvaW5fb246YXNfb24iDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRlbnRyeSAgICAgICBUaGUgY29sb24tZGVsaW1pdGVkIHN0cmluZw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VDb2xvblN5bnRheChzdHJpbmcgJGVudHJ5LCBhcnJheSAmJG5vcm1hbGl6ZWQpOiB2b2lkDQoJew0KCQkkdGhpcy0+cGFyc2VBcnJheUVudHJ5KGV4cGxvZGUoJzonLCAkZW50cnkpLCAkbm9ybWFsaXplZCk7DQoJfQ0KDQoJLyoqDQoJICogUGFyc2UgY29sb24gc3ludGF4IHN1Y2ggYXMgImF8dGFibGUiLCAiYnx0YWJsZXxqb2luX29ufGFzX29uIiwgb3IgInRhYmxlfGpvaW5fb246YXNfb24iDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRlbnRyeSAgICAgICBUaGUgcGlwZS1kZWxpbWl0ZWQgc3RyaW5nDQoJICogQHBhcmFtICAgYXJyYXkgICAmJG5vcm1hbGl6ZWQgVGhlIG5vcm1hbGl6ZWQgb3V0cHV0IHJlZmVyZW5jZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVBpcGVTeW50YXgoc3RyaW5nICRlbnRyeSwgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJHRoaXMtPnBhcnNlQXJyYXlFbnRyeShleHBsb2RlKCd8JywgJGVudHJ5KSwgJG5vcm1hbGl6ZWQpOw0KCX0NCg0KCS8qKg0KCSAqIFBhcnNlIGRvdCBzeW50YXggc3VjaCBhcyAiYS50YWJsZSIsICJiLnRhYmxlMi5pZC5lbnRpdHkiLCAidGFibGUuam9pbl9vbi5hc19vbiINCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJGVudHJ5ICAgICAgIFRoZSBkb3QtZGVsaW1pdGVkIHN0cmluZw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VEb3RTeW50YXgoc3RyaW5nICRlbnRyeSwgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJHRoaXMtPnBhcnNlQXJyYXlFbnRyeShleHBsb2RlKCcuJywgJGVudHJ5KSwgJG5vcm1hbGl6ZWQpOw0KCX0NCg0KCS8qKg0KCSAqIENvbWJpbmUgdGhlIGVudHJ5IHBhcnRzIGludCB0aGUgY29ycmV0IGZvcm1hdA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkcGFydHMgICAgICAgVGhlIHBhcnRzIG9mIHRoZSBlbnRyeQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VBcnJheUVudHJ5KGFycmF5ICRwYXJ0cywgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJGNvdW50ID0gY291bnQoJHBhcnRzKTsNCg0KCQlpZiAoJGNvdW50ID09PSAyKQ0KCQl7DQoJCQlbJGFsaWFzLCAkdGFibGVdID0gJHBhcnRzOw0KCQkJJHRoaXMtPmFkZFRhYmxlRW50cnkoJGFsaWFzLCAkdGFibGUsICRub3JtYWxpemVkKTsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICgkY291bnQgPT09IDMpDQoJCXsNCgkJCSRhbGlhcyA9IGNocig5NyArIGNvdW50KCRub3JtYWxpemVkKSk7DQoJCQlbJHRhYmxlLCAkam9pbl9vbiwgJGFzX29uXSA9ICRwYXJ0czsNCgkJCSR0aGlzLT5hZGRKb2luVGFibGVFbnRyeSgkYWxpYXMsICR0YWJsZSwgJGpvaW5fb24sICRhc19vbiwgbnVsbCwgJG5vcm1hbGl6ZWQpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKCRjb3VudCA9PT0gNCkNCgkJew0KCQkJWyRhbGlhcywgJHRhYmxlLCAkam9pbl9vbiwgJGFzX29uXSA9ICRwYXJ0czsNCgkJCSR0aGlzLT5hZGRKb2luVGFibGVFbnRyeSgkYWxpYXMsICR0YWJsZSwgJGpvaW5fb24sICRhc19vbiwgbnVsbCwgJG5vcm1hbGl6ZWQpOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKCRjb3VudCA9PT0gNSkNCgkJew0KCQkJWyRhbGlhcywgJHRhYmxlLCAkam9pbl9vbiwgJGFzX29uLCAkam9pbl0gPSAkcGFydHM7DQoJCQkkdGhpcy0+YWRkSm9pblRhYmxlRW50cnkoJGFsaWFzLCAkdGFibGUsICRqb2luX29uLCAkYXNfb24sICRqb2luLCAkbm9ybWFsaXplZCk7DQoJCQlyZXR1cm47DQoJCX0NCgkJLy8gc2lsZW50bHkgaWdub3JlIG1hbGZvcm1lZCBpbnB1dA0KCX0NCg0KCS8qKg0KCSAqIFBhcnNlIGZsYXQgZW50cnkgbGlrZSAidGFibGUiIHdpdGggYXV0b21hdGljIGFsaWFzaW5nDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICR0YWJsZSAgICAgICBUaGUgdGFibGUgbmFtZQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJiRub3JtYWxpemVkIFRoZSBub3JtYWxpemVkIG91dHB1dCByZWZlcmVuY2UNCgkgKg0KCSAqIEByZXR1cm4gIHZvaWQNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcGFyc2VGbGF0VGFibGUoc3RyaW5nICR0YWJsZSwgYXJyYXkgJiRub3JtYWxpemVkKTogdm9pZA0KCXsNCgkJJGFsaWFzID0gY2hyKDk3ICsgY291bnQoJG5vcm1hbGl6ZWQpKTsNCgkJJHRoaXMtPmFkZFRhYmxlRW50cnkoJGFsaWFzLCAkdGFibGUsICRub3JtYWxpemVkKTsNCgl9DQoNCgkvKioNCgkgKiBQYXJzZSBhc3NvY2lhdGl2ZSBhcnJheSBlbnRyeSwgZWl0aGVyIGEgcmF3IHN0cmluZyBvciBhIGpvaW4gc3RydWN0dXJlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICAkYWxpYXMgICAgICAgVGFibGUgYWxpYXMNCgkgKiBAcGFyYW0gICBzdHJpbmd8YXJyYXkgICAkdmFsdWUgICAgICAgVGhlIHRhYmxlIGRlZmluaXRpb24gb3Igam9pbiBhcnJheQ0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQXNzb2NTeW50YXgoc3RyaW5nICRhbGlhcywgJHZhbHVlLCBhcnJheSAmJG5vcm1hbGl6ZWQpOiB2b2lkDQoJew0KCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkNCgkJew0KCQkJJHRoaXMtPmFkZEpvaW5UYWJsZUVudHJ5KA0KCQkJCSRhbGlhcywNCgkJCQkkdmFsdWVbJ25hbWUnXSA/PyAnJywNCgkJCQkkdmFsdWVbJ2pvaW5fb24nXSA/PyAnJywNCgkJCQkkdmFsdWVbJ2FzX29uJ10gPz8gJycsDQoJCQkJJHZhbHVlWydqb2luJ10gPz8gbnVsbCwNCgkJCQkkbm9ybWFsaXplZA0KCQkJKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSR0aGlzLT5hZGRUYWJsZUVudHJ5KCRhbGlhcywgJHZhbHVlLCAkbm9ybWFsaXplZCk7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBBZGQgYSBnaXZlbiBzZXQgb2YgZW50cmllcyB0byB0aGUgbm9ybWFsaXplZCBhcnJheQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAkYWxpYXMgICAgICAgVGFibGUgYWxpYXMNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICR0YWJsZSAgICAgICBUYWJsZSBuYW1lDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAmJG5vcm1hbGl6ZWQgVGhlIG5vcm1hbGl6ZWQgb3V0cHV0IHJlZmVyZW5jZQ0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDUuMS4xDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBhZGRUYWJsZUVudHJ5KHN0cmluZyAkYWxpYXMsIHN0cmluZyAkdGFibGUsIGFycmF5ICYkbm9ybWFsaXplZCk6IHZvaWQNCgl7DQoJCSRhbGlhcyA9IHRyaW0oJGFsaWFzKTsNCgkJJHRhYmxlID0gdHJpbSgkdGFibGUpOw0KDQoJCWlmICgkYWxpYXMgPT09ICdhJyAmJiAkdGFibGUgIT09ICcnKQ0KCQl7DQoJCQlpZiAoaXNzZXQoJG5vcm1hbGl6ZWRbJGFsaWFzXSkpDQoJCQl7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQkkbm9ybWFsaXplZFskYWxpYXNdID0gJHRhYmxlOw0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJJHRoaXMtPnBhcnNlVmFyaW91c1N5bnRheCgkdGFibGUsICRub3JtYWxpemVkLCAkYWxpYXMpOw0KCX0NCg0KCS8qKg0KCSAqIEFkZCBhIGdpdmVuIHNldCBvZiBlbnRyaWVzIHRvIHRoZSBub3JtYWxpemVkIGFycmF5DQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJGFsaWFzICAgICAgIFRhYmxlIGFsaWFzDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICR0YWJsZSAgICAgICBUYWJsZSBuYW1lDQoJICogQHBhcmFtICAgc3RyaW5nICAgICAgICRqb2luT24gICAgICBUaGUgam9pbiBvbiBjb2x1bW4gbmFtZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAkYXNPbiAgICAgICAgVGhlIGFzIG9uIGNvbHVtbiBuYW1lDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICRqb2luICAgICAgICBUaGUgam9pbiB0eXBlDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICYkbm9ybWFsaXplZCBUaGUgbm9ybWFsaXplZCBvdXRwdXQgcmVmZXJlbmNlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGFkZEpvaW5UYWJsZUVudHJ5KA0KCQlzdHJpbmcgJGFsaWFzLA0KCQlzdHJpbmcgJHRhYmxlLA0KCQlzdHJpbmcgJGpvaW5PbiwNCgkJc3RyaW5nICRhc09uLA0KCQk/c3RyaW5nICRqb2luLA0KCQlhcnJheSAmJG5vcm1hbGl6ZWQNCgkpOiB2b2lkDQoJew0KCQkkYWxpYXMgICAgID0gdHJpbSgkYWxpYXMpOw0KCQkkdGFibGVOYW1lID0gdHJpbSgkdGFibGUpOw0KCQkkam9pbk9uICAgID0gdHJpbSgkam9pbk9uKTsNCgkJJGFzT24gICAgICA9IHRyaW0oJGFzT24pOw0KDQoJCWlmICgNCgkJCSRhbGlhcyA9PT0gJycgfHwgJGFsaWFzID09PSAnYScgfHwNCgkJCSR0YWJsZSA9PT0gJycgfHwgJGpvaW5PbiA9PT0gJycgfHwgJGFzT24gPT09ICcnDQoJCSkgew0KCQkJcmV0dXJuOw0KCQl9DQoNCgkJaWYgKGlzc2V0KCRub3JtYWxpemVkWyRhbGlhc10pKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQlpZiAoJGpvaW4gIT09IG51bGwpDQoJCXsNCgkJCSRqb2luID0gdHJpbSgkam9pbik7DQoJCX0NCg0KCQkkbm9ybWFsaXplZFskYWxpYXNdID0gWw0KCQkJJ25hbWUnICAgID0+ICR0YWJsZSwNCgkJCSdqb2luX29uJyA9PiAkdGhpcy0+bm9ybWFsaXplQ29sdW1uKCdhJywgJGpvaW5PbiksDQoJCQknYXNfb24nICAgPT4gJHRoaXMtPm5vcm1hbGl6ZUNvbHVtbigkYWxpYXMsICRhc09uKSwNCgkJCSdqb2luJyAgID0+ICRqb2luDQoJCV07DQoJfQ0KDQoJLyoqDQoJICogQWRkIHRhYmxlIGFsaWFzIHRvIGNvbHVtbiBpZiBub3QgYWxyZWFkeSBwcmVzZW50Lg0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkYWxpYXMgICBUaGUgdGFibGUgYWxpYXMNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRjb2x1bW4gIFRoZSBjb2x1bW4gbmFtZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbihzdHJpbmcgJGFsaWFzLCBzdHJpbmcgJGNvbHVtbik6IHN0cmluZw0KCXsNCgkJcmV0dXJuIChzdHJwb3MoJGNvbHVtbiwgJy4nKSAhPT0gZmFsc2UpDQoJCQk/ICRjb2x1bW4NCgkJCTogInskYWxpYXN9LnskY29sdW1ufSI7DQoJfQ==', '{}', '{}', '', 1, '2022-09-03 19:19:27', 70, 0, 1), (125, '2ad31f74-f579-499d-b98b-c4f54fd615dd', 'VDM.Interfaces.Database.LoadInterface', 'LoadInterface', 'interface', 'Database Load Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Database.LoadInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIExvYWQgZGF0YSByb3dzIGFzIGFuIGFycmF5IG9mIGFzc29jaWF0ZWQgYXJyYXlzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJHNlbGVjdCwgYXJyYXkgJHRhYmxlcywgP2FycmF5ICR3aGVyZSA9IG51bGwsDQoJCT9hcnJheSAkb3JkZXIgPSBudWxsLCA/aW50ICRsaW1pdCA9IG51bGwpOiA/YXJyYXk7DQoNCgkvKioNCgkgKiBMb2FkIGRhdGEgcm93cyBhcyBhbiBhcnJheSBvZiBvYmplY3RzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICR0YWJsZXMgICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICR3aGVyZSAgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKiBAcGFyYW0gICBpbnR8bnVsbCAgICAgJGxpbWl0ICAgIExpbWl0IHRoZSBudW1iZXIgb2YgdmFsdWVzIHJldHVybmVkDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW1zKGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLA0KCQk/YXJyYXkgJG9yZGVyID0gbnVsbCwgP2ludCAkbGltaXQgPSBudWxsKTogP2FycmF5Ow0KDQoJLyoqDQoJICogTG9hZCBkYXRhIHJvdyBhcyBhbiBhc3NvY2lhdGVkIGFycmF5DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHNlbGVjdCAgIEFycmF5IG9mIHNlbGVjdGlvbiBrZXlzDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgJHRhYmxlcyAgQXJyYXkgb2YgdGFibGVzIHRvIHNlYXJjaA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICR3aGVyZSAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkb3JkZXIgICAgQXJyYXkgb2YgaG93IHRvIG9yZGVyIHRoZSBkYXRhDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheXxudWxsDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvdyhhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/YXJyYXk7DQoNCgkvKioNCgkgKiBMb2FkIGRhdGEgcm93IGFzIGFuIG9iamVjdA0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICRzZWxlY3QgICBBcnJheSBvZiBzZWxlY3Rpb24ga2V5cw0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICR0YWJsZXMgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAkd2hlcmUgICBBcnJheSBvZiB3aGVyZSBrZXk9PnZhbHVlIG1hdGNoIGV4aXN0DQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJG9yZGVyICAgIEFycmF5IG9mIGhvdyB0byBvcmRlciB0aGUgZGF0YQ0KCSAqDQoJICogQHJldHVybiAgb2JqZWN0fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShhcnJheSAkc2VsZWN0LCBhcnJheSAkdGFibGVzLCA/YXJyYXkgJHdoZXJlID0gbnVsbCwgP2FycmF5ICRvcmRlciA9IG51bGwpOiA/b2JqZWN0Ow0KDQoJLyoqDQoJICogR2V0IHRoZSBtYXggdmFsdWUgYmFzZWQgb24gYSBmaWx0ZXJlZCByZXN1bHQgZnJvbSBhIGdpdmVuIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICRmaWVsZCAgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJHRhYmxlcyAgICBUaGUgdGFibGUNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRmaWx0ZXIgICAgVGhlIGZpbHRlciBrZXlzDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBtYXgoJGZpZWxkLCBhcnJheSAkdGFibGVzLCBhcnJheSAkZmlsdGVyKTogP2ludDsNCg0KCS8qKg0KCSAqIENvdW50IHRoZSBudW1iZXIgb2YgaXRlbXMgYmFzZWQgb24gZmlsdGVyIHJlc3VsdCBmcm9tIGEgZ2l2ZW4gdGFibGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJHRhYmxlcyAgICBUaGUgdGFibGUNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRmaWx0ZXIgICAgVGhlIGZpbHRlciBrZXlzDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBjb3VudChhcnJheSAkdGFibGVzLCBhcnJheSAkZmlsdGVyKTogP2ludDsNCg0KCS8qKg0KCSAqIExvYWQgb25lIHZhbHVlIGZyb20gYSByb3cNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkc2VsZWN0ICAgQXJyYXkgb2Ygc2VsZWN0aW9uIGtleXMNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAkdGFibGVzICBBcnJheSBvZiB0YWJsZXMgdG8gc2VhcmNoDQoJICogQHBhcmFtICAgYXJyYXl8bnVsbCAgJHdoZXJlICAgQXJyYXkgb2Ygd2hlcmUga2V5PT52YWx1ZSBtYXRjaCBleGlzdA0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICRvcmRlciAgICBBcnJheSBvZiBob3cgdG8gb3JkZXIgdGhlIGRhdGENCgkgKg0KCSAqIEByZXR1cm4gIG1peGVkDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHZhbHVlKGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLCA/YXJyYXkgJG9yZGVyID0gbnVsbCk7DQoNCgkvKioNCgkgKiBMb2FkIHZhbHVlcyBmcm9tIG11bHRpcGxlIHJvd3MNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAkc2VsZWN0ICAgQXJyYXkgb2Ygc2VsZWN0aW9uIGtleXMNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICAgJHRhYmxlcyAgIEFycmF5IG9mIHRhYmxlcyB0byBzZWFyY2gNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgJHdoZXJlICAgIEFycmF5IG9mIHdoZXJlIGtleT0+dmFsdWUgbWF0Y2ggZXhpc3QNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgJG9yZGVyICAgIEFycmF5IG9mIGhvdyB0byBvcmRlciB0aGUgZGF0YQ0KCSAqIEBwYXJhbSAgIGludHxudWxsICAgICAkbGltaXQgICAgTGltaXQgdGhlIG51bWJlciBvZiB2YWx1ZXMgcmV0dXJuZWQNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5fG51bGwNCgkgKiBAc2luY2UgICAzLjIuMg0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gdmFsdWVzKGFycmF5ICRzZWxlY3QsIGFycmF5ICR0YWJsZXMsID9hcnJheSAkd2hlcmUgPSBudWxsLA0KCQk/YXJyYXkgJG9yZGVyID0gbnVsbCwgP2ludCAkbGltaXQgPSBudWxsKTogP2FycmF5Ow==', '{}', '{}', '', 1, '2022-10-22 19:20:18', 19, 0, 1), -(126, '6cbef8f8-4813-48e3-b05a-65e1aea95171', 'VDM.Abstraction.Database', 'Database', 'abstract class', 'Database\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.Database', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcRGF0YWJhc2VcRGF0YWJhc2VJbnRlcmZhY2UgYXMgSm9vbWxhRGF0YWJhc2U7', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"58ab1a65-9a80-40a3-bb33-c50fbf003b63\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIEZ1bmN0aW9uIHRvIHF1b3RlIHZhbHVlcw0KCSAqDQoJICogQHNpbmNlIDUuMS4xDQoJICovDQoJdXNlIFF1b3RlVHJhaXQ7DQoNCgkvKioNCgkgKiBEYXRhYmFzZSBvYmplY3QgdG8gcXVlcnkgbG9jYWwgREINCgkgKg0KCSAqIEB2YXIgSm9vbWxhRGF0YWJhc2UNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgSm9vbWxhRGF0YWJhc2UgJGRiOw0KDQoJLyoqDQoJICogQ3VycmVudCBjb21wb25lbnQgY29kZSBuYW1lDQoJICoNCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRjb21wb25lbnRDb2RlOw0KDQoJLyoqDQoJICogQ29yZSBDb21wb25lbnQgVGFibGUgTmFtZQ0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJHRhYmxlOw0KDQoJLyoqDQoJICogQ29uc3RydWN0b3INCgkgKg0KCSAqIEB0aHJvd3MgXEV4Y2VwdGlvbg0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/Sm9vbWxhRGF0YWJhc2UgJGRiID0gbnVsbCkNCgl7DQoJCSR0aGlzLT5kYiA9ICRkYiA/OiBGYWN0b3J5OjpnZXRDb250YWluZXIoKS0+Z2V0KEpvb21sYURhdGFiYXNlOjpjbGFzcyk7DQoNCgkJJHRoaXMtPmNvbXBvbmVudENvZGUgPSBIZWxwZXI6OmdldENvZGUoKTsNCgkJJHRoaXMtPnRhYmxlID0gJyNfXycgLiAkdGhpcy0+Y29tcG9uZW50Q29kZTsNCgl9DQoNCgkvKioNCgkgKiBTZXQgYSB0YWJsZSBuYW1lLCBhZGRpbmcgdGhlDQoJICogICAgIGNvcmUgY29tcG9uZW50IGFzIG5lZWRlZA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICBUaGUgdGFibGUgc3RyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0VGFibGUoc3RyaW5nICR0YWJsZSk6IHN0cmluZw0KCXsNCgkJaWYgKHN0cnBvcygkdGFibGUsICcjX18nKSA9PT0gZmFsc2UpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+dGFibGUgLiAnXycgLiAkdGFibGU7DQoJCX0NCg0KCQlyZXR1cm4gJHRhYmxlOw0KCX0=', '{}', '{}', '', 1, '2018-10-05 17:01:41', 50, 0, 1), -(133, '524eb8f6-38d4-47dc-92ad-98b94e099ac0', 'VDM.Database.Insert', 'Insert', 'final class', 'Database Insert Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 'd9839333-a8f1-4a36-9256-5df4d349b3f6', '', '', '', '{\"0\":\"ad12ca1c-d3ce-4e7f-88c5-c6c92bdedc48\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Insert', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRGF0ZVxEYXRlOw==', '{\"use_selection0\":{\"use\":\"b8176bdf-5615-4d91-8dfa-990d42f44127\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIERlZmF1bHQgU3dpdGNoDQoJICoNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCgl1c2UgRGVmYXVsdFRyYWl0Ow0KDQoJLyoqDQoJICogVGhlIGhpc3RvcnkgdHJhY2tlciBidWNrZXQNCgkgKg0KCSAqIEB2YXIgICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgNS4xLjENCgkgKiovDQoJcHJvdGVjdGVkIGFycmF5ICRoaXN0b3J5R3VpZDsNCg0KCS8qKg0KCSAqIEluc2VydCByb3dzIHRvIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkY29sdW1ucyA9PT0gW10pDQoJCXsNCgkJCSRjb2x1bW5zID0gJHRoaXMtPmdldEFycmF5Q29sdW1ucygkZGF0YSk7DQoJCX0NCg0KCQlyZXR1cm4gKCRjb2x1bW5zID09PSBbXSkgPyBmYWxzZSA6ICR0aGlzLT5pbnNlcnQoJGRhdGEsICR0YWJsZSwgJGNvbHVtbnMsIHRydWUpOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCBpdGVtcyB0byB0aGUgZGF0YWJhc2UgKHdpdGggcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcgY29sdW1ucyBvcHRpb24pDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgICAgIERhdGEgdG8gc3RvcmUgaW4gZGF0YWJhc2UgKGFycmF5IG9mIG9iamVjdHMpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgYWRkZWQNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29sdW1ucyAgICAgIERhdGEgY29sdW1ucyBmb3IgcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbXMoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkY29sdW1ucyA9PT0gW10pDQoJCXsNCgkJCSRjb2x1bW5zID0gJHRoaXMtPmdldE9iamVjdHNDb2x1bW5zKCRkYXRhKTsNCgkJfQ0KDQoJCXJldHVybiAoJGNvbHVtbnMgPT09IFtdKSA/IGZhbHNlIDogJHRoaXMtPmluc2VydCgkZGF0YSwgJHRhYmxlLCAkY29sdW1ucywgZmFsc2UpOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCByb3cgdG8gdGhlIGRhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgIERhdGFzZXQgdG8gc3RvcmUgaW4gZGF0YWJhc2UgKGtleSA9PiB2YWx1ZSkNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiByb3coYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUpOiBib29sDQoJew0KCQlyZXR1cm4gJHRoaXMtPnJvd3MoWyRkYXRhXSwgJHRhYmxlKTsNCgl9DQoNCgkvKioNCgkgKiBJbnNlcnQgaXRlbSB0byB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAkZGF0YSAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSAoa2V5ID0+IHZhbHVlKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW0ob2JqZWN0ICRkYXRhLCBzdHJpbmcgJHRhYmxlKTogYm9vbA0KCXsNCgkJcmV0dXJuICR0aGlzLT5pdGVtcyhbJGRhdGFdLCAkdGFibGUpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjb2x1bW5zIGZyb20gZGF0YSBhcnJheQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAkZGF0YSAgIERhdGEgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFycmF5Q29sdW1ucyhhcnJheSAmJGRhdGEpOiBhcnJheQ0KCXsNCgkJJHJvdyA9IGFycmF5X3ZhbHVlcygkZGF0YSlbMF07DQoNCgkJaWYgKCFBcnJheUhlbHBlcjo6Y2hlY2soJHJvdykpDQoJCXsNCgkJCXJldHVybiBbXTsNCgkJfQ0KDQoJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkcm93KTsNCg0KCQlyZXR1cm4gYXJyYXlfY29tYmluZSgkY29sdW1ucywgJGNvbHVtbnMpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjb2x1bW5zIGZyb20gZGF0YSBvYmplY3RzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRkYXRhICAgRGF0YSBvYmplY3RzDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRPYmplY3RzQ29sdW1ucyhhcnJheSAmJGRhdGEpOiBhcnJheQ0KCXsNCgkJJHJvdyA9IGFycmF5X3ZhbHVlcygkZGF0YSlbMF07DQoNCgkJaWYgKCFpc19vYmplY3QoJHJvdykpDQoJCXsNCgkJCXJldHVybiBbXTsNCgkJfQ0KDQoJCSRjb2x1bW5zID0gZ2V0X29iamVjdF92YXJzKCRyb3cpOw0KDQoJCXJldHVybiBhcnJheV9jb21iaW5lKGFycmF5X2tleXMoJGNvbHVtbnMpLCBhcnJheV9rZXlzKCRjb2x1bW5zKSk7DQoJfQ0KDQoJLyoqDQoJICogSW5zZXJ0IGRhdGEgaW50byB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGRhdGEgICAgICBEYXRhIHRvIHN0b3JlIGluIGRhdGFiYXNlDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICogQHBhcmFtICAgYm9vbCAgICAkaXNBcnJheSAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIG9iamVjdHMNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW5zZXJ0KGFycmF5ICYkZGF0YSwgc3RyaW5nICR0YWJsZSwgYXJyYXkgJGNvbHVtbnMsIGJvb2wgJGlzQXJyYXkpOiBib29sDQoJew0KCQkvLyBzZXQgam9vbWxhIGRlZmF1bHQgY29sdW1ucw0KCQkkYWRkX2NyZWF0ZWQgPSBmYWxzZTsNCgkJJGFkZF9jcmVhdGVkX2J5ID0gZmFsc2U7DQoJCSRhZGRfdmVyc2lvbiA9IGZhbHNlOw0KCQkkYWRkX3B1Ymxpc2hlZCA9IGZhbHNlOw0KDQoJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBkZWZhdWx0cw0KCQlpZiAoJHRoaXMtPmRlZmF1bHRzKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGUNCgkJCSRkYXRlID0gKG5ldyBEYXRlKCkpLT50b1NxbCgpOw0KDQoJCQlpZiAoIWlzc2V0KCRjb2x1bW5zWydjcmVhdGVkJ10pKQ0KCQkJew0KCQkJCSRjb2x1bW5zWydjcmVhdGVkJ10gPSAnIChvX08pICc7DQoJCQkJJGFkZF9jcmVhdGVkID0gdHJ1ZTsNCgkJCX0NCg0KCQkJaWYgKCFpc3NldCgkY29sdW1uc1snY3JlYXRlZF9ieSddKSkNCgkJCXsNCgkJCQkkY29sdW1uc1snY3JlYXRlZF9ieSddID0gJyAob19PKSAnOw0KCQkJCSRhZGRfY3JlYXRlZF9ieSA9IHRydWU7DQoJCQl9DQoNCgkJCWlmICghaXNzZXQoJGNvbHVtbnNbJ3ZlcnNpb24nXSkpDQoJCQl7DQoJCQkJJGNvbHVtbnNbJ3ZlcnNpb24nXSA9ICcgKG9fTykgJzsNCgkJCQkkYWRkX3ZlcnNpb24gPSB0cnVlOw0KCQkJfQ0KDQoJCQlpZiAoIWlzc2V0KCRjb2x1bW5zWydwdWJsaXNoZWQnXSkpDQoJCQl7DQoJCQkJJGNvbHVtbnNbJ3B1Ymxpc2hlZCddID0gJyAob19PKSAnOw0KCQkJCSRhZGRfcHVibGlzaGVkID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIHRoZSAob19PKSBwcmV2ZW50cyBhbiBlbXB0eSB2YWx1ZSBmcm9tIGJlaW5nIGxvYWRlZA0KCQl9DQoNCgkJLy8gc2V0IGhpc3RvcnkgdmFycw0KCQkkdGhpcy0+ZW50aXR5ID0gJHRoaXMtPmdldFRhYmxlRW50aXR5TmFtZSgkdGFibGUpOw0KCQkkdGhpcy0+aGlzdG9yeUd1aWQgPSBbXTsNCg0KCQkvLyBnZXQgYSBxdWVyeSBvYmplY3QNCgkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5jcmVhdGVRdWVyeSgpOw0KCQkkdGFibGUgPSAkdGhpcy0+Z2V0VGFibGUoJHRhYmxlKTsNCg0KCQkvLyBzZXQgdGhlIHF1ZXJ5IHRhcmdldHMNCgkJJHF1ZXJ5LT5pbnNlcnQoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJHRhYmxlKSktPmNvbHVtbnMoJHRoaXMtPmRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkY29sdW1ucykpKTsNCg0KCQkvLyBsaW1pdGluZyBmYWN0b3Igb24gdGhlIGFtb3VudCBvZiByb3dzIHRvIGluc2VydCBiZWZvcmUgd2UgcmVzZXQgdGhlIHF1ZXJ5DQoJCSRsaW1pdCA9IDMwMDsNCg0KCQkvLyBzZXQgdGhlIGluc2VydCB2YWx1ZXMNCgkJZm9yZWFjaCAoJGRhdGEgYXMgJG5yID0+ICR2YWx1ZSkNCgkJew0KCQkJLy8gY2hlY2sgdGhlIGxpbWl0DQoJCQlpZiAoJGxpbWl0IDw9IDEpDQoJCQl7DQoJCQkJLy8gZXhlY3V0ZSBhbmQgcmVzZXQgdGhlIHF1ZXJ5DQoJCQkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCQkJLy8gcmVzZXQgbGltaXQNCgkJCQkkbGltaXQgPSAzMDA7DQoNCgkJCQkvLyBnZXQgYSBxdWVyeSBvYmplY3QNCgkJCQkkcXVlcnkgPSAkdGhpcy0+ZGItPmNyZWF0ZVF1ZXJ5KCk7DQoNCgkJCQkvLyBzZXQgdGhlIHF1ZXJ5IHRhcmdldHMNCgkJCQkkcXVlcnktPmluc2VydCgkdGhpcy0+ZGItPnF1b3RlTmFtZSgkdGFibGUpKS0+Y29sdW1ucygkdGhpcy0+ZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRjb2x1bW5zKSkpOw0KCQkJfQ0KDQoJCQkkcm93ID0gW107DQoJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uID0+ICRrZXkpDQoJCQl7DQoJCQkJaWYgKCcgKG9fTykgJyA9PT0gJGtleSkNCgkJCQl7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCg0KCQkJCSR2YWwgPSAoJGlzQXJyYXkgJiYgaXNzZXQoJHZhbHVlWyRrZXldKSkgPyAkdmFsdWVbJGtleV0NCgkJCQkJOiAoKCEkaXNBcnJheSAmJiBpc3NldCgkdmFsdWUtPnska2V5fSkpID8gJHZhbHVlLT57JGtleX0gOiAnJyk7DQoNCgkJCQkvLyB3ZSBjYW4gb25seSBzZXQgaGlzdG9yeSBpZiB3ZSBoYXZlIGEgZ3VpZCBpbiB0aGUgZGF0YSBzZXQNCgkJCQlpZiAoJGNvbHVtbiA9PT0gJ2d1aWQnICYmICFlbXB0eSgkdGhpcy0+ZW50aXR5KSAmJiAkdGhpcy0+aGlzdG9yeSAmJiAhZW1wdHkoJHZhbCkpDQoJCQkJew0KCQkJCQkkdGhpcy0+aGlzdG9yeUd1aWRbJHZhbF0gPSAxOw0KCQkJCX0NCg0KCQkJCSRyb3dbXSA9ICR0aGlzLT5xdW90ZSgkdmFsKTsNCgkJCX0NCg0KCQkJLy8gc2V0IGpvb21sYSBkZWZhdWx0IGNvbHVtbnMNCgkJCWlmICgkYWRkX2NyZWF0ZWQpDQoJCQl7DQoJCQkJJHJvd1tdID0gJHRoaXMtPmRiLT5xdW90ZSgkZGF0ZSk7DQoJCQl9DQoNCgkJCWlmICgkYWRkX2NyZWF0ZWRfYnkpDQoJCQl7DQoJCQkJJHJvd1tdID0gJHRoaXMtPnVzZXJJZDsNCgkJCX0NCg0KCQkJaWYgKCRhZGRfdmVyc2lvbikNCgkJCXsNCgkJCQkkcm93W10gPSAxOw0KCQkJfQ0KDQoJCQlpZiAoJGFkZF9wdWJsaXNoZWQpDQoJCQl7DQoJCQkJJHJvd1tdID0gMTsNCgkJCX0NCg0KCQkJLy8gYWRkIHRvIHF1ZXJ5DQoJCQkkcXVlcnktPnZhbHVlcyhpbXBsb2RlKCcsJywgJHJvdykpOw0KDQoJCQkvLyBkZWNyZW1lbnQgdGhlIGxpbWl0ZXINCgkJCSRsaW1pdC0tOw0KDQoJCQkvLyBjbGVhciB0aGUgZGF0YSBmcm9tIG1lbW9yeQ0KCQkJdW5zZXQoJGRhdGFbJG5yXSk7DQoJCX0NCg0KCQkvLyBleGVjdXRlIHRoZSBmaW5hbCBxdWVyeQ0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIHRyYWNrIHZlcnNpb24gaGlzdG9yeQ0KCQlpZiAoJHRoaXMtPmhpc3RvcnkgJiYgIWVtcHR5KCR0aGlzLT5lbnRpdHkpICYmICR0aGlzLT5oaXN0b3J5R3VpZCAhPT0gW10pDQoJCXsNCgkJCSR0aGlzLT50cmFja0hpc3RvcnkoYXJyYXlfa2V5cygkdGhpcy0+aGlzdG9yeUd1aWQpLCAkdGFibGUpOw0KCQl9DQoNCgkJLy8gYWx3YXlzIHJlc2V0IHRoZSBzd2l0Y2gncw0KCQkkdGhpcy0+ZGVmYXVsdHMoKS0+aGlzdG9yeSgpOw0KDQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSAqIEF0dGVtcHQgdG8gc2V0IGhpc3RvcnkgcmVjb3JkcyBmb3IgdGhlIHNwZWNpZmllZCBlbnRpdHkuDQoJICoNCgkgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgaGlzdG9yeSB0cmFja2luZyBpcyBlbmFibGVkIGFuZCB0aGUgcHJvdmlkZWQgYCRlbnRpdHlgIGhhcw0KCSAqIGNvcnJlc3BvbmRpbmcgR1VJRHMgaW4gdGhlIGAkaGlzdG9yeWAgYXJyYXkuIEl0IHRoZW4gZmV0Y2hlcyB0aGUgSURzIGZvciB0aGUNCgkgKiBtYXRjaGluZyBHVUlEcyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgdHJpZ2dlcnMgaGlzdG9yeSBzZXR0aW5nIG9uIHRoZW0uDQoJICoNCgkgKiBBbnkgZXhjZXB0aW9ucyBkdXJpbmcgdGhpcyBwcm9jZXNzIGFyZSBzaWxlbnRseSBjYXVnaHQgYW5kIGlnbm9yZWQuDQoJICoNCgkgKiBAcGFyYW0gIGFycmF5ICAgJGhpc3RvcnkgIFRoZSBoaXN0b3J5IG1hcCB3aXRoIGVudGl0eSBHVUlEcyBhcyB2YWx1ZXMuDQoJICogQHBhcmFtICBzdHJpbmcgICR0YWJsZSAgICBUaGUgZnVsbCB0YWJsZSBuYW1lLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiB0cmFja0hpc3RvcnkoYXJyYXkgJGhpc3RvcnksIHN0cmluZyAkdGFibGUpOiB2b2lkDQoJew0KCQl0cnkNCgkJew0KCQkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5jcmVhdGVRdWVyeSgpDQoJCQkJLT5zZWxlY3QoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2lkJykpDQoJCQkJLT5mcm9tKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0YWJsZSkpDQoJCQkJLT53aGVyZSgNCgkJCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2d1aWQnKSAuICcgSU4gKCcgLg0KCQkJCQlpbXBsb2RlKCcsJywgYXJyYXlfbWFwKGZuKCR2KSA9PiAkdGhpcy0+cXVvdGUoJHYpLCAkaGlzdG9yeSkpIC4NCgkJCQkJJyknDQoJCQkJKTsNCg0KCQkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkdGhpcy0+c2V0TXVsdGlwbGVIaXN0b3J5KA0KCQkJCQkkdGhpcy0+ZGItPmxvYWRDb2x1bW4oKQ0KCQkJCSk7DQoJCQl9DQoJCX0NCgkJY2F0Y2ggKFxUaHJvd2FibGUgJGUpDQoJCXsNCgkJCS8vIFNpbGVudGx5IGlnbm9yZSBhbGwgZXJyb3JzDQoJCX0NCgl9', '{}', '{}', '', 1, '2022-09-03 14:06:26', 45, 0, 1), +(126, '6cbef8f8-4813-48e3-b05a-65e1aea95171', 'VDM.Abstraction.Database', 'Database', 'abstract class', 'Database\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Abstraction.Database', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcRGF0YWJhc2VcRGF0YWJhc2VJbnRlcmZhY2UgYXMgSm9vbWxhRGF0YWJhc2U7', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"58ab1a65-9a80-40a3-bb33-c50fbf003b63\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIEZ1bmN0aW9uIHRvIHF1b3RlIHZhbHVlcw0KCSAqDQoJICogQHNpbmNlIDUuMS4xDQoJICovDQoJdXNlIFF1b3RlVHJhaXQ7DQoNCgkvKioNCgkgKiBEYXRhYmFzZSBvYmplY3QgdG8gcXVlcnkgbG9jYWwgREINCgkgKg0KCSAqIEB2YXIgSm9vbWxhRGF0YWJhc2UNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgSm9vbWxhRGF0YWJhc2UgJGRiOw0KDQoJLyoqDQoJICogQ3VycmVudCBjb21wb25lbnQgY29kZSBuYW1lDQoJICoNCgkgKiBAdmFyICAgICBzdHJpbmcNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICRjb21wb25lbnRDb2RlOw0KDQoJLyoqDQoJICogQ29yZSBDb21wb25lbnQgVGFibGUgTmFtZQ0KCSAqDQoJICogQHZhciAgIHN0cmluZw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXByb3RlY3RlZCBzdHJpbmcgJHRhYmxlOw0KDQoJLyoqDQoJICogQ29uc3RydWN0b3INCgkgKg0KCSAqIEB0aHJvd3MgXEV4Y2VwdGlvbg0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCg/Sm9vbWxhRGF0YWJhc2UgJGRiID0gbnVsbCkNCgl7DQoJCSR0aGlzLT5kYiA9ICRkYiA/OiBGYWN0b3J5OjpnZXRDb250YWluZXIoKS0+Z2V0KEpvb21sYURhdGFiYXNlOjpjbGFzcyk7DQoNCgkJJHRoaXMtPmNvbXBvbmVudENvZGUgPSBIZWxwZXI6OmdldENvZGUoKTsNCgkJJHRoaXMtPnRhYmxlID0gJyNfXycgLiAkdGhpcy0+Y29tcG9uZW50Q29kZTsNCgl9DQoNCgkvKioNCgkgKiBTZXQgYSB0YWJsZSBuYW1lLCBhZGRpbmcgdGhlDQoJICogICAgIGNvcmUgY29tcG9uZW50IGFzIG5lZWRlZA0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICBUaGUgdGFibGUgc3RyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0VGFibGUoc3RyaW5nICR0YWJsZSk6IHN0cmluZw0KCXsNCgkJaWYgKHN0cnBvcygkdGFibGUsICcjX18nKSA9PT0gZmFsc2UpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+dGFibGUgLiAnXycgLiAkdGFibGU7DQoJCX0NCg0KCQlyZXR1cm4gJHRhYmxlOw0KCX0=', '{}', '{}', '', 1, '2018-10-05 17:01:41', 51, 0, 1), +(133, '524eb8f6-38d4-47dc-92ad-98b94e099ac0', 'VDM.Database.Insert', 'Insert', 'final class', 'Database Insert Class\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 'd9839333-a8f1-4a36-9256-5df4d349b3f6', '', '', '', '{\"0\":\"ad12ca1c-d3ce-4e7f-88c5-c6c92bdedc48\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Database.Insert', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRGF0ZVxEYXRlOw==', '{\"use_selection0\":{\"use\":\"b8176bdf-5615-4d91-8dfa-990d42f44127\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIERlZmF1bHQgU3dpdGNoDQoJICoNCgkgKiBAc2luY2UgNS4xLjENCgkgKi8NCgl1c2UgRGVmYXVsdFRyYWl0Ow0KDQoJLyoqDQoJICogVGhlIGhpc3RvcnkgdHJhY2tlciBidWNrZXQNCgkgKg0KCSAqIEB2YXIgICAgICBhcnJheQ0KCSAqIEBzaW5jZSAgNS4xLjENCgkgKiovDQoJcHJvdGVjdGVkIGFycmF5ICRoaXN0b3J5R3VpZDsNCg0KCS8qKg0KCSAqIEluc2VydCByb3dzIHRvIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkY29sdW1ucyA9PT0gW10pDQoJCXsNCgkJCSRjb2x1bW5zID0gJHRoaXMtPmdldEFycmF5Q29sdW1ucygkZGF0YSk7DQoJCX0NCg0KCQlyZXR1cm4gKCRjb2x1bW5zID09PSBbXSkgPyBmYWxzZSA6ICR0aGlzLT5pbnNlcnQoJGRhdGEsICR0YWJsZSwgJGNvbHVtbnMsIHRydWUpOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCBpdGVtcyB0byB0aGUgZGF0YWJhc2UgKHdpdGggcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcgY29sdW1ucyBvcHRpb24pDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgICAgIERhdGEgdG8gc3RvcmUgaW4gZGF0YWJhc2UgKGFycmF5IG9mIG9iamVjdHMpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgYWRkZWQNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29sdW1ucyAgICAgIERhdGEgY29sdW1ucyBmb3IgcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbXMoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sDQoJew0KCQlpZiAoIUFycmF5SGVscGVyOjpjaGVjaygkZGF0YSkpDQoJCXsNCgkJCXJldHVybiBmYWxzZTsNCgkJfQ0KDQoJCWlmICgkY29sdW1ucyA9PT0gW10pDQoJCXsNCgkJCSRjb2x1bW5zID0gJHRoaXMtPmdldE9iamVjdHNDb2x1bW5zKCRkYXRhKTsNCgkJfQ0KDQoJCXJldHVybiAoJGNvbHVtbnMgPT09IFtdKSA/IGZhbHNlIDogJHRoaXMtPmluc2VydCgkZGF0YSwgJHRhYmxlLCAkY29sdW1ucywgZmFsc2UpOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCByb3cgdG8gdGhlIGRhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgIERhdGFzZXQgdG8gc3RvcmUgaW4gZGF0YWJhc2UgKGtleSA9PiB2YWx1ZSkNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiByb3coYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUpOiBib29sDQoJew0KCQlyZXR1cm4gJHRoaXMtPnJvd3MoWyRkYXRhXSwgJHRhYmxlKTsNCgl9DQoNCgkvKioNCgkgKiBJbnNlcnQgaXRlbSB0byB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAkZGF0YSAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSAoa2V5ID0+IHZhbHVlKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW0ob2JqZWN0ICRkYXRhLCBzdHJpbmcgJHRhYmxlKTogYm9vbA0KCXsNCgkJcmV0dXJuICR0aGlzLT5pdGVtcyhbJGRhdGFdLCAkdGFibGUpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjb2x1bW5zIGZyb20gZGF0YSBhcnJheQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAkZGF0YSAgIERhdGEgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5DQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFycmF5Q29sdW1ucyhhcnJheSAmJGRhdGEpOiBhcnJheQ0KCXsNCgkJJHJvdyA9IGFycmF5X3ZhbHVlcygkZGF0YSlbMF07DQoNCgkJaWYgKCFBcnJheUhlbHBlcjo6Y2hlY2soJHJvdykpDQoJCXsNCgkJCXJldHVybiBbXTsNCgkJfQ0KDQoJCSRjb2x1bW5zID0gYXJyYXlfa2V5cygkcm93KTsNCg0KCQlyZXR1cm4gYXJyYXlfY29tYmluZSgkY29sdW1ucywgJGNvbHVtbnMpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjb2x1bW5zIGZyb20gZGF0YSBvYmplY3RzDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICRkYXRhICAgRGF0YSBvYmplY3RzDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRPYmplY3RzQ29sdW1ucyhhcnJheSAmJGRhdGEpOiBhcnJheQ0KCXsNCgkJJHJvdyA9IGFycmF5X3ZhbHVlcygkZGF0YSlbMF07DQoNCgkJaWYgKCFpc19vYmplY3QoJHJvdykpDQoJCXsNCgkJCXJldHVybiBbXTsNCgkJfQ0KDQoJCSRjb2x1bW5zID0gZ2V0X29iamVjdF92YXJzKCRyb3cpOw0KDQoJCXJldHVybiBhcnJheV9jb21iaW5lKGFycmF5X2tleXMoJGNvbHVtbnMpLCBhcnJheV9rZXlzKCRjb2x1bW5zKSk7DQoJfQ0KDQoJLyoqDQoJICogSW5zZXJ0IGRhdGEgaW50byB0aGUgZGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGRhdGEgICAgICBEYXRhIHRvIHN0b3JlIGluIGRhdGFiYXNlDQoJICogQHBhcmFtICAgc3RyaW5nICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICogQHBhcmFtICAgYm9vbCAgICAkaXNBcnJheSAgIFdoZXRoZXIgdGhlIGRhdGEgaXMgYW4gYXJyYXkgb2YgYXJyYXlzIG9yIGFuIGFycmF5IG9mIG9iamVjdHMNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW5zZXJ0KGFycmF5ICYkZGF0YSwgc3RyaW5nICR0YWJsZSwgYXJyYXkgJGNvbHVtbnMsIGJvb2wgJGlzQXJyYXkpOiBib29sDQoJew0KCQkvLyBzZXQgam9vbWxhIGRlZmF1bHQgY29sdW1ucw0KCQkkYWRkX2NyZWF0ZWQgPSBmYWxzZTsNCgkJJGFkZF9jcmVhdGVkX2J5ID0gZmFsc2U7DQoJCSRhZGRfdmVyc2lvbiA9IGZhbHNlOw0KCQkkYWRkX3B1Ymxpc2hlZCA9IGZhbHNlOw0KDQoJCS8vIGNoZWNrIGlmIHdlIHNob3VsZCBsb2FkIHRoZSBkZWZhdWx0cw0KCQlpZiAoJHRoaXMtPmRlZmF1bHRzKQ0KCQl7DQoJCQkvLyBnZXQgdGhlIGRhdGUNCgkJCSRkYXRlID0gKG5ldyBEYXRlKCkpLT50b1NxbCgpOw0KDQoJCQlpZiAoIWlzc2V0KCRjb2x1bW5zWydjcmVhdGVkJ10pKQ0KCQkJew0KCQkJCSRjb2x1bW5zWydjcmVhdGVkJ10gPSAnIChvX08pICc7DQoJCQkJJGFkZF9jcmVhdGVkID0gdHJ1ZTsNCgkJCX0NCg0KCQkJaWYgKCFpc3NldCgkY29sdW1uc1snY3JlYXRlZF9ieSddKSkNCgkJCXsNCgkJCQkkY29sdW1uc1snY3JlYXRlZF9ieSddID0gJyAob19PKSAnOw0KCQkJCSRhZGRfY3JlYXRlZF9ieSA9IHRydWU7DQoJCQl9DQoNCgkJCWlmICghaXNzZXQoJGNvbHVtbnNbJ3ZlcnNpb24nXSkpDQoJCQl7DQoJCQkJJGNvbHVtbnNbJ3ZlcnNpb24nXSA9ICcgKG9fTykgJzsNCgkJCQkkYWRkX3ZlcnNpb24gPSB0cnVlOw0KCQkJfQ0KDQoJCQlpZiAoIWlzc2V0KCRjb2x1bW5zWydwdWJsaXNoZWQnXSkpDQoJCQl7DQoJCQkJJGNvbHVtbnNbJ3B1Ymxpc2hlZCddID0gJyAob19PKSAnOw0KCQkJCSRhZGRfcHVibGlzaGVkID0gdHJ1ZTsNCgkJCX0NCgkJCS8vIHRoZSAob19PKSBwcmV2ZW50cyBhbiBlbXB0eSB2YWx1ZSBmcm9tIGJlaW5nIGxvYWRlZA0KCQl9DQoNCgkJLy8gc2V0IGhpc3RvcnkgdmFycw0KCQkkdGhpcy0+ZW50aXR5ID0gJHRoaXMtPmdldFRhYmxlRW50aXR5TmFtZSgkdGFibGUpOw0KCQkkdGhpcy0+aGlzdG9yeUd1aWQgPSBbXTsNCg0KCQkvLyBnZXQgYSBxdWVyeSBvYmplY3QNCgkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5jcmVhdGVRdWVyeSgpOw0KCQkkdGFibGUgPSAkdGhpcy0+Z2V0VGFibGUoJHRhYmxlKTsNCg0KCQkvLyBzZXQgdGhlIHF1ZXJ5IHRhcmdldHMNCgkJJHF1ZXJ5LT5pbnNlcnQoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJHRhYmxlKSktPmNvbHVtbnMoJHRoaXMtPmRiLT5xdW90ZU5hbWUoYXJyYXlfa2V5cygkY29sdW1ucykpKTsNCg0KCQkvLyBsaW1pdGluZyBmYWN0b3Igb24gdGhlIGFtb3VudCBvZiByb3dzIHRvIGluc2VydCBiZWZvcmUgd2UgcmVzZXQgdGhlIHF1ZXJ5DQoJCSRsaW1pdCA9IDMwMDsNCg0KCQkvLyBzZXQgdGhlIGluc2VydCB2YWx1ZXMNCgkJZm9yZWFjaCAoJGRhdGEgYXMgJG5yID0+ICR2YWx1ZSkNCgkJew0KCQkJLy8gY2hlY2sgdGhlIGxpbWl0DQoJCQlpZiAoJGxpbWl0IDw9IDEpDQoJCQl7DQoJCQkJLy8gZXhlY3V0ZSBhbmQgcmVzZXQgdGhlIHF1ZXJ5DQoJCQkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCQkJLy8gcmVzZXQgbGltaXQNCgkJCQkkbGltaXQgPSAzMDA7DQoNCgkJCQkvLyBnZXQgYSBxdWVyeSBvYmplY3QNCgkJCQkkcXVlcnkgPSAkdGhpcy0+ZGItPmNyZWF0ZVF1ZXJ5KCk7DQoNCgkJCQkvLyBzZXQgdGhlIHF1ZXJ5IHRhcmdldHMNCgkJCQkkcXVlcnktPmluc2VydCgkdGhpcy0+ZGItPnF1b3RlTmFtZSgkdGFibGUpKS0+Y29sdW1ucygkdGhpcy0+ZGItPnF1b3RlTmFtZShhcnJheV9rZXlzKCRjb2x1bW5zKSkpOw0KCQkJfQ0KDQoJCQkkcm93ID0gW107DQoJCQlmb3JlYWNoICgkY29sdW1ucyBhcyAkY29sdW1uID0+ICRrZXkpDQoJCQl7DQoJCQkJaWYgKCcgKG9fTykgJyA9PT0gJGtleSkNCgkJCQl7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCg0KCQkJCSR2YWwgPSAoJGlzQXJyYXkgJiYgaXNzZXQoJHZhbHVlWyRrZXldKSkgPyAkdmFsdWVbJGtleV0NCgkJCQkJOiAoKCEkaXNBcnJheSAmJiBpc3NldCgkdmFsdWUtPnska2V5fSkpID8gJHZhbHVlLT57JGtleX0gOiAnJyk7DQoNCgkJCQkvLyB3ZSBjYW4gb25seSBzZXQgaGlzdG9yeSBpZiB3ZSBoYXZlIGEgZ3VpZCBpbiB0aGUgZGF0YSBzZXQNCgkJCQlpZiAoJGNvbHVtbiA9PT0gJ2d1aWQnICYmICFlbXB0eSgkdGhpcy0+ZW50aXR5KSAmJiAkdGhpcy0+aGlzdG9yeSAmJiAhZW1wdHkoJHZhbCkpDQoJCQkJew0KCQkJCQkkdGhpcy0+aGlzdG9yeUd1aWRbJHZhbF0gPSAxOw0KCQkJCX0NCg0KCQkJCSRyb3dbXSA9ICR0aGlzLT5xdW90ZSgkdmFsKTsNCgkJCX0NCg0KCQkJLy8gc2V0IGpvb21sYSBkZWZhdWx0IGNvbHVtbnMNCgkJCWlmICgkYWRkX2NyZWF0ZWQpDQoJCQl7DQoJCQkJJHJvd1tdID0gJHRoaXMtPmRiLT5xdW90ZSgkZGF0ZSk7DQoJCQl9DQoNCgkJCWlmICgkYWRkX2NyZWF0ZWRfYnkpDQoJCQl7DQoJCQkJJHJvd1tdID0gJHRoaXMtPnVzZXJJZDsNCgkJCX0NCg0KCQkJaWYgKCRhZGRfdmVyc2lvbikNCgkJCXsNCgkJCQkkcm93W10gPSAxOw0KCQkJfQ0KDQoJCQlpZiAoJGFkZF9wdWJsaXNoZWQpDQoJCQl7DQoJCQkJJHJvd1tdID0gMTsNCgkJCX0NCg0KCQkJLy8gYWRkIHRvIHF1ZXJ5DQoJCQkkcXVlcnktPnZhbHVlcyhpbXBsb2RlKCcsJywgJHJvdykpOw0KDQoJCQkvLyBkZWNyZW1lbnQgdGhlIGxpbWl0ZXINCgkJCSRsaW1pdC0tOw0KDQoJCQkvLyBjbGVhciB0aGUgZGF0YSBmcm9tIG1lbW9yeQ0KCQkJdW5zZXQoJGRhdGFbJG5yXSk7DQoJCX0NCg0KCQkvLyBleGVjdXRlIHRoZSBmaW5hbCBxdWVyeQ0KCQkkdGhpcy0+ZGItPnNldFF1ZXJ5KCRxdWVyeSk7DQoJCSR0aGlzLT5kYi0+ZXhlY3V0ZSgpOw0KDQoJCS8vIHRyYWNrIHZlcnNpb24gaGlzdG9yeQ0KCQlpZiAoJHRoaXMtPmhpc3RvcnkgJiYgIWVtcHR5KCR0aGlzLT5lbnRpdHkpICYmICR0aGlzLT5oaXN0b3J5R3VpZCAhPT0gW10pDQoJCXsNCgkJCSR0aGlzLT50cmFja0hpc3RvcnkoYXJyYXlfa2V5cygkdGhpcy0+aGlzdG9yeUd1aWQpLCAkdGFibGUpOw0KCQl9DQoNCgkJLy8gYWx3YXlzIHJlc2V0IHRoZSBzd2l0Y2gncw0KCQkkdGhpcy0+ZGVmYXVsdHMoKS0+aGlzdG9yeSgpOw0KDQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCS8qKg0KCSAqIEF0dGVtcHQgdG8gc2V0IGhpc3RvcnkgcmVjb3JkcyBmb3IgdGhlIHNwZWNpZmllZCBlbnRpdHkuDQoJICoNCgkgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgaGlzdG9yeSB0cmFja2luZyBpcyBlbmFibGVkIGFuZCB0aGUgcHJvdmlkZWQgYCRlbnRpdHlgIGhhcw0KCSAqIGNvcnJlc3BvbmRpbmcgR1VJRHMgaW4gdGhlIGAkaGlzdG9yeWAgYXJyYXkuIEl0IHRoZW4gZmV0Y2hlcyB0aGUgSURzIGZvciB0aGUNCgkgKiBtYXRjaGluZyBHVUlEcyBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgdHJpZ2dlcnMgaGlzdG9yeSBzZXR0aW5nIG9uIHRoZW0uDQoJICoNCgkgKiBBbnkgZXhjZXB0aW9ucyBkdXJpbmcgdGhpcyBwcm9jZXNzIGFyZSBzaWxlbnRseSBjYXVnaHQgYW5kIGlnbm9yZWQuDQoJICoNCgkgKiBAcGFyYW0gIGFycmF5ICAgJGhpc3RvcnkgIFRoZSBoaXN0b3J5IG1hcCB3aXRoIGVudGl0eSBHVUlEcyBhcyB2YWx1ZXMuDQoJICogQHBhcmFtICBzdHJpbmcgICR0YWJsZSAgICBUaGUgZnVsbCB0YWJsZSBuYW1lLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjEuMQ0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiB0cmFja0hpc3RvcnkoYXJyYXkgJGhpc3RvcnksIHN0cmluZyAkdGFibGUpOiB2b2lkDQoJew0KCQl0cnkNCgkJew0KCQkJJHF1ZXJ5ID0gJHRoaXMtPmRiLT5jcmVhdGVRdWVyeSgpDQoJCQkJLT5zZWxlY3QoJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2lkJykpDQoJCQkJLT5mcm9tKCR0aGlzLT5kYi0+cXVvdGVOYW1lKCR0YWJsZSkpDQoJCQkJLT53aGVyZSgNCgkJCQkJJHRoaXMtPmRiLT5xdW90ZU5hbWUoJ2d1aWQnKSAuICcgSU4gKCcgLg0KCQkJCQlpbXBsb2RlKCcsJywgYXJyYXlfbWFwKGZuKCR2KSA9PiAkdGhpcy0+cXVvdGUoJHYpLCAkaGlzdG9yeSkpIC4NCgkJCQkJJyknDQoJCQkJKTsNCg0KCQkJJHRoaXMtPmRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KCQkJJHRoaXMtPmRiLT5leGVjdXRlKCk7DQoNCgkJCWlmICgkdGhpcy0+ZGItPmdldE51bVJvd3MoKSkNCgkJCXsNCgkJCQkkdGhpcy0+c2V0TXVsdGlwbGVIaXN0b3J5KA0KCQkJCQkkdGhpcy0+ZGItPmxvYWRDb2x1bW4oKQ0KCQkJCSk7DQoJCQl9DQoJCX0NCgkJY2F0Y2ggKFxUaHJvd2FibGUgJGUpDQoJCXsNCgkJCS8vIFNpbGVudGx5IGlnbm9yZSBhbGwgZXJyb3JzDQoJCX0NCgl9', '{}', '{}', '', 1, '2022-09-03 14:06:26', 46, 0, 1), (134, 'ad12ca1c-d3ce-4e7f-88c5-c6c92bdedc48', 'VDM.Interfaces.Database.InsertInterface', 'InsertInterface', 'interface', 'Database Insert Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '{\"0\":\"78931d43-9fb9-4cc1-a2ca-b3e189ef842e\",\"1\":\"ac77cee7-7018-4496-a453-9757623e3849\"}', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Database.InsertInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEluc2VydCByb3dzIHRvIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YXNldCB0byBzdG9yZSBpbiBkYXRhYmFzZSBbYXJyYXkgb2YgYXJyYXlzIChrZXkgPT4gdmFsdWUpXQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIGFkZGVkDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJGRhdGEsIHN0cmluZyAkdGFibGUsIGFycmF5ICRjb2x1bW5zID0gW10pOiBib29sOw0KDQoJLyoqDQoJICogSW5zZXJ0IGl0ZW1zIHRvIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgICAgRGF0YSB0byBzdG9yZSBpbiBkYXRhYmFzZSAoYXJyYXkgb2Ygb2JqZWN0cykNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyBhZGRlZA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRjb2x1bW5zICAgICAgRGF0YSBjb2x1bW5zIGZvciByZW1hcHBpbmcgYW5kIGZpbHRlcmluZw0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyhhcnJheSAkZGF0YSwgc3RyaW5nICR0YWJsZSwgYXJyYXkgJGNvbHVtbnMgPSBbXSk6IGJvb2w7DQoNCgkvKioNCgkgKiBJbnNlcnQgcm93IHRvIHRoZSBkYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGRhdGEgICAgICBEYXRhc2V0IHRvIHN0b3JlIGluIGRhdGFiYXNlIChrZXkgPT4gdmFsdWUpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgYWRkZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gcm93KGFycmF5ICRkYXRhLCBzdHJpbmcgJHRhYmxlKTogYm9vbDsNCg0KCS8qKg0KCSAqIEluc2VydCBpdGVtIHRvIHRoZSBkYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgICRkYXRhICAgICBEYXRhc2V0IHRvIHN0b3JlIGluIGRhdGFiYXNlIChrZXkgPT4gdmFsdWUpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgYWRkZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShvYmplY3QgJGRhdGEsIHN0cmluZyAkdGFibGUpOiBib29sOw==', '{}', '{}', '', 1, '2022-12-10 14:06:51', 20, 0, 1), (135, 'caf33c5d-858c-4f9a-894f-ab302ec5445a', 'VDM.Interfaces.FactoryInterface', 'FactoryInterface', 'interface', 'The Container Factory Interface\r\n\r\n@since 0.0.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.FactoryInterface', 1, '{}', '{}', 'dXNlIEpvb21sYVxESVxDb250YWluZXI7', '{}', 'CS8qKg0KCSAqIEdldCBhbnkgY2xhc3MgZnJvbSB0aGUgY29udGFpbmVyDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRrZXkgIFRoZSBjb250YWluZXIgY2xhc3Mga2V5DQoJICoNCgkgKiBAcmV0dXJuICBNaXhlZA0KCSAqIEBzaW5jZSAwLjAuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gXyhzdHJpbmcgJGtleSk7DQoNCgkvKioNCgkgKiBHZXQgdGhlIGdsb2JhbCBjb250YWluZXINCgkgKg0KCSAqIEByZXR1cm4gIENvbnRhaW5lcg0KCSAqIEBzaW5jZSAwLjAuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29udGFpbmVyKCk6IENvbnRhaW5lcjs=', '{}', '{}', '', 1, '2022-12-14 07:12:55', 19, 0, 1), (136, 'bfd1d6d5-56c1-4fe9-9fee-1c5910e1f5d8', 'VDM.Table', 'Table', 'class', '[[[Component]]] Tables\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '2.0.0', 'e0f6ddbe-2a35-4537-942c-faff2ebd04f6', '', '', '', '{\"0\":\"2da6d6c4-eb29-4d69-8bc2-36d96e916adf\"}', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Table', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEFsbCBhcmVhcy92aWV3cy90YWJsZXMgd2l0aCB0aGVpciBmaWVsZCBkZXRhaWxzDQoJICoNCgkgKiBAdmFyICAgICBhcnJheQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqKi8NCglwcm90ZWN0ZWQgYXJyYXkgJHRhYmxlcyA9ICMjI0FMTF9DT01QT05FTlRfRklFTERTIyMjOw==', '{}', '{}', '', 1, '2022-12-14 07:30:10', 21, 0, 1), (137, '2da6d6c4-eb29-4d69-8bc2-36d96e916adf', 'VDM.Interfaces.TableInterface', 'TableInterface', 'interface', 'The VDM Core Table Interface', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.TableInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIEdldCBhbnkgdmFsdWUgZnJvbSBhIGl0ZW0vZmllbGQvY29sdW1uIG9mIGFuIGFyZWEvdmlldy90YWJsZQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5nZXQoJ3RhYmxlX25hbWUnLCAnZmllbGRfbmFtZScsICd2YWx1ZV9rZXknKTsNCgkgKiBHZXQgYW4gaXRlbS9maWVsZC9jb2x1bW4gb2YgYW4gYXJlYS92aWV3L3RhYmxlDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPmdldCgndGFibGVfbmFtZScsICdmaWVsZF9uYW1lJyk7DQoJICogR2V0IGFsbCBpdGVtcy9maWVsZHMvY29sdW1ucyBvZiBhbiBhcmVhL3ZpZXcvdGFibGUNCgkgKiAgICAgICAgICBFeGFtcGxlOiAkdGhpcy0+Z2V0KCd0YWJsZV9uYW1lJyk7DQoJICogR2V0IGFsbCBhcmVhcy92aWV3cy90YWJsZXMgd2l0aCBhbGwgdGhlaXIgaXRlbS9maWVsZC9jb2x1bW4gZGV0YWlscw0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5nZXQoJ0FsbCcpOw0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5nZXQoKTsNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAkdGFibGUgIFRoZSB0YWJsZQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAkZmllbGQgIFRoZSBmaWVsZA0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAka2V5ICAgIFRoZSB2YWx1ZSBrZXkNCgkgKg0KCSAqIEByZXR1cm4gIG1peGVkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldCg/c3RyaW5nICR0YWJsZSA9IG51bGwsID9zdHJpbmcgJGZpZWxkID0gbnVsbCwgP3N0cmluZyAka2V5ID0gbnVsbCk7DQoNCgkvKioNCgkgKiBHZXQgdGl0bGUgZmllbGQgZnJvbSBhbiBhcmVhL3ZpZXcvdGFibGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgVGhlIGFyZWENCgkgKg0KCSAqIEByZXR1cm4gID9hcnJheQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0aXRsZShzdHJpbmcgJHRhYmxlKTogP2FycmF5Ow0KDQoJLyoqDQoJICogR2V0IHRpdGxlIGZpZWxkIG5hbWUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgVGhlIGFyZWENCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0aXRsZU5hbWUoc3RyaW5nICR0YWJsZSk6IHN0cmluZzsNCg0KCS8qKg0KCSAqIEdldCBhbGwgdGFibGVzDQoJICoNCgkgKiBAcmV0dXJuICBhcnJheQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0YWJsZXMoKTogYXJyYXk7DQoNCgkvKioNCgkgKiBDaGVjayBpZiBhIHRhYmxlIChhbmQgZmllbGQpIGV4aXN0DQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgJHRhYmxlICBUaGUgYXJlYQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAkZmllbGQgIFRoZSBhcmVhDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGV4aXN0KHN0cmluZyAkdGFibGUsID9zdHJpbmcgJGZpZWxkID0gbnVsbCk6IGJvb2w7DQoNCgkvKioNCgkgKiBHZXQgYWxsIGZpZWxkcyBvZiBhbiBhcmVhL3ZpZXcvdGFibGUNCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJHRhYmxlICAgICBUaGUgYXJlYQ0KCSAqIEBwYXJhbSAgIGJvb2wgICAgJGRlZmF1bHQgICBBZGQgdGhlIGRlZmF1bHQgZmllbGRzDQoJICogQHBhcmFtICAgYm9vbCAgICAkZGV0YWlscyAgIEFkZC9MZWF2ZSBmaWVsZHMgdGhlIGRldGFpbHMNCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5fG51bGwgICBPbiBzdWNjZXNzIGFuIGFycmF5IG9mIGZpZWxkcw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBmaWVsZHMoc3RyaW5nICR0YWJsZSwgYm9vbCAkZGVmYXVsdCA9IGZhbHNlLCBib29sICRkZXRhaWxzID0gZmFsc2UpOiA/YXJyYXk7', '{}', '{}', '', 1, '2022-12-14 07:42:16', 12, 0, 1), -(154, '4815e1c7-a433-443d-a112-d1e03d7df84b', 'JCB.Service.Database', 'Database', 'class', 'Database Service Provider\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, 'Registry', '', '', '{\"0\":\"-1\"}', 'ServiceProviderInterface', '[[[NamespacePrefix]]]\\Joomla\\Service.Database', 1, '{}', '{}', 'dXNlIEpvb21sYVxESVxDb250YWluZXI7DQp1c2UgSm9vbWxhXERJXFNlcnZpY2VQcm92aWRlckludGVyZmFjZTs=', '{\"use_selection0\":{\"use\":\"06f8eada-d59b-441c-b287-0aea1793da5a\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"524eb8f6-38d4-47dc-92ad-98b94e099ac0\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"cce56585-58b0-4f72-a92c-e2635ea52d83\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"92291f1f-f248-4ec0-9f2a-3d47c49eeac1\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFJlZ2lzdGVycyB0aGUgc2VydmljZSBwcm92aWRlciB3aXRoIGEgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcihDb250YWluZXIgJGNvbnRhaW5lcikNCgl7DQoJCSRjb250YWluZXItPmFsaWFzKExvYWQ6OmNsYXNzLCAnTG9hZCcpDQoJCQktPnNoYXJlKCdMb2FkJywgWyR0aGlzLCAnZ2V0TG9hZCddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhJbnNlcnQ6OmNsYXNzLCAnSW5zZXJ0JykNCgkJCS0+c2hhcmUoJ0luc2VydCcsIFskdGhpcywgJ2dldEluc2VydCddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhVcGRhdGU6OmNsYXNzLCAnVXBkYXRlJykNCgkJCS0+c2hhcmUoJ1VwZGF0ZScsIFskdGhpcywgJ2dldFVwZGF0ZSddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhEZWxldGU6OmNsYXNzLCAnRGVsZXRlJykNCgkJCS0+c2hhcmUoJ0RlbGV0ZScsIFskdGhpcywgJ2dldERlbGV0ZSddLCB0cnVlKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgdGhlIENvcmUgTG9hZCBEYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgTG9hZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRMb2FkKENvbnRhaW5lciAkY29udGFpbmVyKTogTG9hZA0KCXsNCgkJcmV0dXJuIG5ldyBMb2FkKCk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBDb3JlIEluc2VydCBEYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgSW5zZXJ0DQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEluc2VydChDb250YWluZXIgJGNvbnRhaW5lcik6IEluc2VydA0KCXsNCgkJcmV0dXJuIG5ldyBJbnNlcnQoKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgdGhlIENvcmUgVXBkYXRlIERhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBDb250YWluZXIgICRjb250YWluZXIgIFRoZSBESSBjb250YWluZXIuDQoJICoNCgkgKiBAcmV0dXJuICBVcGRhdGUNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0VXBkYXRlKENvbnRhaW5lciAkY29udGFpbmVyKTogVXBkYXRlDQoJew0KCQlyZXR1cm4gbmV3IFVwZGF0ZSgpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgQ29yZSBEZWxldGUgRGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIERlbGV0ZQ0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXREZWxldGUoQ29udGFpbmVyICRjb250YWluZXIpOiBEZWxldGUNCgl7DQoJCXJldHVybiBuZXcgRGVsZXRlKCk7DQoJfQ==', '{}', '{}', '', 1, '2022-12-30 21:27:57', 11, 0, 1), +(154, '4815e1c7-a433-443d-a112-d1e03d7df84b', 'JCB.Service.Database', 'Database', 'class', 'Database Service Provider\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, 'Registry', '', '', '{\"0\":\"-1\"}', 'ServiceProviderInterface', '[[[NamespacePrefix]]]\\Joomla\\Service.Database', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcRGF0YWJhc2VcRGF0YWJhc2VJbnRlcmZhY2U7DQp1c2UgSm9vbWxhXERJXENvbnRhaW5lcjsNCnVzZSBKb29tbGFcRElcU2VydmljZVByb3ZpZGVySW50ZXJmYWNlOw==', '{\"use_selection0\":{\"use\":\"06f8eada-d59b-441c-b287-0aea1793da5a\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"524eb8f6-38d4-47dc-92ad-98b94e099ac0\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"cce56585-58b0-4f72-a92c-e2635ea52d83\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"92291f1f-f248-4ec0-9f2a-3d47c49eeac1\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFJlZ2lzdGVycyB0aGUgc2VydmljZSBwcm92aWRlciB3aXRoIGEgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcihDb250YWluZXIgJGNvbnRhaW5lcikNCgl7DQoJCSRjb250YWluZXItPmFsaWFzKERhdGFiYXNlSW50ZXJmYWNlOjpjbGFzcywgJ0pvb21sYS5EYXRhYmFzZScpDQoJCQktPnNoYXJlKCdKb29tbGEuRGF0YWJhc2UnLCBbJHRoaXMsICdnZXRKb29tbGFEYXRhYmFzZSddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhMb2FkOjpjbGFzcywgJ0xvYWQnKQ0KCQkJLT5zaGFyZSgnTG9hZCcsIFskdGhpcywgJ2dldExvYWQnXSwgdHJ1ZSk7DQoNCgkJJGNvbnRhaW5lci0+YWxpYXMoSW5zZXJ0OjpjbGFzcywgJ0luc2VydCcpDQoJCQktPnNoYXJlKCdJbnNlcnQnLCBbJHRoaXMsICdnZXRJbnNlcnQnXSwgdHJ1ZSk7DQoNCgkJJGNvbnRhaW5lci0+YWxpYXMoVXBkYXRlOjpjbGFzcywgJ1VwZGF0ZScpDQoJCQktPnNoYXJlKCdVcGRhdGUnLCBbJHRoaXMsICdnZXRVcGRhdGUnXSwgdHJ1ZSk7DQoNCgkJJGNvbnRhaW5lci0+YWxpYXMoRGVsZXRlOjpjbGFzcywgJ0RlbGV0ZScpDQoJCQktPnNoYXJlKCdEZWxldGUnLCBbJHRoaXMsICdnZXREZWxldGUnXSwgdHJ1ZSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBKb29tbGEgRGF0YWJhc2UNCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIERhdGFiYXNlSW50ZXJmYWNlDQoJICogQHNpbmNlICAgNS4xLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0Sm9vbWxhRGF0YWJhc2UoQ29udGFpbmVyICRjb250YWluZXIpOiBEYXRhYmFzZUludGVyZmFjZQ0KCXsNCgkJaWYgKEZhY3Rvcnk6OmdldENvbnRhaW5lcigpLT5oYXMoRGF0YWJhc2VJbnRlcmZhY2U6OmNsYXNzKSkNCgkJew0KCQkJcmV0dXJuIEZhY3Rvcnk6OmdldENvbnRhaW5lcigpLT5nZXQoRGF0YWJhc2VJbnRlcmZhY2U6OmNsYXNzKTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCXJldHVybiBGYWN0b3J5OjpnZXREYm8oKTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgQ29yZSBMb2FkIERhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBDb250YWluZXIgICRjb250YWluZXIgIFRoZSBESSBjb250YWluZXIuDQoJICoNCgkgKiBAcmV0dXJuICBMb2FkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldExvYWQoQ29udGFpbmVyICRjb250YWluZXIpOiBMb2FkDQoJew0KCQlyZXR1cm4gbmV3IExvYWQoDQoJCQkkY29udGFpbmVyLT5nZXQoJ0pvb21sYS5EYXRhYmFzZScpDQoJCSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBDb3JlIEluc2VydCBEYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgSW5zZXJ0DQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEluc2VydChDb250YWluZXIgJGNvbnRhaW5lcik6IEluc2VydA0KCXsNCgkJcmV0dXJuIG5ldyBJbnNlcnQoDQoJCQkkY29udGFpbmVyLT5nZXQoJ0pvb21sYS5EYXRhYmFzZScpDQoJCSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBDb3JlIFVwZGF0ZSBEYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgVXBkYXRlDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFVwZGF0ZShDb250YWluZXIgJGNvbnRhaW5lcik6IFVwZGF0ZQ0KCXsNCgkJcmV0dXJuIG5ldyBVcGRhdGUoDQoJCQkkY29udGFpbmVyLT5nZXQoJ0pvb21sYS5EYXRhYmFzZScpDQoJCSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBDb3JlIERlbGV0ZSBEYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgRGVsZXRlDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldERlbGV0ZShDb250YWluZXIgJGNvbnRhaW5lcik6IERlbGV0ZQ0KCXsNCgkJcmV0dXJuIG5ldyBEZWxldGUoDQoJCQkkY29udGFpbmVyLT5nZXQoJ0pvb21sYS5EYXRhYmFzZScpDQoJCSk7DQoJfQ==', '{}', '{}', '', 1, '2022-12-30 21:27:57', 13, 0, 1), (379, '1198aecf-84c6-45d2-aea8-d531aa4afdfa', 'Utilities FormHelper', 'FormHelper', 'abstract class', 'Form Helper\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Utilities.FormHelper', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRm9ybVxGb3JtSGVscGVyIGFzIEpvb21sYUZvcm1IZWxwZXI7DQp1c2UgSm9vbWxhXENNU1xGb3JtXEZvcm1GaWVsZDs=', '{}', 'CS8qKg0KCSAqIGdldCB0aGUgZmllbGQgeG1sDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRhdHRyaWJ1dGVzICAgVGhlIGFycmF5IG9mIGF0dHJpYnV0ZXMNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRvcHRpb25zICAgICAgVGhlIG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIFhNTCBlbGVtZW50DQoJICoNCgkgKiBAcmV0dXJuICBcU2ltcGxlWE1MRWxlbWVudHxudWxsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB4bWwoYXJyYXkgJGF0dHJpYnV0ZXMsID9hcnJheSAkb3B0aW9ucyA9IG51bGwpOiA/XFNpbXBsZVhNTEVsZW1lbnQNCgl7DQoJCS8vIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0dHJpYnV0ZXMgYW5kIGEgdHlwZSB2YWx1ZQ0KCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRhdHRyaWJ1dGVzKSkNCgkJew0KCQkJLy8gc3RhcnQgZmllbGQgeG1sDQoJCQkkWE1MID0gbmV3IFxTaW1wbGVYTUxFbGVtZW50KCc8ZmllbGQvPicpOw0KDQoJCQkvLyBsb2FkIHRoZSBhdHRyaWJ1dGVzDQoJCQlzZWxmOjphdHRyaWJ1dGVzKCRYTUwsICRhdHRyaWJ1dGVzKTsNCg0KCQkJLy8gY2hlY2sgaWYgd2UgaGF2ZSBvcHRpb25zDQoJCQlpZiAoQXJyYXlIZWxwZXI6OmNoZWNrKCRvcHRpb25zKSkNCgkJCXsNCgkJCQkvLyBsb2FkIHRoZSBvcHRpb25zDQoJCQkJc2VsZjo6b3B0aW9ucygkWE1MLCAkb3B0aW9ucyk7DQoJCQl9DQoNCgkJCS8vIHJldHVybiB0aGUgZmllbGQgeG1sDQoJCQlyZXR1cm4gJFhNTDsNCgkJfQ0KDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIHhtbEFwcGVuZA0KCSAqDQoJICogQHBhcmFtICAgXFNpbXBsZVhNTEVsZW1lbnQgICAkeG1sICAgICAgVGhlIFhNTCBlbGVtZW50IHJlZmVyZW5jZSBpbiB3aGljaCB0byBpbmplY3QgYSBjb21tZW50DQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAgICAgICAgICRub2RlICAgICBBIFNpbXBsZVhNTEVsZW1lbnQgbm9kZSB0byBhcHBlbmQgdG8gdGhlIFhNTCBlbGVtZW50IHJlZmVyZW5jZSwNCgkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBzdGRDbGFzcyBvYmplY3QgY29udGFpbmluZyBhIGNvbW1lbnQgYXR0cmlidXRlIHRvIGJlIGluamVjdGVkDQoJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSB0aGUgWE1MIG5vZGUgYW5kIGEgZmllbGRYTUwgYXR0cmlidXRlIGNvbnRhaW5pbmcgYSBTaW1wbGVYTUxFbGVtZW50DQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcHBlbmQoXFNpbXBsZVhNTEVsZW1lbnQgJiR4bWwsICRub2RlKQ0KCXsNCgkJaWYgKCEkbm9kZSkNCgkJew0KCQkJLy8gZWxlbWVudCB3YXMgbm90IHJldHVybmVkDQoJCQlyZXR1cm47DQoJCX0NCg0KCQlpZiAoJG5vZGUgaW5zdGFuY2VvZiBcc3RkQ2xhc3MpDQoJCXsNCgkJCWlmIChwcm9wZXJ0eV9leGlzdHMoJG5vZGUsICdjb21tZW50JykpDQoJCQl7DQoJCQkJc2VsZjo6Y29tbWVudCgkeG1sLCAkbm9kZS0+Y29tbWVudCk7DQoJCQl9DQoJCQlpZiAocHJvcGVydHlfZXhpc3RzKCRub2RlLCAnZmllbGRYTUwnKSkNCgkJCXsNCgkJCQlzZWxmOjphcHBlbmQoJHhtbCwgJG5vZGUtPmZpZWxkWE1MKTsNCgkJCX0NCgkJfQ0KCQllbHNlaWYgKCRub2RlIGluc3RhbmNlb2YgXFNpbXBsZVhNTEVsZW1lbnQpDQoJCXsNCgkJCSRkb21YTUwgPSBcZG9tX2ltcG9ydF9zaW1wbGV4bWwoJHhtbCk7DQoJCQkkZG9tTm9kZSA9IFxkb21faW1wb3J0X3NpbXBsZXhtbCgkbm9kZSk7DQoJCQkkZG9tWE1MLT5hcHBlbmRDaGlsZCgkZG9tWE1MLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCRkb21Ob2RlLCB0cnVlKSk7DQoJCQkkeG1sID0gXHNpbXBsZXhtbF9pbXBvcnRfZG9tKCRkb21YTUwpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogeG1sQ29tbWVudA0KCSAqDQoJICogQHBhcmFtICAgXFNpbXBsZVhNTEVsZW1lbnQgICAkeG1sICAgICAgICBUaGUgWE1MIGVsZW1lbnQgcmVmZXJlbmNlIGluIHdoaWNoIHRvIGluamVjdCBhIGNvbW1lbnQNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgICAgICAgICAgJGNvbW1lbnQgICAgVGhlIGNvbW1lbnQgdG8gaW5qZWN0DQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21tZW50KFxTaW1wbGVYTUxFbGVtZW50ICYkeG1sLCBzdHJpbmcgJGNvbW1lbnQpDQoJew0KCQkkZG9tWE1MID0gXGRvbV9pbXBvcnRfc2ltcGxleG1sKCR4bWwpOw0KCQkkZG9tQ29tbWVudCA9IG5ldyBcRE9NQ29tbWVudCgkY29tbWVudCk7DQoJCSRub2RlVGFyZ2V0ID0gJGRvbVhNTC0+b3duZXJEb2N1bWVudC0+aW1wb3J0Tm9kZSgkZG9tQ29tbWVudCwgdHJ1ZSk7DQoJCSRkb21YTUwtPmFwcGVuZENoaWxkKCRub2RlVGFyZ2V0KTsNCgkJJHhtbCA9IFxzaW1wbGV4bWxfaW1wb3J0X2RvbSgkZG9tWE1MKTsNCgl9DQoNCgkvKioNCgkgKiB4bWxBZGRBdHRyaWJ1dGVzDQoJICoNCgkgKiBAcGFyYW0gICBcU2ltcGxlWE1MRWxlbWVudCAgICR4bWwgICAgICAgICAgVGhlIFhNTCBlbGVtZW50IHJlZmVyZW5jZSBpbiB3aGljaCB0byBpbmplY3QgYSBjb21tZW50DQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICAgICAgICRhdHRyaWJ1dGVzICAgVGhlIGF0dHJpYnV0ZXMgdG8gYXBwbHkgdG8gdGhlIFhNTCBlbGVtZW50DQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhdHRyaWJ1dGVzKFxTaW1wbGVYTUxFbGVtZW50ICYkeG1sLCBhcnJheSAkYXR0cmlidXRlcyA9IFtdKQ0KCXsNCgkJZm9yZWFjaCAoJGF0dHJpYnV0ZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCXsNCgkJCSR4bWwtPmFkZEF0dHJpYnV0ZSgka2V5LCAkdmFsdWUgPz8gJycpOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogeG1sQWRkT3B0aW9ucw0KCSAqDQoJICogQHBhcmFtICAgXFNpbXBsZVhNTEVsZW1lbnQgICAkeG1sICAgICAgICAgIFRoZSBYTUwgZWxlbWVudCByZWZlcmVuY2UgaW4gd2hpY2ggdG8gaW5qZWN0IGEgY29tbWVudA0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgICAgICAgICAkb3B0aW9ucyAgICAgIFRoZSBvcHRpb25zIHRvIGFwcGx5IHRvIHRoZSBYTUwgZWxlbWVudA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gb3B0aW9ucyhcU2ltcGxlWE1MRWxlbWVudCAmJHhtbCwgYXJyYXkgJG9wdGlvbnMgPSBbXSkNCgl7DQoJCWZvcmVhY2ggKCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQl7DQoJCQkkYWRkT3B0aW9uID0gJHhtbC0+YWRkQ2hpbGQoJ29wdGlvbicpOw0KCQkJJGFkZE9wdGlvbi0+YWRkQXR0cmlidXRlKCd2YWx1ZScsICRrZXkgPz8gJycpOw0KCQkJJGFkZE9wdGlvbltdID0gJHZhbHVlOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogZ2V0IHRoZSBmaWVsZCBvYmplY3QNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICAgJGF0dHJpYnV0ZXMgICBUaGUgYXJyYXkgb2YgYXR0cmlidXRlcw0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgJGRlZmF1bHQgICAgICBUaGUgZGVmYXVsdCBvZiB0aGUgZmllbGQNCgkgKiBAcGFyYW0gICBhcnJheSAgICAgICRvcHRpb25zICAgICAgVGhlIG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIFhNTCBlbGVtZW50DQoJICoNCgkgKiBAcmV0dXJuICBGb3JtRmllbGR8bnVsbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmllbGQoYXJyYXkgJGF0dHJpYnV0ZXMsIHN0cmluZyAkZGVmYXVsdCA9ICcnLCA/YXJyYXkgJG9wdGlvbnMgPSBudWxsKTogP0Zvcm1GaWVsZA0KCXsNCgkJLy8gbWFrZSBzdXJlIHdlIGhhdmUgYXR0cmlidXRlcyBhbmQgYSB0eXBlIHZhbHVlDQoJCWlmIChBcnJheUhlbHBlcjo6Y2hlY2soJGF0dHJpYnV0ZXMpICYmIGlzc2V0KCRhdHRyaWJ1dGVzWyd0eXBlJ10pKQ0KCQl7DQoJCQkvLyBnZXQgZmllbGQgdHlwZQ0KCQkJaWYgKCgkZmllbGQgPSBKb29tbGFGb3JtSGVscGVyOjpsb2FkRmllbGRUeXBlKCRhdHRyaWJ1dGVzWyd0eXBlJ10sIHRydWUpKSA9PT0gZmFsc2UpDQoJCQl7DQoJCQkJcmV0dXJuIG51bGw7DQoJCQl9DQoNCgkJCS8vIGdldCBmaWVsZCB4bWwNCgkJCSRYTUwgPSBzZWxmOjp4bWwoJGF0dHJpYnV0ZXMsICRvcHRpb25zKTsNCg0KCQkJLy8gc2V0dXAgdGhlIGZpZWxkDQoJCQkkZmllbGQtPnNldHVwKCRYTUwsICRkZWZhdWx0KTsNCg0KCQkJLy8gcmV0dXJuIHRoZSBmaWVsZCBvYmplY3QNCgkJCXJldHVybiAkZmllbGQ7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9', '{\"load_selection0\":{\"load\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\"}}', '{}', '', 1, '2023-03-28 17:12:21', 11, 0, 1), (382, '7c1fb50f-8fb1-4627-8705-6fedf7182ca5', 'VDM.Model.Upsert', 'Upsert', 'final class', 'Power Model Update or Insert\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '584747d1-3a86-453d-b7a3-a2219de8d777', 'Abstraction\\Model', '', '', '{\"0\":\"8aef58c1-3f70-4bd4-b9e4-3f29fcd41cff\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Model.Upsert', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"91004529-94a9-4590-b842-e7c6b624ecf5\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIE1vZGVsIHRoZSB2YWx1ZQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT52YWx1ZSh2YWx1ZSwgJ2ZpZWxkX2tleScsICd0YWJsZV9uYW1lJyk7DQoJICoNCgkgKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICAgJHZhbHVlICAgIFRoZSB2YWx1ZSB0byBtb2RlbA0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAgICAkZmllbGQgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgICAkdGFibGUgICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBtaXhlZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZSgkdmFsdWUsIHN0cmluZyAkZmllbGQsID9zdHJpbmcgJHRhYmxlID0gbnVsbCkNCgl7DQoJCS8vIHNldCB0aGUgdGFibGUgbmFtZQ0KCQlpZiAoZW1wdHkoJHRhYmxlKSkNCgkJew0KCQkJJHRhYmxlID0gJHRoaXMtPmdldFRhYmxlKCk7DQoJCX0NCg0KCQkvLyBjaGVjayBpZiB0aGlzIGlzIGEgdmFsaWQgdGFibGUNCgkJaWYgKCgkc3RvcmUgPSAkdGhpcy0+dGFibGUtPmdldCgkdGFibGUsICRmaWVsZCwgJ3N0b3JlJykpICE9PSBudWxsKQ0KCQl7DQoJCQkvLyBvcGVuIHRoZSB2YWx1ZSBiYXNlZCBvbiB0aGUgc3RvcmUgbWV0aG9kDQoJCQlzd2l0Y2goJHN0b3JlKQ0KCQkJew0KCQkJCWNhc2UgJ2Jhc2U2NCc6DQoJCQkJCSR2YWx1ZSA9IGJhc2U2NF9lbmNvZGUoKHN0cmluZykgJHZhbHVlKTsNCgkJCQlicmVhazsNCgkJCQljYXNlICdqc29uJzoNCgkJCQkJJHZhbHVlID0ganNvbl9lbmNvZGUoJHZhbHVlLCAgSlNPTl9GT1JDRV9PQkpFQ1QpOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuICR2YWx1ZTsNCgl9DQoNCgkvKioNCgkgKiBWYWxpZGF0ZSBiZWZvcmUgdGhlIHZhbHVlIGlzIG1vZGVsbGVkDQoJICoNCgkgKiBAcGFyYW0gICBtaXhlZCAgICAgICAgICR2YWx1ZSAgIFRoZSBmaWVsZCB2YWx1ZQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgJGZpZWxkICAgICBUaGUgZmllbGQga2V5DQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAkdGFibGUgICBUaGUgdGFibGUNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRhdGVCZWZvcmUoJiR2YWx1ZSwgP3N0cmluZyAkZmllbGQgPSBudWxsLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOiBib29sDQoJew0KCQkvLyBjaGVjayB2YWx1ZXMNCgkJaWYgKFN0cmluZ0hlbHBlcjo6Y2hlY2soJHZhbHVlKSB8fCBBcnJheUhlbHBlcjo6Y2hlY2soJHZhbHVlLCB0cnVlKSAgfHwgT2JqZWN0SGVscGVyOjpjaGVjaygkdmFsdWUpIHx8IGlzX251bWVyaWMoJHZhbHVlKSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gY2hlY2sgaWYgd2UgYWxsb3cgZW1wdHkNCgkJZWxzZWlmICgkdGhpcy0+Z2V0QWxsb3dFbXB0eSgpICYmIGVtcHR5KCR2YWx1ZSkpDQoJCXsNCgkJCXJldHVybiB0cnVlOw0KCQl9DQoJCS8vIHJlbW92ZSBlbXB0eSB2YWx1ZXMNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIFZhbGlkYXRlIGFmdGVyIHRoZSB2YWx1ZSBpcyBtb2RlbGxlZA0KCSAqDQoJICogQHBhcmFtICAgbWl4ZWQgICAgICAgICAkdmFsdWUgICBUaGUgZmllbGQgdmFsdWUNCgkgKiBAcGFyYW0gICBzdHJpbmd8bnVsbCAgICRmaWVsZCAgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZ3xudWxsICAgJHRhYmxlICAgVGhlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlQWZ0ZXIoJiR2YWx1ZSwgP3N0cmluZyAkZmllbGQgPSBudWxsLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpOiBib29sDQoJew0KCQkvLyBvbmx5IHN0cmluZ3Mgb3IgbnVtYmVycyBhbGxvd2VkDQoJCWlmIChTdHJpbmdIZWxwZXI6OmNoZWNrKCR2YWx1ZSkgfHwgaXNfbnVtZXJpYygkdmFsdWUpKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQkvLyBjaGVjayBpZiB3ZSBhbGxvdyBlbXB0eQ0KCQllbHNlaWYgKCR0aGlzLT5nZXRBbGxvd0VtcHR5KCkgJiYgZW1wdHkoJHZhbHVlKSkNCgkJew0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCgkJLy8gcmVtb3ZlIGVtcHR5IHZhbHVlcw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ==', '{}', '{}', '', 1, '2023-04-01 02:49:38', 32, 0, 1), (383, '7179fde6-1e51-4b51-8545-7ca18f74a0f4', 'VDM.Interfaces.Database.UpdateInterface', 'UpdateInterface', 'interface', 'Database Update Interface\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '{\"0\":\"ac77cee7-7018-4496-a453-9757623e3849\",\"1\":\"78931d43-9fb9-4cc1-a2ca-b3e189ef842e\"}', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Database.UpdateInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFVwZGF0ZSByb3dzIGluIHRoZSBkYXRhYmFzZSAod2l0aCByZW1hcHBpbmcgYW5kIGZpbHRlcmluZyBjb2x1bW5zIG9wdGlvbikNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRkYXRhICAgICAgRGF0YXNldCB0byB1cGRhdGUgaW4gZGF0YWJhc2UgW2FycmF5IG9mIGFycmF5cyAoa2V5ID0+IHZhbHVlKV0NCgkgKiBAcGFyYW0gICBzdHJpbmcgICAka2V5ICAgICAgIERhdGFzZXQga2V5IGNvbHVtbiB0byB1c2UgaW4gdXBkYXRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgRGF0YWJhc2UNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyB1cGRhdGVkDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbHVtbnMgICBEYXRhIGNvbHVtbnMgZm9yIHJlbWFwcGluZyBhbmQgZmlsdGVyaW5nDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjANCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHJvd3MoYXJyYXkgJGRhdGEsIHN0cmluZyAka2V5LCBzdHJpbmcgJHRhYmxlLCBhcnJheSAkY29sdW1ucyA9IFtdKTogYm9vbDsNCg0KCS8qKg0KCSAqIFVwZGF0ZSBpdGVtcyBpbiB0aGUgZGF0YWJhc2UgKHdpdGggcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcgY29sdW1ucyBvcHRpb24pDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgIERhdGEgdG8gdXBkYXRlZCBpbiBkYXRhYmFzZSAoYXJyYXkgb2Ygb2JqZWN0cykNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAka2V5ICAgICAgIERhdGFzZXQga2V5IGNvbHVtbiB0byB1c2UgaW4gdXBkYXRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgRGF0YWJhc2UNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkdGFibGUgICAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgZGF0YSBpcyBiZWluZyB1cGRhdGUNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkY29sdW1ucyAgIERhdGEgY29sdW1ucyBmb3IgcmVtYXBwaW5nIGFuZCBmaWx0ZXJpbmcNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbXMoYXJyYXkgJGRhdGEsIHN0cmluZyAka2V5LCBzdHJpbmcgJHRhYmxlLCBhcnJheSAkY29sdW1ucyA9IFtdKTogYm9vbDsNCg0KCS8qKg0KCSAqIFVwZGF0ZSByb3cgaW4gdGhlIGRhdGFiYXNlDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgICAkZGF0YSAgICAgIERhdGFzZXQgdG8gdXBkYXRlIGluIGRhdGFiYXNlIChrZXkgPT4gdmFsdWUpDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGtleSAgICAgICBEYXRhc2V0IGtleSBjb2x1bW4gdG8gdXNlIGluIHVwZGF0aW5nIHRoZSB2YWx1ZXMgaW4gdGhlIERhdGFiYXNlDQoJICogQHBhcmFtICAgc3RyaW5nICAgJHRhYmxlICAgICBUaGUgdGFibGUgd2hlcmUgdGhlIGRhdGEgaXMgYmVpbmcgdXBkYXRlZA0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAgIDMuMi4wDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiByb3coYXJyYXkgJGRhdGEsIHN0cmluZyAka2V5LCBzdHJpbmcgJHRhYmxlKTogYm9vbDsNCg0KCS8qKg0KCSAqIFVwZGF0ZSBpdGVtIGluIHRoZSBkYXRhYmFzZQ0KCSAqDQoJICogQHBhcmFtICAgb2JqZWN0ICAgJGRhdGEgICAgICBEYXRhc2V0IHRvIHVwZGF0ZSBpbiBkYXRhYmFzZSAoa2V5ID0+IHZhbHVlKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICRrZXkgICAgICAgRGF0YXNldCBrZXkgY29sdW1uIHRvIHVzZSBpbiB1cGRhdGluZyB0aGUgdmFsdWVzIGluIHRoZSBEYXRhYmFzZQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICR0YWJsZSAgICAgVGhlIHRhYmxlIHdoZXJlIHRoZSBkYXRhIGlzIGJlaW5nIHVwZGF0ZWQNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMA0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShvYmplY3QgJGRhdGEsIHN0cmluZyAka2V5LCBzdHJpbmcgJHRhYmxlKTogYm9vbDsNCg0KCS8qKg0KCSAqIFVwZGF0ZSBhIHNpbmdsZSBjb2x1bW4gdmFsdWUgZm9yIGFsbCByb3dzIGluIHRoZSB0YWJsZQ0KCSAqDQoJICogQHBhcmFtICAgbWl4ZWQgICAkdmFsdWUgICBUaGUgdmFsdWUgdG8gYXNzaWduIHRvIHRoZSBjb2x1bW4NCgkgKiBAcGFyYW0gICBzdHJpbmcgICRrZXkgICAgIERhdGFzZXQga2V5IGNvbHVtbiB0byB1c2UgaW4gdXBkYXRpbmcgdGhlIHZhbHVlcyBpbiB0aGUgRGF0YWJhc2UNCgkgKiBAcGFyYW0gICBzdHJpbmcgICR0YWJsZSAgIFRoZSB0YWJsZSB3aGVyZSB0aGUgdXBkYXRlIHNob3VsZCBiZSBhcHBsaWVkDQoJICoNCgkgKiBAcmV0dXJuICBib29sICBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUNCgkgKiBAc2luY2UgICA1LjEuMQ0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBjb2x1bW4obWl4ZWQgJHZhbHVlLCBzdHJpbmcgJGtleSwgc3RyaW5nICR0YWJsZSk6IGJvb2w7', '{}', '{}', '', 1, '2023-04-01 19:54:56', 18, 0, 1), @@ -2204,7 +2207,7 @@ INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `t (748, '8f83fb79-f92b-4f1f-952b-325f6c22d11e', 'VDM.Data.Action.Update', 'Update', 'class', 'Data Update\r\n\r\n@since 3.2.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"68a41264-64c0-441a-a3d8-8a5e557b1883\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Data.Action.Update', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"8aef58c1-3f70-4bd4-b9e4-3f29fcd41cff\",\"as\":\"Model\"},\"use_selection1\":{\"use\":\"7179fde6-1e51-4b51-8545-7ca18f74a0f4\",\"as\":\"Database\"}}', 'CS8qKg0KCSAqIE1vZGVsDQoJICoNCgkgKiBAdmFyICAgIE1vZGVsDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHJvdGVjdGVkIE1vZGVsICRtb2RlbDsNCg0KCS8qKg0KCSAqIERhdGFiYXNlDQoJICoNCgkgKiBAdmFyICAgIERhdGFiYXNlDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHJvdGVjdGVkIERhdGFiYXNlICRkYXRhYmFzZTsNCg0KCS8qKg0KCSAqIFRhYmxlIE5hbWUNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlIDMuMi4xDQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkdGFibGU7DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3Rvcg0KCSAqDQoJICogQHBhcmFtIE1vZGVsICAgICAgICRtb2RlbCAgICAgICBUaGUgc2V0IG1vZGVsIG9iamVjdC4NCgkgKiBAcGFyYW0gRGF0YWJhc2UgICAgJGRhdGFiYXNlICAgIFRoZSB1cGRhdGUgZGF0YWJhc2Ugb2JqZWN0Lg0KCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGFibGUgICAgICAgVGhlIHRhYmxlIG5hbWUuDQoJICoNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoTW9kZWwgJG1vZGVsLCBEYXRhYmFzZSAkZGF0YWJhc2UsID9zdHJpbmcgJHRhYmxlID0gbnVsbCkNCgl7DQoJCSR0aGlzLT5tb2RlbCA9ICRtb2RlbDsNCgkJJHRoaXMtPmRhdGFiYXNlID0gJGRhdGFiYXNlOw0KCQlpZiAoJHRhYmxlICE9PSBudWxsKQ0KCQl7DQoJCQkkdGhpcy0+dGFibGUgPSAkdGFibGU7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBTZXQgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHRhYmxlIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSBhY3RpdmUNCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0YWJsZSg/c3RyaW5nICR0YWJsZSk6IHNlbGYNCgl7DQoJCWlmICgkdGFibGUgIT09IG51bGwpDQoJCXsNCgkJCSR0aGlzLT50YWJsZSA9ICR0YWJsZTsNCgkJfQ0KDQoJCXJldHVybiAkdGhpczsNCgl9DQoNCgkvKioNCgkgKiBVcGRhdGUgYSB2YWx1ZSB0byBhIGdpdmVuIHRhYmxlDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPnZhbHVlKFZhbHVlLCAndmFsdWVfa2V5JywgJ0dVSUQnKTsNCgkgKg0KCSAqIEBwYXJhbSAgIG1peGVkICAgICAkdmFsdWUgICAgICBUaGUgZmllbGQgdmFsdWUNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgJGZpZWxkICAgICAgVGhlIGZpZWxkIGtleQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAka2V5VmFsdWUgICBUaGUga2V5IHZhbHVlDQoJICogQHBhcmFtICAgc3RyaW5nICAgICRrZXkgICAgICAgIFRoZSBrZXkgbmFtZQ0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB2YWx1ZSgkdmFsdWUsIHN0cmluZyAkZmllbGQsIHN0cmluZyAka2V5VmFsdWUsIHN0cmluZyAka2V5ID0gJ2d1aWQnKTogYm9vbA0KCXsNCgkJLy8gYnVpbGQgdGhlIGFycmF5DQoJCSRpdGVtID0gW107DQoJCSRpdGVtWyRrZXldID0gJGtleVZhbHVlOw0KCQkkaXRlbVskZmllbGRdID0gJHZhbHVlOw0KDQoJCS8vIFVwZGF0ZSB0aGUgY29sdW1uIG9mIHRoaXMgdGFibGUgdXNpbmcgJGtleSBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCXJldHVybiAkdGhpcy0+cm93KCRpdGVtLCAka2V5KTsNCgl9DQoNCgkvKioNCgkgKiBVcGRhdGUgc2luZ2xlIHJvdyB3aXRoIG11bHRpcGxlIHZhbHVlcyB0byBhIGdpdmVuIHRhYmxlDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPml0ZW0oQXJyYXkpOw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGl0ZW0gICBUaGUgaXRlbSB0byBzYXZlDQoJICogQHBhcmFtICAgc3RyaW5nICAgJGtleSAgICBUaGUga2V5IG5hbWUNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gcm93KGFycmF5ICRpdGVtLCBzdHJpbmcgJGtleSA9ICdndWlkJyk6IGJvb2wNCgl7DQoJCS8vIGNoZWNrIGlmIG9iamVjdCBjb3VsZCBiZSBtb2RlbGxlZA0KCQlpZiAoKCRpdGVtID0gJHRoaXMtPm1vZGVsLT5yb3coJGl0ZW0sICR0aGlzLT5nZXRUYWJsZSgpKSkgIT09IG51bGwpDQoJCXsNCgkJCS8vIFVwZGF0ZSB0aGUgY29sdW1uIG9mIHRoaXMgdGFibGUgdXNpbmcgJGtleSBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQlyZXR1cm4gJHRoaXMtPmRhdGFiYXNlLT5yb3coJGl0ZW0sICRrZXksICR0aGlzLT5nZXRUYWJsZSgpKTsNCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogVXBkYXRlIG11bHRpcGxlIHJvd3MgdG8gYSBnaXZlbiB0YWJsZQ0KCSAqICAgICAgICAgIEV4YW1wbGU6ICR0aGlzLT5pdGVtcyhBcnJheSk7DQoJICoNCgkgKiBAcGFyYW0gICBhcnJheXxudWxsICAgJGl0ZW1zICBUaGUgaXRlbXMgdXBkYXRlZCBpbiBkYXRhYmFzZSAoYXJyYXkgb2YgYXJyYXlzKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAka2V5ICAgIFRoZSBrZXkgbmFtZQ0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiByb3dzKD9hcnJheSAkaXRlbXMsIHN0cmluZyAka2V5ID0gJ2d1aWQnKTogYm9vbA0KCXsNCgkJLy8gY2hlY2sgaWYgb2JqZWN0IGNvdWxkIGJlIG1vZGVsbGVkDQoJCWlmICgoJGl0ZW1zID0gJHRoaXMtPm1vZGVsLT5yb3dzKCRpdGVtcywgJHRoaXMtPmdldFRhYmxlKCkpKSAhPT0gbnVsbCkNCgkJew0KCQkJLy8gVXBkYXRlIHRoZSBjb2x1bW4gb2YgdGhpcyB0YWJsZSB1c2luZyAka2V5IGFzIHRoZSBwcmltYXJ5IGtleS4NCgkJCXJldHVybiAkdGhpcy0+ZGF0YWJhc2UtPnJvd3MoJGl0ZW1zLCAka2V5LCAkdGhpcy0+Z2V0VGFibGUoKSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIFVwZGF0ZSBzaW5nbGUgaXRlbSB3aXRoIG11bHRpcGxlIHZhbHVlcyB0byBhIGdpdmVuIHRhYmxlDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPml0ZW0oT2JqZWN0KTsNCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgICAkaXRlbSAgIFRoZSBpdGVtIHRvIHNhdmUNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAgJGtleSAgICBUaGUga2V5IG5hbWUNCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbShvYmplY3QgJGl0ZW0sIHN0cmluZyAka2V5ID0gJ2d1aWQnKTogYm9vbA0KCXsNCgkJLy8gY2hlY2sgaWYgb2JqZWN0IGNvdWxkIGJlIG1vZGVsbGVkDQoJCWlmICgoJGl0ZW0gPSAkdGhpcy0+bW9kZWwtPml0ZW0oJGl0ZW0sICR0aGlzLT5nZXRUYWJsZSgpKSkgIT09IG51bGwpDQoJCXsNCgkJCS8vIFVwZGF0ZSB0aGUgY29sdW1uIG9mIHRoaXMgdGFibGUgdXNpbmcgJGtleSBhcyB0aGUgcHJpbWFyeSBrZXkuDQoJCQlyZXR1cm4gJHRoaXMtPmRhdGFiYXNlLT5pdGVtKCRpdGVtLCAka2V5LCAkdGhpcy0+Z2V0VGFibGUoKSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIFVwZGF0ZSBtdWx0aXBsZSBpdGVtcyB0byBhIGdpdmVuIHRhYmxlDQoJICogICAgICAgICAgRXhhbXBsZTogJHRoaXMtPml0ZW1zKEFycmF5KTsNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5fG51bGwgICAkaXRlbXMgIFRoZSBpdGVtcyB1cGRhdGVkIGluIGRhdGFiYXNlIChhcnJheSBvZiBvYmplY3RzKQ0KCSAqIEBwYXJhbSAgIHN0cmluZyAgICAgICAka2V5ICAgIFRoZSBrZXkgbmFtZQ0KCSAqDQoJICogQHJldHVybiAgYm9vbA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBpdGVtcyg/YXJyYXkgJGl0ZW1zLCBzdHJpbmcgJGtleSA9ICdndWlkJyk6IGJvb2wNCgl7DQoJCS8vIGNoZWNrIGlmIG9iamVjdCBjb3VsZCBiZSBtb2RlbGxlZA0KCQlpZiAoKCRpdGVtcyA9ICR0aGlzLT5tb2RlbC0+aXRlbXMoJGl0ZW1zLCAkdGhpcy0+Z2V0VGFibGUoKSkpICE9PSBudWxsKQ0KCQl7DQoJCQkvLyBVcGRhdGUgdGhlIGNvbHVtbiBvZiB0aGlzIHRhYmxlIHVzaW5nICRrZXkgYXMgdGhlIHByaW1hcnkga2V5Lg0KCQkJcmV0dXJuICR0aGlzLT5kYXRhYmFzZS0+aXRlbXMoJGl0ZW1zLCAka2V5LCAkdGhpcy0+Z2V0VGFibGUoKSk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRUYWJsZSgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+dGFibGU7DQoJfQ==', '{}', '{}', NULL, 1, '2024-06-19 10:37:43', 11, 0, 1), (749, '3fc72954-a303-4cac-b53c-554be38b85e7', 'VDM.Data.Action.Delete', 'Delete', 'class', 'Data Delete\r\n\r\n@since 3.2.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"d8f9ba53-c490-4e8b-8e9f-6757224e069c\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Data.Action.Delete', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"9c3aa650-e536-4eea-a2d4-73cc3e184aa9\",\"as\":\"Database\"}}', 'CS8qKg0KCSAqIFRoZSBEZWxldGUgQ2xhc3MuDQoJICoNCgkgKiBAdmFyICAgRGF0YWJhc2UNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwcm90ZWN0ZWQgRGF0YWJhc2UgJGRhdGFiYXNlOw0KDQoJLyoqDQoJICogVGFibGUgTmFtZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICR0YWJsZTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHBhcmFtIERhdGFiYXNlICAgJGRhdGFiYXNlICAgVGhlIERlbGV0ZSBDbGFzcy4NCgkgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHRhYmxlICAgICAgIFRoZSB0YWJsZSBuYW1lLg0KCSAqDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KERhdGFiYXNlICRkYXRhYmFzZSwgP3N0cmluZyAkdGFibGUgPSBudWxsKQ0KCXsNCgkJJHRoaXMtPmRhdGFiYXNlID0gJGRhdGFiYXNlOw0KCQlpZiAoJHRhYmxlICE9PSBudWxsKQ0KCQl7DQoJCQkkdGhpcy0+dGFibGUgPSAkdGFibGU7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBTZXQgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHRhYmxlIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSBhY3RpdmUNCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0YWJsZSg/c3RyaW5nICR0YWJsZSk6IHNlbGYNCgl7DQoJCWlmICgkdGFibGUgIT09IG51bGwpDQoJCXsNCgkJCSR0aGlzLT50YWJsZSA9ICR0YWJsZTsNCgkJfQ0KDQoJCXJldHVybiAkdGhpczsNCgl9DQoNCgkvKioNCgkgKiBEZWxldGUgYWxsIGl0ZW1zIGluIHRoZSBkYXRhYmFzZSB0aGF0IG1hdGNoIHRoZXNlIGNvbmRpdGlvbnMNCgkgKg0KCSAqIEBwYXJhbSAgIGFycmF5ICAgICRjb25kaXRpb25zICAgIENvbmRpdGlvbnMgYnkgd2hpY2ggdG8gZGVsZXRlIHRoZSBkYXRhIGluIGRhdGFiYXNlIFthcnJheSBvZiBhcnJheXMgKGtleSA9PiB2YWx1ZSldDQoJICoNCgkgKiBAcmV0dXJuICBib29sDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIGl0ZW1zKGFycmF5ICRjb25kaXRpb25zKTogYm9vbA0KCXsNCgkJcmV0dXJuICR0aGlzLT5kYXRhYmFzZS0+aXRlbXMoJGNvbmRpdGlvbnMsICR0aGlzLT5nZXRUYWJsZSgpKTsNCgl9DQoNCgkvKioNCgkgKiBUcnVuY2F0ZSBhIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICB2b2lkDQoJICogQHNpbmNlICAgMy4yLjINCgkgKiovDQoJcHVibGljIGZ1bmN0aW9uIHRydW5jYXRlKCk6IHZvaWQNCgl7DQoJCSR0aGlzLT5kYXRhYmFzZS0+dHJ1bmNhdGUoJHRoaXMtPmdldFRhYmxlKCkpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEByZXR1cm4gIHN0cmluZw0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRUYWJsZSgpOiBzdHJpbmcNCgl7DQoJCXJldHVybiAkdGhpcy0+dGFibGU7DQoJfQ==', '{}', '{}', NULL, 1, '2024-06-19 17:58:06', 11, 0, 1), (750, 'd8f9ba53-c490-4e8b-8e9f-6757224e069c', 'VDM.Interfaces.Data.DeleteInterface', 'DeleteInterface', 'interface', 'Data Delete\r\n\r\n@since 3.2.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Data.DeleteInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFNldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmd8bnVsbCAkdGFibGUgVGhlIHRhYmxlIHRoYXQgc2hvdWxkIGJlIGFjdGl2ZQ0KCSAqDQoJICogQHJldHVybiBzZWxmDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHRhYmxlKD9zdHJpbmcgJHRhYmxlKTogc2VsZjsNCg0KCS8qKg0KCSAqIERlbGV0ZSBhbGwgaXRlbXMgaW4gdGhlIGRhdGFiYXNlIHRoYXQgbWF0Y2ggdGhlc2UgY29uZGl0aW9ucw0KCSAqDQoJICogQHBhcmFtICAgYXJyYXkgICAgJGNvbmRpdGlvbnMgICAgQ29uZGl0aW9ucyBieSB3aGljaCB0byBkZWxldGUgdGhlIGRhdGEgaW4gZGF0YWJhc2UgW2FycmF5IG9mIGFycmF5cyAoa2V5ID0+IHZhbHVlKV0NCgkgKg0KCSAqIEByZXR1cm4gIGJvb2wNCgkgKiBAc2luY2UgICAzLjIuMg0KCSAqKi8NCglwdWJsaWMgZnVuY3Rpb24gaXRlbXMoYXJyYXkgJGNvbmRpdGlvbnMpOiBib29sOw0KDQoJLyoqDQoJICogVHJ1bmNhdGUgYSB0YWJsZQ0KCSAqDQoJICogQHBhcmFtICAgc3RyaW5nfG51bGwgICAkdGFibGUgICAgVGhlIHRhYmxlIHRoYXQgc2hvdWxkIGJlIHRydW5jYXRlZA0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAgIDMuMi4yDQoJICoqLw0KCXB1YmxpYyBmdW5jdGlvbiB0cnVuY2F0ZSgpOiB2b2lkOw0KDQoJLyoqDQoJICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFRhYmxlKCk6IHN0cmluZzs=', '{}', '{}', NULL, 1, '2024-06-19 18:11:57', 6, 0, 1), -(753, '21bca8a4-5b28-41c4-843e-8097f0ba7cca', 'VDM.Data.Items', 'Items', 'final class', 'Data Items\r\n\r\n@since 3.2.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, 'AbstractionModel', '', '', '{\"0\":\"7212e4db-371f-4cfd-8122-32e9bb100d83\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Data.Items', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"c548640c-a461-4424-9ac5-8dfb5ed06d8d\",\"as\":\"Load\"},\"use_selection1\":{\"use\":\"03bbc8d5-86e8-4d2f-ae5f-0d44a4f7af13\",\"as\":\"Insert\"},\"use_selection2\":{\"use\":\"68a41264-64c0-441a-a3d8-8a5e557b1883\",\"as\":\"Update\"},\"use_selection3\":{\"use\":\"d8f9ba53-c490-4e8b-8e9f-6757224e069c\",\"as\":\"Delete\"},\"use_selection4\":{\"use\":\"2ad31f74-f579-499d-b98b-c4f54fd615dd\",\"as\":\"Database\"}}', 'CS8qKg0KCSAqIFRoZSBMb2FkSW50ZXJmYWNlIENsYXNzLg0KCSAqDQoJICogQHZhciAgIExvYWQNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwcm90ZWN0ZWQgTG9hZCAkbG9hZDsNCg0KCS8qKg0KCSAqIFRoZSBJbnNlcnRJbnRlcmZhY2UgQ2xhc3MuDQoJICoNCgkgKiBAdmFyICAgSW5zZXJ0DQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHJvdGVjdGVkIEluc2VydCAkaW5zZXJ0Ow0KDQoJLyoqDQoJICogVGhlIFVwZGF0ZUludGVyZmFjZSBDbGFzcy4NCgkgKg0KCSAqIEB2YXIgICBVcGRhdGUNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwcm90ZWN0ZWQgVXBkYXRlICR1cGRhdGU7DQoNCgkvKioNCgkgKiBUaGUgRGVsZXRlSW50ZXJmYWNlIENsYXNzLg0KCSAqDQoJICogQHZhciAgIERlbGV0ZQ0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByb3RlY3RlZCBEZWxldGUgJGRlbGV0ZTsNCg0KCS8qKg0KCSAqIFRoZSBMb2FkIENsYXNzLg0KCSAqDQoJICogQHZhciAgIERhdGFiYXNlDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHJvdGVjdGVkIERhdGFiYXNlICRkYXRhYmFzZTsNCg0KCS8qKg0KCSAqIFRhYmxlIE5hbWUNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlIDMuMi4xDQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkdGFibGU7DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3Rvci4NCgkgKg0KCSAqIEBwYXJhbSBMb2FkICAgICAgICAkbG9hZCAgICAgICBUaGUgTG9hZEludGVyZmFjZSBDbGFzcy4NCgkgKiBAcGFyYW0gSW5zZXJ0ICAgICAgJGluc2VydCAgICAgVGhlIEluc2VydEludGVyZmFjZSBDbGFzcy4NCgkgKiBAcGFyYW0gVXBkYXRlICAgICAgJHVwZGF0ZSAgICAgVGhlIFVwZGF0ZUludGVyZmFjZSBDbGFzcy4NCgkgKiBAcGFyYW0gRGVsZXRlICAgICAgJGRlbGV0ZSAgICAgVGhlIERlbGV0ZUludGVyZmFjZSBDbGFzcy4NCgkgKiBAcGFyYW0gRGF0YWJhc2UgICAgJGRhdGFiYXNlICAgVGhlIERhdGFiYXNlIExvYWQgQ2xhc3MuDQoJICogQHBhcmFtIHN0cmluZ3xudWxsICR0YWJsZSAgICAgIFRoZSB0YWJsZSBuYW1lLg0KCSAqDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KExvYWQgJGxvYWQsIEluc2VydCAkaW5zZXJ0LCBVcGRhdGUgJHVwZGF0ZSwgRGVsZXRlICRkZWxldGUsDQoJCURhdGFiYXNlICRkYXRhYmFzZSwgP3N0cmluZyAkdGFibGUgPSBudWxsKQ0KCXsNCgkJJHRoaXMtPmxvYWQgPSAkbG9hZDsNCgkJJHRoaXMtPmluc2VydCA9ICRpbnNlcnQ7DQoJCSR0aGlzLT51cGRhdGUgPSAkdXBkYXRlOw0KCQkkdGhpcy0+ZGVsZXRlID0gJGRlbGV0ZTsNCgkJJHRoaXMtPmRhdGFiYXNlID0gJGRhdGFiYXNlOw0KCQlpZiAoJHRhYmxlICE9PSBudWxsKQ0KCQl7DQoJCQkkdGhpcy0+dGFibGUgPSAkdGFibGU7DQoJCX0NCgl9DQoNCgkvKioNCgkgKiBTZXQgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYmxlDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICR0YWJsZSBUaGUgdGFibGUgdGhhdCBzaG91bGQgYmUgYWN0aXZlDQoJICoNCgkgKiBAcmV0dXJuIHNlbGYNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdGFibGUoc3RyaW5nICR0YWJsZSk6IHNlbGYNCgl7DQoJCSR0aGlzLT50YWJsZSA9ICR0YWJsZTsNCg0KCQlyZXR1cm4gJHRoaXM7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGxpc3Qgb2YgaXRlbXMNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgICAgJHZhbHVlcyAgICBUaGUgaWRzIG9mIHRoZSBpdGVtcw0KCSAqIEBwYXJhbSBzdHJpbmcgICAgJGtleSAgICAgICBUaGUga2V5IG9mIHRoZSB2YWx1ZXMNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBUaGUgaXRlbSBvYmplY3Qgb3IgbnVsbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXQoYXJyYXkgJHZhbHVlcywgc3RyaW5nICRrZXkgPSAnZ3VpZCcpOiA/YXJyYXkNCgl7DQoJCXJldHVybiAkdGhpcy0+bG9hZC0+dGFibGUoJHRoaXMtPmdldFRhYmxlKCkpLT5pdGVtcyhbDQoJCQkka2V5ID0+IFsNCgkJCQknb3BlcmF0b3InID0+ICdJTicsDQoJCQkJJ3ZhbHVlJyA9PiBhcnJheV92YWx1ZXMoJHZhbHVlcykNCgkJCV0NCgkJXSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSB2YWx1ZXMNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgICR2YWx1ZXMgICAgVGhlIGxpc3Qgb2YgdmFsdWVzICh0byBzZWFyY2ggYnkpLg0KCSAqIEBwYXJhbSBzdHJpbmcgICRrZXkgICAgICAgVGhlIGtleSBvbiB3aGljaCB0aGUgdmFsdWVzIGJlaW5nIHNlYXJjaGVkLg0KCSAqIEBwYXJhbSBzdHJpbmcgICRnZXQgICAgICAgVGhlIGtleSBvZiB0aGUgdmFsdWVzIHdlIHdhbnQgYmFjaw0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsICAgVGhlIGFycmF5IG9mIGZvdW5kIHZhbHVlcy4NCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdmFsdWVzKGFycmF5ICR2YWx1ZXMsIHN0cmluZyAka2V5ID0gJ2d1aWQnLCBzdHJpbmcgJGdldCA9ICdpZCcpOiA/YXJyYXkNCgl7DQoJCS8vIFBlcmZvcm0gdGhlIGRhdGFiYXNlIHF1ZXJ5DQoJCXJldHVybiAkdGhpcy0+bG9hZC0+dGFibGUoJHRoaXMtPmdldFRhYmxlKCkpLT52YWx1ZXMoWw0KCQkJJGtleSA9PiBbDQoJCQkJJ29wZXJhdG9yJyA9PiAnSU4nLA0KCQkJCSd2YWx1ZScgPT4gYXJyYXlfdmFsdWVzKCR2YWx1ZXMpDQoJCQldDQoJCV0sICRnZXQpOw0KCX0NCg0KCS8qKg0KCSAqIFNldCBpdGVtcw0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAgICAkaXRlbXMgIFRoZSBsaXN0IG9mIGl0ZW1zDQoJICogQHBhcmFtIHN0cmluZyAgICAka2V5ICAgIFRoZSBrZXkgb24gd2hpY2ggdGhlIGl0ZW1zIHNob3VsZCBiZSBzZXQNCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXQoYXJyYXkgJGl0ZW1zLCBzdHJpbmcgJGtleSA9ICdndWlkJyk6IGJvb2wNCgl7DQoJCWlmICgoJHNldHMgPSAkdGhpcy0+c29ydCgkaXRlbXMsICRrZXkpKSAhPT0gbnVsbCkNCgkJew0KCQkJZm9yZWFjaCAoJHNldHMgYXMgJGFjdGlvbiA9PiAkaXRlbXMpDQoJCQl7DQoJCQkJJHRoaXMtPnskYWN0aW9ufSgkaXRlbXMsICRrZXkpOw0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogRGVsZXRlIGl0ZW1zDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICAgJHZhbHVlcyAgVGhlIGl0ZW0ga2V5IHZhbHVlDQoJICogQHBhcmFtIHN0cmluZyAgICRrZXkgICAgIFRoZSBpdGVtIGtleQ0KCSAqDQoJICogQHJldHVybiBib29sDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZShhcnJheSAkdmFsdWVzLCBzdHJpbmcgJGtleSA9ICdndWlkJyk6IGJvb2wNCgl7DQoJCXJldHVybiAkdGhpcy0+ZGVsZXRlLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPml0ZW1zKFska2V5ID0+IFsnb3BlcmF0b3InID0+ICdJTicsICd2YWx1ZScgPT4gJHZhbHVlc11dKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0VGFibGUoKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPnRhYmxlOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCBhIGl0ZW0NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgICRpdGVtcyAgVGhlIGl0ZW0NCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaW5zZXJ0KGFycmF5ICRpdGVtcyk6IGJvb2wNCgl7DQoJCXJldHVybiAkdGhpcy0+aW5zZXJ0LT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPnJvd3MoJGl0ZW1zKTsNCgl9DQoNCgkvKioNCgkgKiBVcGRhdGUgYSBpdGVtDQoJICoNCgkgKiBAcGFyYW0gb2JqZWN0ICAgJGl0ZW0gIFRoZSBpdGVtDQoJICogQHBhcmFtIHN0cmluZyAgICRrZXkgICBUaGUgaXRlbSBrZXkNCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gdXBkYXRlKGFycmF5ICRpdGVtcywgc3RyaW5nICRrZXkpOiBib29sDQoJew0KCQlyZXR1cm4gJHRoaXMtPnVwZGF0ZS0+dGFibGUoJHRoaXMtPmdldFRhYmxlKCkpLT5yb3dzKCRpdGVtcywgJGtleSk7DQoJfQ0KDQoJLyoqDQoJICogU29ydCBpdGVtcyBiZXR3ZWVuIGluc2VydCBhbmQgdXBkYXRlLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAkaXRlbXMgVGhlIGxpc3Qgb2YgaXRlbXMuDQoJICogQHBhcmFtIHN0cmluZyAka2V5ICAgVGhlIGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIHNvcnRlZC4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBUaGUgc29ydGVkIHNldHMuDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBzb3J0KGFycmF5ICRpdGVtcywgc3RyaW5nICRrZXkpOiA/YXJyYXkNCgl7DQoJCS8vIEV4dHJhY3QgcmVsZXZhbnQgaXRlbXMgYmFzZWQgb24gdGhlIGtleS4NCgkJJHZhbHVlcyA9ICR0aGlzLT5leHRyYWN0VmFsdWVzKCRpdGVtcywgJGtleSk7DQoJCWlmICgkdmFsdWVzID09PSBudWxsKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KDQoJCSRzZXRzID0gWw0KCQkJJ2luc2VydCcgPT4gW10sDQoJCQkndXBkYXRlJyA9PiBbXQ0KCQldOw0KDQoJCS8vIENoZWNrIGZvciBleGlzdGluZyBpdGVtcy4NCgkJJGV4aXN0aW5nSXRlbXMgPSAkdGhpcy0+ZGF0YWJhc2UtPnZhbHVlcygNCgkJCVsiYS4ka2V5IiA9PiAka2V5XSwNCgkJCVsiYSIgPT4gJHRoaXMtPmdldFRhYmxlKCldLA0KCQkJWyJhLiRrZXkiID0+IFsnb3BlcmF0b3InID0+ICdJTicsICd2YWx1ZScgPT4gJHZhbHVlc11dDQoJCSk7DQoNCgkJaWYgKCRleGlzdGluZ0l0ZW1zICE9PSBudWxsKQ0KCQl7DQoJCQkkc2V0c1sndXBkYXRlJ10gPSAkdGhpcy0+ZXh0cmFjdFNldCgkaXRlbXMsICRleGlzdGluZ0l0ZW1zLCAka2V5KSA/PyBbXTsNCgkJCSRzZXRzWydpbnNlcnQnXSA9ICR0aGlzLT5leHRyYWN0U2V0KCRpdGVtcywgJGV4aXN0aW5nSXRlbXMsICRrZXksIHRydWUpID8/IFtdOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJHNldHNbJ2luc2VydCddID0gJGl0ZW1zOw0KCQl9DQoNCgkJLy8gSWYgZWl0aGVyIHNldCBpcyBlbXB0eSwgcmVtb3ZlIGl0IGZyb20gdGhlIHJlc3VsdC4NCgkJJHNldHMgPSBhcnJheV9maWx0ZXIoJHNldHMpOw0KDQoJCXJldHVybiAhZW1wdHkoJHNldHMpID8gJHNldHMgOiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIEV4dHJhY3RzIHZhbHVlcyBmb3IgYSBnaXZlbiBrZXkgZnJvbSBhbiBhcnJheSBvZiBpdGVtcy4NCgkgKiBJdGVtcyBjYW4gYmUgZWl0aGVyIGFycmF5cyBvciBvYmplY3RzLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRpdGVtcyBBcnJheSBvZiBpdGVtcyAoYXJyYXlzIG9yIG9iamVjdHMpDQoJICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gZXh0cmFjdCB2YWx1ZXMgZm9yDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgRXh0cmFjdGVkIHZhbHVlcw0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gZXh0cmFjdFZhbHVlcyhhcnJheSAkaXRlbXMsIHN0cmluZyAka2V5KTogP2FycmF5DQoJew0KCQkkcmVzdWx0ID0gW107DQoNCgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQl7DQoJCQlpZiAoaXNfYXJyYXkoJGl0ZW0pICYmICFlbXB0eSgkaXRlbVska2V5XSkpDQoJCQl7DQoJCQkJJHJlc3VsdFtdID0gJGl0ZW1bJGtleV07DQoJCQl9DQoJCQllbHNlaWYgKGlzX29iamVjdCgkaXRlbSkgJiYgIWVtcHR5KCRpdGVtLT57JGtleX0pKQ0KCQkJew0KCQkJCSRyZXN1bHRbXSA9ICRpdGVtLT57JGtleX07DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gKCRyZXN1bHQgPT09IFtdKSA/IG51bGwgOiAkcmVzdWx0Ow0KCX0NCg0KCS8qKg0KCSAqIEV4dHJhY3RzIGl0ZW1zIGZyb20gYW4gYXJyYXkgb2YgaXRlbXMgYmFzZWQgb24gYSBzZXQuDQoJICogSXRlbXMgY2FuIGJlIGVpdGhlciBhcnJheXMgb3Igb2JqZWN0cy4NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGl0ZW1zICAgQXJyYXkgb2YgaXRlbXMgKGFycmF5cyBvciBvYmplY3RzKQ0KCSAqIEBwYXJhbSBhcnJheSAgJHNldAkgVGhlIHNldCB0byBtYXRjaCB2YWx1ZXMgYWdhaW5zdA0KCSAqIEBwYXJhbSBzdHJpbmcgJGtleQkgVGhlIGtleSBvZiB0aGUgc2V0IHZhbHVlcw0KCSAqIEBwYXJhbSBib29sICAgJGludmVyc2UgV2hldGhlciB0byBleHRyYWN0IGl0ZW1zIG5vdCBpbiB0aGUgc2V0DQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgRXh0cmFjdGVkIHZhbHVlcw0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gZXh0cmFjdFNldChhcnJheSAkaXRlbXMsIGFycmF5ICRzZXQsIHN0cmluZyAka2V5LCBib29sICRpbnZlcnNlID0gZmFsc2UpOiA/YXJyYXkNCgl7DQoJCSRyZXN1bHQgPSBbXTsNCg0KCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pDQoJCXsNCgkJCSR2YWx1ZSA9IGlzX2FycmF5KCRpdGVtKSA/ICgkaXRlbVska2V5XSA/PyBudWxsKSA6ICgkaXRlbS0+eyRrZXl9ID8/IG51bGwpOw0KDQoJCQlpZiAoJHZhbHVlICE9PSBudWxsKQ0KCQkJew0KCQkJCSRpblNldCA9IGluX2FycmF5KCR2YWx1ZSwgJHNldCk7DQoJCQkJaWYgKCgkaW5TZXQgJiYgISRpbnZlcnNlKSB8fCAoISRpblNldCAmJiAkaW52ZXJzZSkpDQoJCQkJew0KCQkJCQkkcmVzdWx0W10gPSBpc19hcnJheSgkaXRlbSkgPyAkaXRlbSA6IChhcnJheSkgJGl0ZW07IC8vIGNvbnZlcnQgYWxsIHRvIGFycmF5cw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBlbXB0eSgkcmVzdWx0KSA/IG51bGwgOiAkcmVzdWx0Ow0KCX0=', '{}', '{}', NULL, 1, '2024-06-20 08:45:53', 22, 0, 1), +(753, '21bca8a4-5b28-41c4-843e-8097f0ba7cca', 'VDM.Data.Items', 'Items', 'final class', 'Data Items\r\n\r\n@since 3.2.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, 'AbstractionModel', '', '', '{\"0\":\"7212e4db-371f-4cfd-8122-32e9bb100d83\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Data.Items', 0, '{}', '{}', '', '{\"use_selection0\":{\"use\":\"c548640c-a461-4424-9ac5-8dfb5ed06d8d\",\"as\":\"Load\"},\"use_selection1\":{\"use\":\"03bbc8d5-86e8-4d2f-ae5f-0d44a4f7af13\",\"as\":\"Insert\"},\"use_selection2\":{\"use\":\"68a41264-64c0-441a-a3d8-8a5e557b1883\",\"as\":\"Update\"},\"use_selection3\":{\"use\":\"d8f9ba53-c490-4e8b-8e9f-6757224e069c\",\"as\":\"Delete\"},\"use_selection4\":{\"use\":\"2ad31f74-f579-499d-b98b-c4f54fd615dd\",\"as\":\"Database\"},\"use_selection5\":{\"use\":\"5acded67-0e3d-4c6b-a6ea-b533b076de0c\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFRoZSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllci4NCgkgKg0KCSAqIEBzaW5jZSA1LjEuMg0KCSAqLw0KCXVzZSBHdWlkOw0KDQoJLyoqDQoJICogVGhlIExvYWRJbnRlcmZhY2UgQ2xhc3MuDQoJICoNCgkgKiBAdmFyICAgTG9hZA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByb3RlY3RlZCBMb2FkICRsb2FkOw0KDQoJLyoqDQoJICogVGhlIEluc2VydEludGVyZmFjZSBDbGFzcy4NCgkgKg0KCSAqIEB2YXIgICBJbnNlcnQNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwcm90ZWN0ZWQgSW5zZXJ0ICRpbnNlcnQ7DQoNCgkvKioNCgkgKiBUaGUgVXBkYXRlSW50ZXJmYWNlIENsYXNzLg0KCSAqDQoJICogQHZhciAgIFVwZGF0ZQ0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByb3RlY3RlZCBVcGRhdGUgJHVwZGF0ZTsNCg0KCS8qKg0KCSAqIFRoZSBEZWxldGVJbnRlcmZhY2UgQ2xhc3MuDQoJICoNCgkgKiBAdmFyICAgRGVsZXRlDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHJvdGVjdGVkIERlbGV0ZSAkZGVsZXRlOw0KDQoJLyoqDQoJICogVGhlIExvYWQgQ2xhc3MuDQoJICoNCgkgKiBAdmFyICAgRGF0YWJhc2UNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwcm90ZWN0ZWQgRGF0YWJhc2UgJGRhdGFiYXNlOw0KDQoJLyoqDQoJICogVGFibGUgTmFtZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgMy4yLjENCgkgKi8NCglwcm90ZWN0ZWQgc3RyaW5nICR0YWJsZTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHBhcmFtIExvYWQgICAgICAgICRsb2FkICAgICAgIFRoZSBMb2FkSW50ZXJmYWNlIENsYXNzLg0KCSAqIEBwYXJhbSBJbnNlcnQgICAgICAkaW5zZXJ0ICAgICBUaGUgSW5zZXJ0SW50ZXJmYWNlIENsYXNzLg0KCSAqIEBwYXJhbSBVcGRhdGUgICAgICAkdXBkYXRlICAgICBUaGUgVXBkYXRlSW50ZXJmYWNlIENsYXNzLg0KCSAqIEBwYXJhbSBEZWxldGUgICAgICAkZGVsZXRlICAgICBUaGUgRGVsZXRlSW50ZXJmYWNlIENsYXNzLg0KCSAqIEBwYXJhbSBEYXRhYmFzZSAgICAkZGF0YWJhc2UgICBUaGUgRGF0YWJhc2UgTG9hZCBDbGFzcy4NCgkgKiBAcGFyYW0gc3RyaW5nfG51bGwgJHRhYmxlICAgICAgVGhlIHRhYmxlIG5hbWUuDQoJICoNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoTG9hZCAkbG9hZCwgSW5zZXJ0ICRpbnNlcnQsIFVwZGF0ZSAkdXBkYXRlLCBEZWxldGUgJGRlbGV0ZSwNCgkJRGF0YWJhc2UgJGRhdGFiYXNlLCA/c3RyaW5nICR0YWJsZSA9IG51bGwpDQoJew0KCQkkdGhpcy0+bG9hZCA9ICRsb2FkOw0KCQkkdGhpcy0+aW5zZXJ0ID0gJGluc2VydDsNCgkJJHRoaXMtPnVwZGF0ZSA9ICR1cGRhdGU7DQoJCSR0aGlzLT5kZWxldGUgPSAkZGVsZXRlOw0KCQkkdGhpcy0+ZGF0YWJhc2UgPSAkZGF0YWJhc2U7DQoJCWlmICgkdGFibGUgIT09IG51bGwpDQoJCXsNCgkJCSR0aGlzLT50YWJsZSA9ICR0YWJsZTsNCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIFNldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSBhY3RpdmUNCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0YWJsZShzdHJpbmcgJHRhYmxlKTogc2VsZg0KCXsNCgkJJHRoaXMtPnRhYmxlID0gJHRhYmxlOw0KDQoJCXJldHVybiAkdGhpczsNCgl9DQoNCgkvKioNCgkgKiBHZXQgbGlzdCBvZiBpdGVtcw0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAgICAkdmFsdWVzICAgIFRoZSBpZHMgb2YgdGhlIGl0ZW1zDQoJICogQHBhcmFtIHN0cmluZyAgICAka2V5ICAgICAgIFRoZSBrZXkgb2YgdGhlIHZhbHVlcw0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsIFRoZSBhcnJheSBvZiBpdGVtIG9iamVjdHMgb3IgbnVsbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXQoYXJyYXkgJHZhbHVlcywgc3RyaW5nICRrZXkgPSAnZ3VpZCcpOiA/YXJyYXkNCgl7DQoJCXJldHVybiAkdGhpcy0+bG9hZC0+dGFibGUoJHRoaXMtPmdldFRhYmxlKCkpLT5pdGVtcyhbDQoJCQkka2V5ID0+IFsNCgkJCQknb3BlcmF0b3InID0+ICdJTicsDQoJCQkJJ3ZhbHVlJyA9PiBhcnJheV92YWx1ZXMoJHZhbHVlcykNCgkJCV0NCgkJXSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSB2YWx1ZXMNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgICR2YWx1ZXMgICAgVGhlIGxpc3Qgb2YgdmFsdWVzICh0byBzZWFyY2ggYnkpLg0KCSAqIEBwYXJhbSBzdHJpbmcgICRrZXkgICAgICAgVGhlIGtleSBvbiB3aGljaCB0aGUgdmFsdWVzIGJlaW5nIHNlYXJjaGVkLg0KCSAqIEBwYXJhbSBzdHJpbmcgICRnZXQgICAgICAgVGhlIGtleSBvZiB0aGUgdmFsdWVzIHdlIHdhbnQgYmFjaw0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsICAgVGhlIGFycmF5IG9mIGZvdW5kIHZhbHVlcy4NCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdmFsdWVzKGFycmF5ICR2YWx1ZXMsIHN0cmluZyAka2V5ID0gJ2d1aWQnLCBzdHJpbmcgJGdldCA9ICdpZCcpOiA/YXJyYXkNCgl7DQoJCS8vIFBlcmZvcm0gdGhlIGRhdGFiYXNlIHF1ZXJ5DQoJCXJldHVybiAkdGhpcy0+bG9hZC0+dGFibGUoJHRoaXMtPmdldFRhYmxlKCkpLT52YWx1ZXMoWw0KCQkJJGtleSA9PiBbDQoJCQkJJ29wZXJhdG9yJyA9PiAnSU4nLA0KCQkJCSd2YWx1ZScgPT4gYXJyYXlfdmFsdWVzKCR2YWx1ZXMpDQoJCQldDQoJCV0sICRnZXQpOw0KCX0NCg0KCS8qKg0KCSAqIFNldCBpdGVtcw0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAgICAkaXRlbXMgIFRoZSBsaXN0IG9mIGl0ZW1zDQoJICogQHBhcmFtIHN0cmluZyAgICAka2V5ICAgIFRoZSBrZXkgb24gd2hpY2ggdGhlIGl0ZW1zIHNob3VsZCBiZSBzZXQNCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBzZXQoYXJyYXkgJGl0ZW1zLCBzdHJpbmcgJGtleSA9ICdndWlkJyk6IGJvb2wNCgl7DQoJCWlmICgoJHNldHMgPSAkdGhpcy0+c29ydCgkaXRlbXMsICRrZXkpKSAhPT0gbnVsbCkNCgkJew0KCQkJZm9yZWFjaCAoJHNldHMgYXMgJGFjdGlvbiA9PiAkaXRlbXMpDQoJCQl7DQoJCQkJJHRoaXMtPnskYWN0aW9ufSgkaXRlbXMsICRrZXkpOw0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0NCg0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KDQoJLyoqDQoJICogRGVsZXRlIGl0ZW1zDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICAgJHZhbHVlcyAgVGhlIGl0ZW0ga2V5IHZhbHVlDQoJICogQHBhcmFtIHN0cmluZyAgICRrZXkgICAgIFRoZSBpdGVtIGtleQ0KCSAqDQoJICogQHJldHVybiBib29sDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZShhcnJheSAkdmFsdWVzLCBzdHJpbmcgJGtleSA9ICdndWlkJyk6IGJvb2wNCgl7DQoJCXJldHVybiAkdGhpcy0+ZGVsZXRlLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPml0ZW1zKFska2V5ID0+IFsnb3BlcmF0b3InID0+ICdJTicsICd2YWx1ZScgPT4gJHZhbHVlc11dKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgdGhlIGN1cnJlbnQgYWN0aXZlIHRhYmxlDQoJICoNCgkgKiBAcmV0dXJuICBzdHJpbmcNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0VGFibGUoKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPnRhYmxlOw0KCX0NCg0KCS8qKg0KCSAqIEluc2VydCBhIGl0ZW0NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgICRpdGVtcyAgVGhlIGl0ZW0NCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gaW5zZXJ0KGFycmF5ICRpdGVtcyk6IGJvb2wNCgl7DQoJCXJldHVybiAkdGhpcy0+aW5zZXJ0LT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPnJvd3MoJGl0ZW1zKTsNCgl9DQoNCgkvKioNCgkgKiBVcGRhdGUgYSBpdGVtDQoJICoNCgkgKiBAcGFyYW0gb2JqZWN0ICAgJGl0ZW0gIFRoZSBpdGVtDQoJICogQHBhcmFtIHN0cmluZyAgICRrZXkgICBUaGUgaXRlbSBrZXkNCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gdXBkYXRlKGFycmF5ICRpdGVtcywgc3RyaW5nICRrZXkpOiBib29sDQoJew0KCQlyZXR1cm4gJHRoaXMtPnVwZGF0ZS0+dGFibGUoJHRoaXMtPmdldFRhYmxlKCkpLT5yb3dzKCRpdGVtcywgJGtleSk7DQoJfQ0KDQoJLyoqDQoJICogU29ydCBpdGVtcyBiZXR3ZWVuIGluc2VydCBhbmQgdXBkYXRlLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAkaXRlbXMgVGhlIGxpc3Qgb2YgaXRlbXMuDQoJICogQHBhcmFtIHN0cmluZyAka2V5ICAgVGhlIGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIHNvcnRlZC4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXl8bnVsbCBUaGUgc29ydGVkIHNldHMuDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBzb3J0KGFycmF5ICRpdGVtcywgc3RyaW5nICRrZXkpOiA/YXJyYXkNCgl7DQoJCS8vIEV4dHJhY3QgcmVsZXZhbnQgaXRlbXMgYmFzZWQgb24gdGhlIGtleS4NCgkJJHZhbHVlcyA9ICR0aGlzLT5leHRyYWN0VmFsdWVzKCRpdGVtcywgJGtleSk7DQoJCWlmICgkdmFsdWVzID09PSBudWxsKQ0KCQl7DQoJCQlyZXR1cm4gbnVsbDsNCgkJfQ0KDQoJCSRzZXRzID0gWw0KCQkJJ2luc2VydCcgPT4gW10sDQoJCQkndXBkYXRlJyA9PiBbXQ0KCQldOw0KDQoJCS8vIENoZWNrIGZvciBleGlzdGluZyBpdGVtcy4NCgkJJGV4aXN0aW5nSXRlbXMgPSAkdGhpcy0+ZGF0YWJhc2UtPnZhbHVlcygNCgkJCVsiYS4ka2V5IiA9PiAka2V5XSwNCgkJCVsiYSIgPT4gJHRoaXMtPmdldFRhYmxlKCldLA0KCQkJWyJhLiRrZXkiID0+IFsnb3BlcmF0b3InID0+ICdJTicsICd2YWx1ZScgPT4gJHZhbHVlc11dDQoJCSk7DQoNCgkJaWYgKCRleGlzdGluZ0l0ZW1zICE9PSBudWxsKQ0KCQl7DQoJCQkkc2V0c1sndXBkYXRlJ10gPSAkdGhpcy0+ZXh0cmFjdFNldCgkaXRlbXMsICRleGlzdGluZ0l0ZW1zLCAka2V5KSA/PyBbXTsNCgkJCSRzZXRzWydpbnNlcnQnXSA9ICR0aGlzLT5leHRyYWN0U2V0KCRpdGVtcywgJGV4aXN0aW5nSXRlbXMsICRrZXksIHRydWUpID8/IFtdOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJJGluc2VydCA9IFtdOw0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCSRyb3cgPSBpc19hcnJheSgkaXRlbSkgPyAkaXRlbSA6IChhcnJheSkgJGl0ZW07DQoJCQkJJGluc2VydFtdID0gJHRoaXMtPm5vcm1hbGl6ZUd1aWQoJHJvdyk7DQoJCQl9DQoJCQkkc2V0c1snaW5zZXJ0J10gPSAkaW5zZXJ0Ow0KCQl9DQoNCgkJLy8gSWYgZWl0aGVyIHNldCBpcyBlbXB0eSwgcmVtb3ZlIGl0IGZyb20gdGhlIHJlc3VsdC4NCgkJJHNldHMgPSBhcnJheV9maWx0ZXIoJHNldHMpOw0KDQoJCXJldHVybiAhZW1wdHkoJHNldHMpID8gJHNldHMgOiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIEV4dHJhY3RzIHZhbHVlcyBmb3IgYSBnaXZlbiBrZXkgZnJvbSBhbiBhcnJheSBvZiBpdGVtcy4NCgkgKiBJdGVtcyBjYW4gYmUgZWl0aGVyIGFycmF5cyBvciBvYmplY3RzLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRpdGVtcyBBcnJheSBvZiBpdGVtcyAoYXJyYXlzIG9yIG9iamVjdHMpDQoJICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gZXh0cmFjdCB2YWx1ZXMgZm9yDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgRXh0cmFjdGVkIHZhbHVlcw0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gZXh0cmFjdFZhbHVlcyhhcnJheSAkaXRlbXMsIHN0cmluZyAka2V5KTogP2FycmF5DQoJew0KCQkkcmVzdWx0ID0gW107DQoNCgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQl7DQoJCQlpZiAoaXNfYXJyYXkoJGl0ZW0pICYmICFlbXB0eSgkaXRlbVska2V5XSkpDQoJCQl7DQoJCQkJJHJlc3VsdFtdID0gJGl0ZW1bJGtleV07DQoJCQl9DQoJCQllbHNlaWYgKGlzX29iamVjdCgkaXRlbSkgJiYgIWVtcHR5KCRpdGVtLT57JGtleX0pKQ0KCQkJew0KCQkJCSRyZXN1bHRbXSA9ICRpdGVtLT57JGtleX07DQoJCQl9DQoJCX0NCg0KCQlyZXR1cm4gKCRyZXN1bHQgPT09IFtdKSA/IG51bGwgOiAkcmVzdWx0Ow0KCX0NCg0KCS8qKg0KCSAqIEV4dHJhY3RzIGl0ZW1zIGZyb20gYW4gYXJyYXkgb2YgaXRlbXMgYmFzZWQgb24gYSBzZXQuDQoJICogSXRlbXMgY2FuIGJlIGVpdGhlciBhcnJheXMgb3Igb2JqZWN0cy4NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGl0ZW1zICAgQXJyYXkgb2YgaXRlbXMgKGFycmF5cyBvciBvYmplY3RzKQ0KCSAqIEBwYXJhbSBhcnJheSAgJHNldAkgVGhlIHNldCB0byBtYXRjaCB2YWx1ZXMgYWdhaW5zdA0KCSAqIEBwYXJhbSBzdHJpbmcgJGtleQkgVGhlIGtleSBvZiB0aGUgc2V0IHZhbHVlcw0KCSAqIEBwYXJhbSBib29sICAgJGludmVyc2UgV2hldGhlciB0byBleHRyYWN0IGl0ZW1zIG5vdCBpbiB0aGUgc2V0DQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgRXh0cmFjdGVkIHZhbHVlcw0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gZXh0cmFjdFNldChhcnJheSAkaXRlbXMsIGFycmF5ICRzZXQsIHN0cmluZyAka2V5LCBib29sICRpbnZlcnNlID0gZmFsc2UpOiA/YXJyYXkNCgl7DQoJCSRyZXN1bHQgPSBbXTsNCg0KCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pDQoJCXsNCgkJCSR2YWx1ZSA9IGlzX2FycmF5KCRpdGVtKSA/ICgkaXRlbVska2V5XSA/PyBudWxsKSA6ICgkaXRlbS0+eyRrZXl9ID8/IG51bGwpOw0KDQoJCQlpZiAoJHZhbHVlICE9PSBudWxsKQ0KCQkJew0KCQkJCSRpblNldCA9IGluX2FycmF5KCR2YWx1ZSwgJHNldCk7DQoJCQkJaWYgKCgkaW5TZXQgJiYgISRpbnZlcnNlKSB8fCAoISRpblNldCAmJiAkaW52ZXJzZSkpDQoJCQkJew0KCQkJCQkkcm93ID0gaXNfYXJyYXkoJGl0ZW0pID8gJGl0ZW0gOiAoYXJyYXkpICRpdGVtOw0KCQkJCQlpZiAoJGludmVyc2UpDQoJCQkJCXsNCgkJCQkJCSRyb3cgPSAkdGhpcy0+bm9ybWFsaXplR3VpZCgkcm93KTsNCgkJCQkJfQ0KCQkJCQkkcmVzdWx0W10gPSAkcm93Ow0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBlbXB0eSgkcmVzdWx0KSA/IG51bGwgOiAkcmVzdWx0Ow0KCX0NCg0KCS8qKg0KCSAqIE5vcm1hbGl6ZSB0aGUgcm93IGl0ZW0NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGl0ZW0gICBJdGVtcyBhcnJheQ0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSAgNS4xLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIG5vcm1hbGl6ZUd1aWQoYXJyYXkgJGl0ZW0pOiBhcnJheQ0KCXsNCgkJaWYgKGlzc2V0KCRpdGVtWydndWlkJ10pICYmICRpdGVtWydndWlkJ10gPT09ICcnKQ0KCQl7DQoJCQkkaXRlbVsnZ3VpZCddID0gJHRoaXMtPmdldEd1aWQoJ2d1aWQnKTsNCgkJfQ0KCQlyZXR1cm4gJGl0ZW07DQoJfQ0KDQoJLyoqDQoJICogQ2hlY2tzIGlmIHRoZSBHVUlEIHZhbHVlIGlzIHVuaXF1ZSBhbmQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgVGhlIEdVSUQgdmFsdWUgdG8gY2hlY2suDQoJICogQHBhcmFtIHN0cmluZyAka2V5ICBUaGUga2V5IHRvIGNoZWNrIGFuZCBtb2RpZnkgdmFsdWVzLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgVGhlIHVuaXF1ZSBHVUlEIHZhbHVlLg0KCSAqDQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrR3VpZChzdHJpbmcgJGd1aWQsIHN0cmluZyAka2V5KTogc3RyaW5nDQoJew0KCQkvLyBDaGVjayB0aGF0IHRoZSBHVUlEIGRvZXMgbm90IGFscmVhZHkgZXhpc3QNCgkJaWYgKCR0aGlzLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPnZhbHVlcyhbJGd1aWRdLCAka2V5KSkNCgkJew0KCQkJcmV0dXJuICR0aGlzLT5nZXRHdWlkKCRrZXkpOw0KCQl9DQoNCgkJcmV0dXJuICRndWlkOw0KCX0=', '{}', '{}', NULL, 1, '2024-06-20 08:45:53', 26, 0, 1), (754, '7212e4db-371f-4cfd-8122-32e9bb100d83', 'VDM.Interfaces.Data.ItemsInterface', 'ItemsInterface', 'interface', 'Data Items Interface\r\n\r\n@since 3.2.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Data.ItemsInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFNldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSBhY3RpdmUNCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB0YWJsZShzdHJpbmcgJHRhYmxlKTogc2VsZjsNCg0KCS8qKg0KCSAqIEdldCBsaXN0IG9mIGl0ZW1zDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICAgICR2YWx1ZXMgICAgVGhlIGlkcyBvZiB0aGUgaXRlbXMNCgkgKiBAcGFyYW0gc3RyaW5nICAgICRrZXkgICAgICAgVGhlIGtleSBvZiB0aGUgdmFsdWVzDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgVGhlIGl0ZW0gb2JqZWN0IG9yIG51bGwNCgkgKiBAc2luY2UgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0KGFycmF5ICR2YWx1ZXMsIHN0cmluZyAka2V5ID0gJ2d1aWQnKTogP2FycmF5Ow0KDQoJLyoqDQoJICogR2V0IHRoZSB2YWx1ZXMNCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgICR2YWx1ZXMgICAgVGhlIGxpc3Qgb2YgdmFsdWVzICh0byBzZWFyY2ggYnkpLg0KCSAqIEBwYXJhbSBzdHJpbmcgICRrZXkgICAgICAgVGhlIGtleSBvbiB3aGljaCB0aGUgdmFsdWVzIGJlaW5nIHNlYXJjaGVkLg0KCSAqIEBwYXJhbSBzdHJpbmcgICRnZXQgICAgICAgVGhlIGtleSBvZiB0aGUgdmFsdWVzIHdlIHdhbnQgYmFjaw0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsIFRoZSBhcnJheSBvZiBmb3VuZCB2YWx1ZXMuDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHZhbHVlcyhhcnJheSAkdmFsdWVzLCBzdHJpbmcgJGtleSA9ICdndWlkJywgc3RyaW5nICRnZXQgPSAnaWQnKTogP2FycmF5Ow0KDQoJLyoqDQoJICogU2V0IGl0ZW1zDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICAgICRpdGVtcyAgVGhlIGxpc3Qgb2YgaXRlbXMNCgkgKiBAcGFyYW0gc3RyaW5nICAgICRrZXkgICAgVGhlIGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIHNldA0KCSAqDQoJICogQHJldHVybiBib29sDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIHNldChhcnJheSAkaXRlbXMsIHN0cmluZyAka2V5ID0gJ2d1aWQnKTogYm9vbDsNCg0KCS8qKg0KCSAqIERlbGV0ZSBpdGVtcw0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAgICR2YWx1ZXMgIFRoZSBpdGVtIGtleSB2YWx1ZQ0KCSAqIEBwYXJhbSBzdHJpbmcgICAka2V5ICAgICBUaGUgaXRlbSBrZXkNCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAzLjIuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGUoYXJyYXkgJHZhbHVlcywgc3RyaW5nICRrZXkgPSAnZ3VpZCcpOiBib29sOw0KDQoJLyoqDQoJICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFRhYmxlKCk6IHN0cmluZzs=', '{}', '{}', NULL, 1, '2024-06-20 13:59:15', 3, 0, 1), (755, 'a5daf189-3345-4b13-8716-c51f686f545b', 'VDM.Service.Data', 'Data', 'class', 'Data Service Provider\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, 'Registry', '', '', '{\"0\":\"-1\"}', 'ServiceProviderInterface', '[[[NamespacePrefix]]]\\Joomla\\Service.Data', 1, '{}', '{}', 'dXNlIEpvb21sYVxESVxDb250YWluZXI7DQp1c2UgSm9vbWxhXERJXFNlcnZpY2VQcm92aWRlckludGVyZmFjZTs=', '{\"use_selection0\":{\"use\":\"008d111c-9d43-427c-8dd4-2653e8b74be8\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"a455d916-cfe4-41df-9245-bafb709aacdb\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"8f83fb79-f92b-4f1f-952b-325f6c22d11e\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"3fc72954-a303-4cac-b53c-554be38b85e7\",\"as\":\"default\"},\"use_selection4\":{\"use\":\"9206082e-a3f7-472e-98b2-de90d06cbdcd\",\"as\":\"default\"},\"use_selection5\":{\"use\":\"21bca8a4-5b28-41c4-843e-8097f0ba7cca\",\"as\":\"default\"},\"use_selection6\":{\"use\":\"85785701-07b2-4f81-bc1e-0f423700c254\",\"as\":\"default\"},\"use_selection7\":{\"use\":\"46b98346-ec98-42b3-a393-96c7d1282b1c\",\"as\":\"default\"},\"use_selection8\":{\"use\":\"e0198c3f-777a-4a0b-87b7-e6a198afc8f9\",\"as\":\"default\"},\"use_selection9\":{\"use\":\"0b746305-d34e-4c21-bc20-898c4aeac376\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFJlZ2lzdGVycyB0aGUgc2VydmljZSBwcm92aWRlciB3aXRoIGEgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcihDb250YWluZXIgJGNvbnRhaW5lcikNCgl7DQoJCSRjb250YWluZXItPmFsaWFzKExvYWQ6OmNsYXNzLCAnRGF0YS5Mb2FkJykNCgkJCS0+c2hhcmUoJ0RhdGEuTG9hZCcsIFskdGhpcywgJ2dldExvYWQnXSwgdHJ1ZSk7DQoNCgkJJGNvbnRhaW5lci0+YWxpYXMoSW5zZXJ0OjpjbGFzcywgJ0RhdGEuSW5zZXJ0JykNCgkJCS0+c2hhcmUoJ0RhdGEuSW5zZXJ0JywgWyR0aGlzLCAnZ2V0SW5zZXJ0J10sIHRydWUpOw0KDQoJCSRjb250YWluZXItPmFsaWFzKFVwZGF0ZTo6Y2xhc3MsICdEYXRhLlVwZGF0ZScpDQoJCQktPnNoYXJlKCdEYXRhLlVwZGF0ZScsIFskdGhpcywgJ2dldFVwZGF0ZSddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhEZWxldGU6OmNsYXNzLCAnRGF0YS5EZWxldGUnKQ0KCQkJLT5zaGFyZSgnRGF0YS5EZWxldGUnLCBbJHRoaXMsICdnZXREZWxldGUnXSwgdHJ1ZSk7DQoNCgkJJGNvbnRhaW5lci0+YWxpYXMoSXRlbTo6Y2xhc3MsICdEYXRhLkl0ZW0nKQ0KCQkJLT5zaGFyZSgnRGF0YS5JdGVtJywgWyR0aGlzLCAnZ2V0SXRlbSddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhJdGVtczo6Y2xhc3MsICdEYXRhLkl0ZW1zJykNCgkJCS0+c2hhcmUoJ0RhdGEuSXRlbXMnLCBbJHRoaXMsICdnZXRJdGVtcyddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhTdWJmb3JtOjpjbGFzcywgJ0RhdGEuU3ViZm9ybScpDQoJCQktPnNoYXJlKCdEYXRhLlN1YmZvcm0nLCBbJHRoaXMsICdnZXRTdWJmb3JtJ10sIHRydWUpOw0KDQoJCSRjb250YWluZXItPmFsaWFzKFVzZXJzU3ViZm9ybTo6Y2xhc3MsICdEYXRhLlVzZXJzU3ViZm9ybScpDQoJCQktPnNoYXJlKCdEYXRhLlVzZXJzU3ViZm9ybScsIFskdGhpcywgJ2dldFVzZXJzU3ViZm9ybSddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhNdWx0aVN1YmZvcm06OmNsYXNzLCAnRGF0YS5NdWx0aVN1YmZvcm0nKQ0KCQkJLT5zaGFyZSgnRGF0YS5NdWx0aVN1YmZvcm0nLCBbJHRoaXMsICdnZXRNdWx0aVN1YmZvcm0nXSwgdHJ1ZSk7DQoNCgkJJGNvbnRhaW5lci0+YWxpYXMoR3VpZDo6Y2xhc3MsICdEYXRhLk1pZ3JhdG9yLkd1aWQnKQ0KCQkJLT5zaGFyZSgnRGF0YS5NaWdyYXRvci5HdWlkJywgWyR0aGlzLCAnZ2V0TWlncmF0b3JHdWlkJ10sIHRydWUpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBUaGUgTG9hZCBDbGFzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIExvYWQNCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0TG9hZChDb250YWluZXIgJGNvbnRhaW5lcik6IExvYWQNCgl7DQoJCXJldHVybiBuZXcgTG9hZCgNCgkJCSRjb250YWluZXItPmdldCgnTW9kZWwuTG9hZCcpLA0KCQkJJGNvbnRhaW5lci0+Z2V0KCdMb2FkJykNCgkJKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgVGhlIEluc2VydCBDbGFzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIEluc2VydA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRJbnNlcnQoQ29udGFpbmVyICRjb250YWluZXIpOiBJbnNlcnQNCgl7DQoJCXJldHVybiBuZXcgSW5zZXJ0KA0KCQkJJGNvbnRhaW5lci0+Z2V0KCdNb2RlbC5VcHNlcnQnKSwNCgkJCSRjb250YWluZXItPmdldCgnSW5zZXJ0JykNCgkJKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgVGhlIFVwZGF0ZSBDbGFzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIFVwZGF0ZQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRVcGRhdGUoQ29udGFpbmVyICRjb250YWluZXIpOiBVcGRhdGUNCgl7DQoJCXJldHVybiBuZXcgVXBkYXRlKA0KCQkJJGNvbnRhaW5lci0+Z2V0KCdNb2RlbC5VcHNlcnQnKSwNCgkJCSRjb250YWluZXItPmdldCgnVXBkYXRlJykNCgkJKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgVGhlIERlbGV0ZSBDbGFzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIERlbGV0ZQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXREZWxldGUoQ29udGFpbmVyICRjb250YWluZXIpOiBEZWxldGUNCgl7DQoJCXJldHVybiBuZXcgRGVsZXRlKA0KCQkJJGNvbnRhaW5lci0+Z2V0KCdEZWxldGUnKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBUaGUgSXRlbSBDbGFzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIEl0ZW0NCgkgKiBAc2luY2UgMy4yLjANCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlbShDb250YWluZXIgJGNvbnRhaW5lcik6IEl0ZW0NCgl7DQoJCXJldHVybiBuZXcgSXRlbSgNCgkJCSRjb250YWluZXItPmdldCgnRGF0YS5Mb2FkJyksDQoJCQkkY29udGFpbmVyLT5nZXQoJ0RhdGEuSW5zZXJ0JyksDQoJCQkkY29udGFpbmVyLT5nZXQoJ0RhdGEuVXBkYXRlJyksDQoJCQkkY29udGFpbmVyLT5nZXQoJ0RhdGEuRGVsZXRlJyksDQoJCQkkY29udGFpbmVyLT5nZXQoJ0xvYWQnKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBUaGUgSXRlbXMgQ2xhc3MuDQoJICoNCgkgKiBAcGFyYW0gICBDb250YWluZXIgICRjb250YWluZXIgIFRoZSBESSBjb250YWluZXIuDQoJICoNCgkgKiBAcmV0dXJuICBJdGVtcw0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRJdGVtcyhDb250YWluZXIgJGNvbnRhaW5lcik6IEl0ZW1zDQoJew0KCQlyZXR1cm4gbmV3IEl0ZW1zKA0KCQkJJGNvbnRhaW5lci0+Z2V0KCdEYXRhLkxvYWQnKSwNCgkJCSRjb250YWluZXItPmdldCgnRGF0YS5JbnNlcnQnKSwNCgkJCSRjb250YWluZXItPmdldCgnRGF0YS5VcGRhdGUnKSwNCgkJCSRjb250YWluZXItPmdldCgnRGF0YS5EZWxldGUnKSwNCgkJCSRjb250YWluZXItPmdldCgnTG9hZCcpDQoJCSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IFRoZSBTdWJmb3JtIENsYXNzLg0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgU3ViZm9ybQ0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRTdWJmb3JtKENvbnRhaW5lciAkY29udGFpbmVyKTogU3ViZm9ybQ0KCXsNCgkJcmV0dXJuIG5ldyBTdWJmb3JtKA0KCQkJJGNvbnRhaW5lci0+Z2V0KCdEYXRhLkl0ZW1zJykNCgkJKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgVGhlIFVzZXJzIFN1YmZvcm0gQ2xhc3MuDQoJICoNCgkgKiBAcGFyYW0gICBDb250YWluZXIgICRjb250YWluZXIgIFRoZSBESSBjb250YWluZXIuDQoJICoNCgkgKiBAcmV0dXJuICBVc2Vyc1N1YmZvcm0NCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldFVzZXJzU3ViZm9ybShDb250YWluZXIgJGNvbnRhaW5lcik6IFVzZXJzU3ViZm9ybQ0KCXsNCgkJcmV0dXJuIG5ldyBVc2Vyc1N1YmZvcm0oDQoJCQkkY29udGFpbmVyLT5nZXQoJ0RhdGEuSXRlbXMnKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBUaGUgTXVsdGlTdWJmb3JtIENsYXNzLg0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgTXVsdGlTdWJmb3JtDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldE11bHRpU3ViZm9ybShDb250YWluZXIgJGNvbnRhaW5lcik6IE11bHRpU3ViZm9ybQ0KCXsNCgkJcmV0dXJuIG5ldyBNdWx0aVN1YmZvcm0oDQoJCQkkY29udGFpbmVyLT5nZXQoJ0RhdGEuU3ViZm9ybScpDQoJCSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IFRoZSBNaWdyYXRvciBUbyBHdWlkIENsYXNzLg0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgR3VpZA0KCSAqIEBzaW5jZSA1LjAuNA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRNaWdyYXRvckd1aWQoQ29udGFpbmVyICRjb250YWluZXIpOiBHdWlkDQoJew0KCQlyZXR1cm4gbmV3IEd1aWQoDQoJCQkkY29udGFpbmVyLT5nZXQoJ0RhdGEuSXRlbXMnKSwNCgkJCSRjb250YWluZXItPmdldCgnTG9hZCcpLA0KCQkJJGNvbnRhaW5lci0+Z2V0KCdVcGRhdGUnKQ0KCQkpOw0KCX0=', '{}', '{}', NULL, 1, '2024-06-20 14:32:50', 15, 0, 1), (756, '2dcedd6c-c95b-4a37-9cac-95d28faedca3', 'VDM.Service.Model', 'Model', 'class', 'Model Service Provider\r\n\r\n@since 3.2.0', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, 'Registry', '', '', '{\"0\":\"-1\"}', 'ServiceProviderInterface', '[[[NamespacePrefix]]]\\Joomla\\Service.Model', 1, '{}', '{}', 'dXNlIEpvb21sYVxESVxDb250YWluZXI7DQp1c2UgSm9vbWxhXERJXFNlcnZpY2VQcm92aWRlckludGVyZmFjZTs=', '{\"use_selection0\":{\"use\":\"bb29a833-73f7-4283-9327-bc7e41f0723b\",\"as\":\"default\"},\"use_selection1\":{\"use\":\"7c1fb50f-8fb1-4627-8705-6fedf7182ca5\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFJlZ2lzdGVycyB0aGUgc2VydmljZSBwcm92aWRlciB3aXRoIGEgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHBhcmFtICAgQ29udGFpbmVyICAkY29udGFpbmVyICBUaGUgREkgY29udGFpbmVyLg0KCSAqDQoJICogQHJldHVybiAgdm9pZA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcihDb250YWluZXIgJGNvbnRhaW5lcikNCgl7DQoJCSRjb250YWluZXItPmFsaWFzKExvYWQ6OmNsYXNzLCAnTW9kZWwuTG9hZCcpDQoJCQktPnNoYXJlKCdNb2RlbC5Mb2FkJywgWyR0aGlzLCAnZ2V0TG9hZCddLCB0cnVlKTsNCg0KCQkkY29udGFpbmVyLT5hbGlhcyhVcHNlcnQ6OmNsYXNzLCAnTW9kZWwuVXBzZXJ0JykNCgkJCS0+c2hhcmUoJ01vZGVsLlVwc2VydCcsIFskdGhpcywgJ2dldFVwc2VydCddLCB0cnVlKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgVGhlIExvYWQgQ2xhc3MuDQoJICoNCgkgKiBAcGFyYW0gICBDb250YWluZXIgICRjb250YWluZXIgIFRoZSBESSBjb250YWluZXIuDQoJICoNCgkgKiBAcmV0dXJuICBMb2FkDQoJICogQHNpbmNlIDMuMi4wDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldExvYWQoQ29udGFpbmVyICRjb250YWluZXIpOiBMb2FkDQoJew0KCQlyZXR1cm4gbmV3IExvYWQoDQoJCQkkY29udGFpbmVyLT5nZXQoJ1RhYmxlJykNCgkJKTsNCgl9DQoNCgkvKioNCgkgKiBHZXQgVGhlIFVwc2VydCBDbGFzcy4NCgkgKg0KCSAqIEBwYXJhbSAgIENvbnRhaW5lciAgJGNvbnRhaW5lciAgVGhlIERJIGNvbnRhaW5lci4NCgkgKg0KCSAqIEByZXR1cm4gIFVwc2VydA0KCSAqIEBzaW5jZSAzLjIuMA0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRVcHNlcnQoQ29udGFpbmVyICRjb250YWluZXIpOiBVcHNlcnQNCgl7DQoJCXJldHVybiBuZXcgVXBzZXJ0KA0KCQkJJGNvbnRhaW5lci0+Z2V0KCdUYWJsZScpDQoJCSk7DQoJfQ==', '{}', '{}', NULL, 1, '2024-06-20 15:00:40', 4, 0, 1), @@ -2222,7 +2225,7 @@ INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `t (782, '4b2d6f28-346e-46ec-bf24-d470319cca2d', 'VDM.Component.PHPConfigurationChecker', 'PHPConfigurationChecker', 'final class', '[[[Component]]] PHP Configuration Checker\r\n\r\n@since 5.02', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '900456a2-feb5-48b9-9f05-c5a032a32c59', '', '', '', '{\"0\":\"95c02df3-fe0a-405b-b506-b7a5b8605b66\"}', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].PHPConfigurationChecker', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFRoZSB1cGxvYWQgbWF4IGZpbGVzaXplIHZhbHVlDQoJICoNCgkgKiBAdmFyICAgIHN0cmluZw0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKiovDQoJcHJvdGVjdGVkICBzdHJpbmcgJHVwbG9hZF9tYXhfZmlsZXNpemUgPSAnW1tbdXBsb2FkX21heF9maWxlc2l6ZV1dXSc7DQoNCgkvKioNCgkgKiBUaGUgcG9zdCBtYXggc2l6ZSB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgc3RyaW5nICRwb3N0X21heF9zaXplID0gJ1tbW3Bvc3RfbWF4X3NpemVdXV0nOw0KDQoJLyoqDQoJICogVGhlIG1heCBleGVjdXRpb24gdGltZSB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBpbnQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgaW50ICRtYXhfZXhlY3V0aW9uX3RpbWUgPSBbW1ttYXhfZXhlY3V0aW9uX3RpbWVdXV07DQoNCgkvKioNCgkgKiBUaGUgbWF4IGlucHV0IHZhcnMgdmFsdWUNCgkgKg0KCSAqIEB2YXIgICAgaW50DQoJICogQHNpbmNlICA1LjAuMg0KCSAqKi8NCglwcm90ZWN0ZWQgIGludCAkbWF4X2lucHV0X3ZhcnMgPSBbW1ttYXhfaW5wdXRfdmFyc11dXTsNCg0KCS8qKg0KCSAqIFRoZSBtYXggaW5wdXQgdGltZSB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBpbnQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgaW50ICRtYXhfaW5wdXRfdGltZSA9IFtbW21heF9pbnB1dF90aW1lXV1dOw0KDQoJLyoqDQoJICogVGhlIG1lbW9yeSBsaW1pdCB2YWx1ZQ0KCSAqDQoJICogQHZhciAgICBzdHJpbmcNCgkgKiBAc2luY2UgIDUuMC4yDQoJICoqLw0KCXByb3RlY3RlZCAgc3RyaW5nICRtZW1vcnlfbGltaXQgPSAnW1tbbWVtb3J5X2xpbWl0XV1dJzsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYXBwID0gbnVsbCkNCgl7DQoJCXBhcmVudDo6X19jb25zdHJ1Y3QoJGFwcCk7DQoNCgkJLy8gc2V0IHRoZSByZXF1aXJlZCBQSFAgQ29uZmlndXJlcw0KCQkkdGhpcy0+c2V0KCdlbnZpcm9ubWVudC5uYW1lJywgJ1tbW0NvbXBvbmVudF1dXSBlbnZpcm9ubWVudCcpOw0KCQkkdGhpcy0+c2V0KCdlbnZpcm9ubWVudC53aWtpX3VybCcsICdbW1tlbnZpcm9ubWVudF93aWtpX3VybF1dXScpOw0KCX0=', '{}', '{}', NULL, 1, '2024-07-27 12:38:37', 4, 0, 1), (821, '7832a726-87b6-4e95-887e-7b725d3fab8f', 'Joomla.Utilities.UserHelper', 'UserHelper', 'abstract class', 'Create & Update User [Save]\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Utilities.UserHelper', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXEZvcm1cRm9ybTsNCnVzZSBKb29tbGFcQ01TXExhbmd1YWdlXFRleHQ7DQp1c2UgSm9vbWxhXENNU1xVc2VyXFVzZXI7DQp1c2UgSm9vbWxhXENNU1xVc2VyXFVzZXJIZWxwZXIgYXMgSm9vbWxhVXNlckhlbHBlcjsNCnVzZSBKb29tbGFcQ01TXE1WQ1xNb2RlbFxCYXNlRGF0YWJhc2VNb2RlbDs=', '{\"use_selection0\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"Component\"},\"use_selection1\":{\"use\":\"0a59c65c-9daf-4bc9-baf4-e063ff9e6a8a\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"1f28cb53-60d9-4db1-b517-3c7dc6b429ef\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"1c10a5f1-204d-4f17-ad9f-0e0684f2030d\",\"as\":\"default\"}}', 'CS8qKg0KCSAqIFNhdmUgdXNlciBkZXRhaWxzIGJ5IGVpdGhlciBjcmVhdGluZyBhIG5ldyB1c2VyIG9yIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHVzZXIuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzIGluY2x1ZGluZyAnbmFtZScsICd1c2VybmFtZScsICdlbWFpbCcsICdwYXNzd29yZCcsIGFuZCAncGFzc3dvcmQyJy4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgICBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGF1dG8tbG9naW4gdGhlIHVzZXIgYWZ0ZXIgcmVnaXN0cmF0aW9uLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkcGFyYW1zICAgICAgIFBhcmFtZXRlcnMgZm9yIHVzZXIgYWN0aXZhdGlvbiwgcGFzc3dvcmQgc2VuZGluZywgYW5kIHVzZXIgcmVnaXN0cmF0aW9uIGFsbG93YW5jZS4NCgkgKiBAcGFyYW0gICBpbnQgICAgJG1vZGUgICAgICAgICBNb2RlIG9mIHJlZ2lzdHJhdGlvbjogMSA9IFNpdGUgUmVnaXN0cmF0aW9uLCAwID0gQWRtaW4gUmVnaXN0cmF0aW9uLCAyID0gQ3VzdG9tIEhlbHBlciBNZXRob2QuDQoJICoNCgkgKiBAcmV0dXJuICBpbnQgIFVzZXIgSUQgb24gc3VjY2Vzcy4NCgkgKg0KCSAqIEB0aHJvd3MgIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gIElmIHJlcXVpcmVkIGNyZWRlbnRpYWxzIGFyZSBtaXNzaW5nLg0KCSAqIEB0aHJvd3MgIFxSdW50aW1lRXhjZXB0aW9uICAgICAgICAgIElmIHRoZSB1c2VyIHVwZGF0ZSBvciBjcmVhdGlvbiBmYWlscy4NCgkgKiBAdGhyb3dzICBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uICAgICBJZiB0aGUgdXNlciBpcyBub3QgZm91bmQuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2F2ZShhcnJheSAkY3JlZGVudGlhbHMsIGludCAkYXV0b2xvZ2luID0gMCwNCgkJYXJyYXkgJHBhcmFtcyA9IFsndXNlcmFjdGl2YXRpb24nID0+IDAsICdzZW5kcGFzc3dvcmQnID0+IDFdLCBpbnQgJG1vZGUgPSAxKTogaW50DQoJew0KCQkvLyBjYW4gbm90IGNvbnRpbnVlIHdpdGhvdXQgYW4gZW1haWwNCgkJaWYgKGVtcHR5KCRjcmVkZW50aWFsc1snZW1haWwnXSkpDQoJCXsNCgkJCXRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKFRleHQ6Ol8oJ0NhbiBub3Qgc2F2ZSB1c2VyIHdpdGhvdXQgZW1haWwgdmFsdWUuJykpOw0KCQl9DQoNCgkJLy8gRW5zdXJlIHRoZSAndXNlcm5hbWUnIGtleSBleGlzdHMgaW4gdGhlIGNyZWRlbnRpYWxzIGFycmF5LCBzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIGlmIG5vdCBwcm92aWRlZC4NCgkJJHVzZXJuYW1lID0gJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID8/ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkvLyBJZiB0aGUgdXNlcidzIElEIGlzIHNldCBhbmQgdmFsaWQsIGhhbmRsZSB0aGUgdXBkYXRlIGxvZ2ljLg0KCQlpZiAoIWVtcHR5KCRjcmVkZW50aWFsc1snaWQnXSkgJiYgJGNyZWRlbnRpYWxzWydpZCddID4gMCkNCgkJew0KCQkJJHVzZXJJZCA9ICRjcmVkZW50aWFsc1snaWQnXTsNCgkJCSRlbWFpbCA9ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkJLy8gRmV0Y2ggZXhpc3RpbmcgdXNlciBieSBlbWFpbCBhbmQgdXNlcm5hbWUuDQoJCQkkZXhpc3RpbmdFbWFpbFVzZXJJZCA9IHN0YXRpYzo6Z2V0VXNlcklkQnlFbWFpbCgkZW1haWwpOw0KCQkJJGV4aXN0aW5nVXNlcm5hbWVJZCA9IHN0YXRpYzo6Z2V0VXNlcklkQnlVc2VybmFtZSgkdXNlcm5hbWUpOw0KDQoJCQkvLyBWYWxpZGF0ZSB0aGF0IHdlIGFyZW4ndCBhdHRlbXB0aW5nIHRvIHVwZGF0ZSBvdGhlciB1c2VycyBvciByZXVzZSBhbm90aGVyIHVzZXIncyBlbWFpbC91c2VybmFtZS4NCgkJCWlmICgNCgkJCQkoJGV4aXN0aW5nRW1haWxVc2VySWQgJiYgJGV4aXN0aW5nRW1haWxVc2VySWQgIT0gJHVzZXJJZCkgfHwNCgkJCQkoJGV4aXN0aW5nVXNlcm5hbWVJZCAmJiAkZXhpc3RpbmdVc2VybmFtZUlkICE9ICR1c2VySWQpIHx8DQoJCQkJKCRleGlzdGluZ0VtYWlsVXNlcklkICYmICRleGlzdGluZ1VzZXJuYW1lSWQgJiYgJGV4aXN0aW5nRW1haWxVc2VySWQgIT0gJGV4aXN0aW5nVXNlcm5hbWVJZCkNCgkJCSkgew0KCQkJCXRocm93IG5ldyBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uKA0KCQkJCQlUZXh0OjpzcHJpbnRmKA0KCQkJCQkJJ1VzZXIgSUQgbWlzbWF0Y2ggZGV0ZWN0ZWQgd2hlbiB0cnlpbmcgdG8gc2F2ZSAlcyAoJXMpIGNyZWRlbnRpYWxzLicsDQoJCQkJCQkkdXNlcm5hbWUsDQoJCQkJCQkkZW1haWwNCgkJCQkJKQ0KCQkJCSk7DQoJCQl9DQoNCgkJCS8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgdXNlci4NCgkJCXJldHVybiBzdGF0aWM6OnVwZGF0ZSgkY3JlZGVudGlhbHMpOw0KCQl9DQoNCgkJLy8gQ3JlYXRlIGEgbmV3IHVzZXIgaWYgbm8gZXhpc3RpbmcgdXNlciBpcyBmb3VuZC4NCgkJcmV0dXJuIHN0YXRpYzo6Y3JlYXRlKCRjcmVkZW50aWFscywgJGF1dG9sb2dpbiwgJHBhcmFtcywgJG1vZGUpOw0KCX0NCg0KCS8qKg0KCSAqIENyZWF0ZSBhIHVzZXIgYW5kIHVwZGF0ZSB0aGUgZ2l2ZW4gdGFibGUuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzIGluY2x1ZGluZyAnbmFtZScsICd1c2VybmFtZScsICdlbWFpbCcsICdwYXNzd29yZCcsIGFuZCAncGFzc3dvcmQyJy4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgICBGbGFnIHRvIGRldGVybWluZSB3aGV0aGVyIHRvIGF1dG8tbG9naW4gdGhlIHVzZXIgYWZ0ZXIgcmVnaXN0cmF0aW9uLg0KCSAqIEBwYXJhbSAgIGFycmF5ICAkcGFyYW1zICAgICAgIFBhcmFtZXRlcnMgZm9yIHVzZXIgYWN0aXZhdGlvbiwgcGFzc3dvcmQgc2VuZGluZywgYW5kIHVzZXIgcmVnaXN0cmF0aW9uIGFsbG93YW5jZS4NCgkgKiBAcGFyYW0gICBpbnQgICAgJG1vZGUgICAgICAgICBNb2RlIG9mIHJlZ2lzdHJhdGlvbjogMSA9IFNpdGUgUmVnaXN0cmF0aW9uLCAwID0gQWRtaW4gUmVnaXN0cmF0aW9uLCAyID0gQ3VzdG9tIEhlbHBlciBNZXRob2QuDQoJICoNCgkgKiBAcmV0dXJuICBpbnQgVXNlciBJRCBvbiBzdWNjZXNzLg0KCSAqDQoJICogQHRocm93cyAgXFJ1bnRpbWVFeGNlcHRpb24gICAgICAgSWYgdXNlciBjcmVhdGlvbiBmYWlscy4NCgkgKiBAdGhyb3dzICBOb1VzZXJJZEZvdW5kRXhjZXB0aW9uICBJZiB0aGUgdXNlciBpcyBub3QgZm91bmQuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKGFycmF5ICRjcmVkZW50aWFscywgaW50ICRhdXRvbG9naW4gPSAwLA0KCQlhcnJheSAkcGFyYW1zID0gWyd1c2VyYWN0aXZhdGlvbicgPT4gMCwgJ3NlbmRwYXNzd29yZCcgPT4gMV0sIGludCAkbW9kZSA9IDEpOiBpbnQNCgl7DQoJCSRsYW5nID0gRmFjdG9yeTo6Z2V0TGFuZ3VhZ2UoKTsNCgkJJGxhbmctPmxvYWQoJ2NvbV91c2VycycsIEpQQVRIX1NJVEUsICdlbi1HQicsIHRydWUpOw0KDQoJCS8vIEhhbmRsZSBjdXN0b20gcmVnaXN0cmF0aW9uIG1vZGUNCgkJaWYgKCRtb2RlID09PSAyICYmIG1ldGhvZF9leGlzdHMoSm9vbWxhX19fYWViZmViOWZfZjhhM180MmJlX2EyMWRfNWRiNTZhZTMwYzFjX19fUG93ZXI6OmNsYXNzLCAncmVnaXN0ZXJVc2VyJykpDQoJCXsNCgkJCSRwYXJhbXNbJ2F1dG9sb2dpbiddID0gJGF1dG9sb2dpbjsNCgkJCSR1c2VySWQgPSBKb29tbGFfX19hZWJmZWI5Zl9mOGEzXzQyYmVfYTIxZF81ZGI1NmFlMzBjMWNfX19Qb3dlcjo6cmVnaXN0ZXJVc2VyKCRjcmVkZW50aWFscywgJHBhcmFtcyk7DQoNCgkJCWlmIChpc19udW1lcmljKCR1c2VySWQpKQ0KCQkJew0KCQkJCXJldHVybiAkdXNlcklkOw0KCQkJfQ0KDQoJCQl0aHJvdyBuZXcgTm9Vc2VySWRGb3VuZEV4Y2VwdGlvbihUZXh0OjpfKCdVc2VyIGNyZWF0aW9uIGZhaWxlZCEnKSk7DQoJCX0NCg0KCQkvLyBDaGVjayBpZiB3ZSBoYXZlIHBhcmFtcy9jb25maWcNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkcGFyYW1zKSkNCgkJew0KCQkJLy8gTWFrZSBjaGFuZ2VzIHRvIHVzZXIgY29uZmlnDQoJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRwYXJhbSA9PiAkc2V0KQ0KCQkJew0KCQkJCS8vIElmIHlvdSBrbm93IG9mIGEgYmV0dGVyIHBhdGgsIGxldCBtZSBrbm93DQoJCQkJJHBhcmFtc1skcGFyYW1dID0gQ29tcG9uZW50OjpzZXRQYXJhbXMoJHBhcmFtLCAkc2V0LCAnY29tX3VzZXJzJyk7DQoJCQl9DQoJCX0NCg0KCQkvLyBGYWxsYmFjayB0byBTaXRlIFJlZ2lzdHJhdGlvbnMgaWYgbW9kZSBpcyBzZXQgdG8gMiBidXQgdGhlIG1ldGhvZCBkb2Vzbid0IGV4aXN0DQoJCSRtb2RlID0gJG1vZGUgPT09IDIgPyAxIDogJG1vZGU7DQoNCgkJLy8gTG9hZCB0aGUgYXBwcm9wcmlhdGUgdXNlciBtb2RlbA0KCQkkbW9kZWwgPSBzdGF0aWM6OmdldE1vZGVsQnlNb2RlKCRtb2RlKTsNCg0KCQkvLyBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIG1pc3NpbmcgY3JlZGVudGlhbHMNCgkJJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID0gJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddID8/ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCg0KCQkvLyBQcmVwYXJlIHVzZXIgZGF0YQ0KCQkkZGF0YSA9IHN0YXRpYzo6cHJlcGFyZVVzZXJEYXRhKCRjcmVkZW50aWFscywgJG1vZGUpOw0KDQoJCS8vIFNldCBmb3JtIHBhdGggKGJ1ZyBmaXggZm9yIEpvb21sYSkNCgkJc3RhdGljOjpzZXRGb3JtUGF0aEZvclVzZXJDbGFzcygkbW9kZSk7DQoNCgkJLy8gSGFuZGxlIHVzZXIgY3JlYXRpb24NCgkJJHVzZXJJZCA9ICRtb2RlID09PSAxID8gJG1vZGVsLT5yZWdpc3RlcigkZGF0YSkgOiBzdGF0aWM6OmFkbWluUmVnaXN0ZXIoJG1vZGVsLCAkZGF0YSk7DQoNCgkJLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwYXJhbXMNCgkJaWYgKEFycmF5SGVscGVyOjpjaGVjaygkcGFyYW1zKSkNCgkJew0KCQkJLy8gQ2hhbmdlIHVzZXIgcGFyYW1zL2NvbmZpZyBiYWNrDQoJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRwYXJhbSA9PiAkc2V0KQ0KCQkJew0KCQkJCS8vIElmIHlvdSBrbm93IG9mIGEgYmV0dGVyIHBhdGgsIGxldCBtZSBrbm93DQoJCQkJQ29tcG9uZW50OjpzZXRQYXJhbXMoJHBhcmFtLCAkc2V0LCAnY29tX3VzZXJzJyk7DQoJCQl9DQoJCX0NCg0KCQlpZiAoISR1c2VySWQpDQoJCXsNCgkJCSRjdXJyZW50X3VzZXIgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5nZXRJZGVudGl0eSgpOw0KDQoJCQkvLyBvbmx5IGFsbG93IHRob3NlIHdpdGggYWNjZXNzIHRvIFVzZXJzIHRvIGlnbm9yZSBlcnJvcnMNCgkJCWlmICgkY3VycmVudF91c2VyLT5hdXRob3Jpc2UoJ2NvcmUubWFuYWdlJywgJ2NvbV91c2VycycpKQ0KCQkJew0KCQkJCSR1c2VySWQgPSBzdGF0aWM6OmdldFVzZXJJZEJ5VXNlcm5hbWUoJGNyZWRlbnRpYWxzWyd1c2VybmFtZSddKTsNCgkJCX0NCgkJfQ0KDQoJCWlmIChpc19udW1lcmljKCR1c2VySWQpICYmICR1c2VySWQgPiAwKQ0KCQl7DQoJCQkvLyBIYW5kbGUgcG9zdC1yZWdpc3RyYXRpb24gcHJvY2Vzc2VzDQoJCQlyZXR1cm4gc3RhdGljOjpoYW5kbGVQb3N0UmVnaXN0cmF0aW9uKCR1c2VySWQsICRhdXRvbG9naW4sICRjcmVkZW50aWFscyk7DQoJCX0NCg0KCQkkZXJyb3JfbWVzc2FnZXMgPSAnJzsNCgkJaWYgKG1ldGhvZF9leGlzdHMoJG1vZGVsLCAnZ2V0RXJyb3InKSkNCgkJew0KCQkJJGVycm9ycyA9ICRtb2RlbC0+Z2V0RXJyb3IoKTsNCgkJCWlmICghZW1wdHkoJGVycm9ycykpDQoJCQl7DQoJCQkJaWYgKGlzX2FycmF5KCRlcnJvcnMpKQ0KCQkJCXsNCgkJCQkJJGVycm9yX21lc3NhZ2VzID0gJzxicj4nIC4gaW1wbG9kZSgnPGJyPicsICRlcnJvcnMpOw0KCQkJCX0NCgkJCQllbHNlaWYgKGlzX3N0cmluZygkZXJyb3JzKSkNCgkJCQl7DQoJCQkJCSRlcnJvcl9tZXNzYWdlcyA9ICc8YnI+JyAuICRlcnJvcnM7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJdGhyb3cgbmV3IE5vVXNlcklkRm91bmRFeGNlcHRpb24oDQoJCQlUZXh0OjpzcHJpbnRmKCdVc2VyICVzICglcykgY3JlYXRpb24gZmFpbGVkISVzJywNCgkJCQkoc3RyaW5nKSAkY3JlZGVudGlhbHNbJ3VzZXJuYW1lJ10sDQoJCQkJKHN0cmluZykgJGNyZWRlbnRpYWxzWydlbWFpbCddLA0KCQkJCSRlcnJvcl9tZXNzYWdlcw0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIFVwZGF0ZSB1c2VyIGRldGFpbHMuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJHVzZXJEZXRhaWxzICBBcnJheSBjb250YWluaW5nIHVzZXIgZGV0YWlscyB0byBiZSB1cGRhdGVkLg0KCSAqDQoJICogQHJldHVybiAgaW50ICAgVXBkYXRlZCB1c2VyIElEIG9uIHN1Y2Nlc3MuDQoJICoNCgkgKiBAdGhyb3dzICBcUnVudGltZUV4Y2VwdGlvbiAgSWYgdXNlciB1cGRhdGUgZmFpbHMuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlKGFycmF5ICR1c2VyRGV0YWlscyk6IGludA0KCXsNCgkJJGxhbmcgPSBGYWN0b3J5OjpnZXRMYW5ndWFnZSgpOw0KCQkkbGFuZy0+bG9hZCgnY29tX3VzZXJzJywgSlBBVEhfQURNSU5JU1RSQVRPUiwgJ2VuLUdCJywgdHJ1ZSk7DQoNCgkJJG1vZGVsID0gQ29tcG9uZW50OjpnZXRNb2RlbCgnVXNlcicsICdBZG1pbmlzdHJhdG9yJywgJ2NvbV91c2VycycpOw0KDQoJCS8vIFNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBjcmVkZW50aWFscw0KCQkkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10gPSAkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10gPz8gJHVzZXJEZXRhaWxzWydlbWFpbCddOw0KDQoJCS8vIFByZXBhcmUgdXNlciBkYXRhIGZvciB1cGRhdGUNCgkJJGRhdGEgPSBbDQoJCQknaWQnID0+ICR1c2VyRGV0YWlsc1snaWQnXSwNCgkJCSd1c2VybmFtZScgPT4gJHVzZXJEZXRhaWxzWyd1c2VybmFtZSddLA0KCQkJJ25hbWUnID0+ICR1c2VyRGV0YWlsc1snbmFtZSddLA0KCQkJJ2VtYWlsJyA9PiAkdXNlckRldGFpbHNbJ2VtYWlsJ10sDQoJCQkncGFzc3dvcmQnID0+ICR1c2VyRGV0YWlsc1sncGFzc3dvcmQnXSA/PyBudWxsLA0KCQkJJ3Bhc3N3b3JkMicgPT4gJHVzZXJEZXRhaWxzWydwYXNzd29yZDInXSA/PyBudWxsLA0KCQkJJ2Jsb2NrJyA9PiAwDQoJCV07DQoNCgkJLy8gc2V0IGdyb3VwcyBpZiBmb3VuZA0KCQlpZiAoaXNzZXQoJHVzZXJEZXRhaWxzWydncm91cHMnXSkgJiYgQXJyYXlIZWxwZXI6OmNoZWNrKCR1c2VyRGV0YWlsc1snZ3JvdXBzJ10pKQ0KCQl7DQoJCQkkZGF0YVsnZ3JvdXBzJ10gPSAkdXNlckRldGFpbHNbJ2dyb3VwcyddOw0KCQl9DQoNCgkJLy8gVXBkYXRlIHRoZSB1c2VyDQoJCWlmICgkbW9kZWwtPnNhdmUoJGRhdGEpKQ0KCQl7DQoJCQlyZXR1cm4gJHVzZXJEZXRhaWxzWydpZCddOw0KCQl9DQoNCgkJJGVycm9yX21lc3NhZ2VzID0gJyc7DQoJCWlmIChtZXRob2RfZXhpc3RzKCRtb2RlbCwgJ2dldEVycm9yJykpDQoJCXsNCgkJCSRlcnJvcnMgPSAkbW9kZWwtPmdldEVycm9yKCk7DQoJCQlpZiAoIWVtcHR5KCRlcnJvcnMpKQ0KCQkJew0KCQkJCWlmIChpc19hcnJheSgkZXJyb3JzKSkNCgkJCQl7DQoJCQkJCSRlcnJvcl9tZXNzYWdlcyA9ICc8YnI+JyAuIGltcGxvZGUoJzxicj4nLCAkZXJyb3JzKTsNCgkJCQl9DQoJCQkJZWxzZWlmIChpc19zdHJpbmcoJGVycm9ycykpDQoJCQkJew0KCQkJCQkkZXJyb3JfbWVzc2FnZXMgPSAnPGJyPicgLiAkZXJyb3JzOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCXRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigNCgkJCVRleHQ6OnNwcmludGYoJ1VwZGF0ZSBvZiB1c2VyICVzICglcykgZmFpbGVkISVzJywNCgkJCQkoc3RyaW5nKSAkdXNlckRldGFpbHNbJ3VzZXJuYW1lJ10sDQoJCQkJKHN0cmluZykgJHVzZXJEZXRhaWxzWydlbWFpbCddLA0KCQkJCShzdHJpbmcpICRlcnJvcl9tZXNzYWdlcw0KCQkJKQ0KCQkpOw0KCX0NCg0KCS8qKg0KCSAqIE1ldGhvZCB0byBnZXQgYW4gaW5zdGFuY2Ugb2YgYSB1c2VyIGZvciB0aGUgZ2l2ZW4gaWQuDQoJICoNCgkgKiBAcGFyYW0gICBpbnQgICRpZCAgVGhlIGlkDQoJICoNCgkgKiBAcmV0dXJuICBVc2VyDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VXNlckJ5SWQoaW50ICRpZCk6IFVzZXINCgl7DQoJCSByZXR1cm4gbmV3IFVzZXIoJGlkKTsNCgl9DQoNCgkvKioNCgkgKiBSZXRyaWV2ZSB0aGUgdXNlciBJRCBieSB1c2VybmFtZS4NCgkgKg0KCSAqIEBwYXJhbSAgIHN0cmluZyAgJHVzZXJuYW1lICBUaGUgdXNlcm5hbWUgdG8gY2hlY2suDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbCAgVGhlIHVzZXIgSUQgaWYgdGhlIHVzZXIgZXhpc3RzLCBudWxsIG90aGVyd2lzZS4NCgkgKg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VySWRCeVVzZXJuYW1lKHN0cmluZyAkdXNlcm5hbWUpOiA/aW50DQoJew0KCQkkdXNlcklkID0gSm9vbWxhVXNlckhlbHBlcjo6Z2V0VXNlcklkKCR1c2VybmFtZSk7DQoJCXJldHVybiAkdXNlcklkID86IG51bGw7DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmUgdGhlIHVzZXIgSUQgYnkgZW1haWwuDQoJICoNCgkgKiBAcGFyYW0gICBzdHJpbmcgICRlbWFpbCAgVGhlIGVtYWlsIGFkZHJlc3MgdG8gY2hlY2suDQoJICoNCgkgKiBAcmV0dXJuICBpbnR8bnVsbCAgVGhlIHVzZXIgSUQgaWYgdGhlIHVzZXIgZXhpc3RzLCBudWxsIG90aGVyd2lzZS4NCgkgKg0KCSAqIEBzaW5jZSAgIDUuMC4zDQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VySWRCeUVtYWlsKHN0cmluZyAkZW1haWwpOiA/aW50DQoJew0KCQkvLyBJbml0aWFsaXNlIHNvbWUgdmFyaWFibGVzDQoJCSRkYiA9IEZhY3Rvcnk6OmdldERibygpOw0KCQkkcXVlcnkgPSAkZGItPmdldFF1ZXJ5KHRydWUpDQoJCQktPnNlbGVjdCgkZGItPnF1b3RlTmFtZSgnaWQnKSkNCgkJCS0+ZnJvbSgkZGItPnF1b3RlTmFtZSgnI19fdXNlcnMnKSkNCgkJCS0+d2hlcmUoJGRiLT5xdW90ZU5hbWUoJ2VtYWlsJykgLiAnID0gOmVtYWlsJykNCgkJCS0+YmluZCgnOmVtYWlsJywgJGVtYWlsKQ0KCQkJLT5zZXRMaW1pdCgxKTsNCgkJJGRiLT5zZXRRdWVyeSgkcXVlcnkpOw0KDQoJCSR1c2VySWQgPSAkZGItPmxvYWRSZXN1bHQoKTsNCgkJcmV0dXJuICR1c2VySWQgPzogbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBMb2FkIHRoZSBjb3JyZWN0IHVzZXIgbW9kZWwgYmFzZWQgb24gdGhlIHJlZ2lzdHJhdGlvbiBtb2RlLg0KCSAqDQoJICogQHBhcmFtICAgaW50ICAkbW9kZSAgVGhlIHJlZ2lzdHJhdGlvbiBtb2RlLg0KCSAqDQoJICogQHJldHVybiAgQmFzZURhdGFiYXNlTW9kZWwgIFRoZSBhcHByb3ByaWF0ZSB1c2VyIG1vZGVsLg0KCSAqDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGdldE1vZGVsQnlNb2RlKGludCAkbW9kZSk6IEJhc2VEYXRhYmFzZU1vZGVsDQoJew0KCQlpZiAoJG1vZGUgPT09IDEpDQoJCXsNCgkJCXJldHVybiBDb21wb25lbnQ6OmdldE1vZGVsKCdSZWdpc3RyYXRpb24nLCAnU2l0ZScsICdjb21fdXNlcnMnKTsNCgkJfQ0KDQoJCXJldHVybiBDb21wb25lbnQ6OmdldE1vZGVsKCdVc2VyJywgJ0FkbWluaXN0cmF0b3InLCAnY29tX3VzZXJzJyk7DQoJfQ0KDQoJLyoqDQoJICogUHJlcGFyZSB1c2VyIGRhdGEgYXJyYXkgZm9yIHJlZ2lzdHJhdGlvbiBvciB1cGRhdGUuDQoJICoNCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzICBVc2VyIGNyZWRlbnRpYWxzLg0KCSAqIEBwYXJhbSAgIGludCAgICAkbW9kZSAgICAgICAgIFRoZSByZWdpc3RyYXRpb24gbW9kZS4NCgkgKg0KCSAqIEByZXR1cm4gIGFycmF5ICBUaGUgcHJlcGFyZWQgdXNlciBkYXRhIGFycmF5Lg0KCSAqDQoJICogQHNpbmNlICAgNS4wLjMNCgkgKi8NCglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIHByZXBhcmVVc2VyRGF0YShhcnJheSAkY3JlZGVudGlhbHMsIGludCAkbW9kZSkNCgl7DQoJCSRkYXRhID0gWw0KCQkJJ3VzZXJuYW1lJyA9PiAkY3JlZGVudGlhbHNbJ3VzZXJuYW1lJ10sDQoJCQknbmFtZScgPT4gJGNyZWRlbnRpYWxzWyduYW1lJ10sDQoJCQknYmxvY2snID0+IDANCgkJXTsNCg0KCQlpZiAoJG1vZGUgPT09IDEpDQoJCXsNCgkJCSRkYXRhWydlbWFpbDEnXSA9ICRjcmVkZW50aWFsc1snZW1haWwnXTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJCSRkYXRhWydlbWFpbCddID0gJGNyZWRlbnRpYWxzWydlbWFpbCddOw0KCQkJJGRhdGFbJ3JlZ2lzdGVyRGF0ZSddID0gRmFjdG9yeTo6Z2V0RGF0ZSgpLT50b1NxbCgpOw0KCQl9DQoNCgkJaWYgKCRtb2RlID09PSAxICYmIGVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSkpDQoJCXsNCgkJCSRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSA9IFN0cmluZ0hlbHBlcjo6cmFuZG9tKDEwKTsNCgkJCSRjcmVkZW50aWFsc1sncGFzc3dvcmQyJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkJ107DQoJCX0NCg0KCQlpZiAoIWVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQnXSkgJiYgIWVtcHR5KCRjcmVkZW50aWFsc1sncGFzc3dvcmQyJ10pKQ0KCQl7DQoJCQkkZGF0YVsncGFzc3dvcmQxJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkJ107DQoJCQkkZGF0YVsncGFzc3dvcmQyJ10gPSAkY3JlZGVudGlhbHNbJ3Bhc3N3b3JkMiddOw0KCQl9DQoNCgkJaWYgKCRtb2RlID09PSAwICYmIGlzc2V0KCRjcmVkZW50aWFsc1snZ3JvdXBzJ10pICYmIEFycmF5SGVscGVyOjpjaGVjaygkY3JlZGVudGlhbHNbJ2dyb3VwcyddKSkNCgkJew0KCQkJJGRhdGFbJ2dyb3VwcyddID0gJGNyZWRlbnRpYWxzWydncm91cHMnXTsNCgkJfQ0KDQoJCXJldHVybiAkZGF0YTsNCgl9DQoNCgkvKioNCgkgKiBIYW5kbGUgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGZvciBhZG1pbiBtb2RlLg0KCSAqDQoJICogQHBhcmFtICAgQmFzZURhdGFiYXNlTW9kZWwgICRtb2RlbCAgVGhlIHVzZXIgbW9kZWwuDQoJICogQHBhcmFtICAgYXJyYXkgICAgICAgICAgICAgICRkYXRhICAgVGhlIHVzZXIgZGF0YS4NCgkgKg0KCSAqIEByZXR1cm4gIGludCAgVGhlIElEIG9mIHRoZSBjcmVhdGVkIHVzZXIuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGFkbWluUmVnaXN0ZXIoQmFzZURhdGFiYXNlTW9kZWwgJG1vZGVsLCBhcnJheSAkZGF0YSk6IGludA0KCXsNCgkJJG1vZGVsLT5zYXZlKCRkYXRhKTsNCg0KCQlyZXR1cm4gJG1vZGVsLT5nZXRTdGF0ZSgndXNlci5pZCcsIDApOw0KCX0NCg0KCS8qKg0KCSAqIEhhbmRsZSBwb3N0LXJlZ2lzdHJhdGlvbiBwcm9jZXNzZXMgbGlrZSBhdXRvLWxvZ2luLg0KCSAqDQoJICogQHBhcmFtICAgaW50ICAgICR1c2VySWQgICAgICBUaGUgSUQgb2YgdGhlIGNyZWF0ZWQgdXNlci4NCgkgKiBAcGFyYW0gICBpbnQgICAgJGF1dG9sb2dpbiAgIEZsYWcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYXV0by1sb2dpbiB0aGUgdXNlci4NCgkgKiBAcGFyYW0gICBhcnJheSAgJGNyZWRlbnRpYWxzIFRoZSB1c2VyIGNyZWRlbnRpYWxzLg0KCSAqDQoJICogQHJldHVybiAgaW50IFRoZSB1c2VyIElEIG9uIHN1Y2Nlc3MuDQoJICoNCgkgKiBAc2luY2UgICA1LjAuMw0KCSAqLw0KCXByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGhhbmRsZVBvc3RSZWdpc3RyYXRpb24oaW50ICR1c2VySWQsIGludCAkYXV0b2xvZ2luLCBhcnJheSAkY3JlZGVudGlhbHMpOiBpbnQNCgl7DQoJCS8vIG1ha2Ugc3VyZSB1c2VyIGlzIGl0IHRoZSBjb3JyZWN0IGdyb3Vwcw0KCQlpZiAoJHVzZXJJZCA+IDAgJiYgIWVtcHR5KCRjcmVkZW50aWFsc1snZ3JvdXBzJ10pKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQlKb29tbGFVc2VySGVscGVyOjpzZXRVc2VyR3JvdXBzKCR1c2VySWQsICRjcmVkZW50aWFsc1snZ3JvdXBzJ10pOw0KCQkJfQ0KCQkJY2F0Y2ggKFxFeGNlcHRpb24gJGUpDQoJCQl7DQoJCQkJLy8gd2UgbWlnaHQgbmVlZCBzYXkgc29tZXRoaW5nDQoJCQl9DQoJCX0NCg0KCQlpZiAoJGF1dG9sb2dpbiAmJiAhZW1wdHkoJGNyZWRlbnRpYWxzWydwYXNzd29yZCddKSkNCgkJew0KCQkJdHJ5DQoJCQl7DQoJCQkJRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+bG9naW4oJGNyZWRlbnRpYWxzKTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlKQ0KCQkJew0KCQkJCS8vIHdlIG1pZ2h0IG5lZWQgdG8gcmVkaXJlY3QgaGVyZT8NCgkJCX0NCgkJfQ0KDQoJCXJldHVybiAkdXNlcklkOw0KCX0NCg0KCS8qKg0KCSAqIEFkZHJlc3MgYnVnIG9uIFxKb29tbGFcQ01TXE1WQ1xNb2RlbFxGb3JtQmVoYXZpb3JUcmFpdCBMaW5lIDc2DQoJICogICBUaGUgdXNlIG9mIEpQQVRIX0NPTVBPTkVOVCBjYXVzZSBpdCB0byBsb2FkIHRoZQ0KCSAqICAgYWN0aXZlIGNvbXBvbmVudCBmb3JtcyBhbmQgZmllbGRzLCB3aGljaCBicmVha3MgdGhlIHJlZ2lzdHJhdGlvbiBtb2RlbC4NCgkgKg0KCSAqIEBwYXJhbSBpbnQgICRtb2RlDQoJICoNCgkgKiBAc2luY2UgNS4wLjMNCgkgKi8NCglwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBzZXRGb3JtUGF0aEZvclVzZXJDbGFzcyhpbnQgJG1vZGUpOiB2b2lkDQoJew0KCQlpZiAoJG1vZGUgPT0gMSkgLy8gMSA9IHVzZSBvZiB0aGUgUmVnaXN0cmF0aW9uIE1vZGVsDQoJCXsNCgkJCS8vIEdldCB0aGUgZm9ybS4NCgkJCUZvcm06OmFkZEZvcm1QYXRoKEpQQVRIX1JPT1QgLiAnL2NvbXBvbmVudHMvY29tX3VzZXJzL2Zvcm1zJyk7DQoJCX0NCgl9', '{}', '{}', NULL, 1, '2024-08-29 15:27:21', 46, 0, 1), (822, '46b98346-ec98-42b3-a393-96c7d1282b1c', 'VDM.Data.UsersSubform', 'UsersSubform', 'final class', 'CRUD the user data of any sub-form to another view (table)\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '{\"0\":\"576685fd-263c-46bb-9fdc-1f5eb234cbb6\",\"1\":\"34959721-415b-4b5e-8002-3d1fc84b3b2b\"}', '', '[[[NamespacePrefix]]]\\Joomla\\Data.UsersSubform', 1, '{}', '{}', 'dXNlIEpvb21sYVxDTVNcRmFjdG9yeTsNCnVzZSBKb29tbGFcQ01TXFVzZXJcVXNlcjs=', '{\"use_selection0\":{\"use\":\"7212e4db-371f-4cfd-8122-32e9bb100d83\",\"as\":\"Items\"},\"use_selection1\":{\"use\":\"5acded67-0e3d-4c6b-a6ea-b533b076de0c\",\"as\":\"default\"},\"use_selection2\":{\"use\":\"7832a726-87b6-4e95-887e-7b725d3fab8f\",\"as\":\"default\"},\"use_selection3\":{\"use\":\"1c10a5f1-204d-4f17-ad9f-0e0684f2030d\",\"as\":\"default\"},\"use_selection4\":{\"use\":\"640b5352-fb09-425f-a26e-cd44eda03f15\",\"as\":\"Component\"}}', 'CS8qKg0KCSAqIFRoZSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllci4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXVzZSBHdWlkOw0KDQoJLyoqDQoJICogVGhlIEl0ZW1zIENsYXNzLg0KCSAqDQoJICogQHZhciAgIEl0ZW1zDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHJvdGVjdGVkIEl0ZW1zICRpdGVtczsNCg0KCS8qKg0KCSAqIFRhYmxlIE5hbWUNCgkgKg0KCSAqIEB2YXIgICAgc3RyaW5nDQoJICogQHNpbmNlIDMuMi4xDQoJICovDQoJcHJvdGVjdGVkIHN0cmluZyAkdGFibGU7DQoNCgkvKioNCgkgKiBUaGUgdXNlciBwcm9wZXJ0aWVzDQoJICoNCgkgKiBAdmFyICAgIGFycmF5DQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHJvdGVjdGVkIGFycmF5ICR1c2VyOw0KDQoJLyoqDQoJICogVGhlIGN1cnJlbnQgYWN0aXZlIHVzZXINCgkgKg0KCSAqIEB2YXIgICAgVXNlcg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXByb3RlY3RlZCBVc2VyICRpZGVudGl0eTsNCg0KCS8qKg0KCSAqIFRoZSBhY3RpdmUgdXNlcnMNCgkgKg0KCSAqIEB2YXIgICAgYXJyYXkNCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgYXJyYXkgJGFjdGl2ZVVzZXJzID0gW107DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3Rvci4NCgkgKg0KCSAqIEBwYXJhbSBJdGVtcyAgICAgICAkaXRlbXMgICBUaGUgaXRlbXMgQ2xhc3MuDQoJICogQHBhcmFtIHN0cmluZ3xudWxsICR0YWJsZSAgIFRoZSB0YWJsZSBuYW1lLg0KCSAqDQoJICogQHNpbmNlIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEl0ZW1zICRpdGVtcywgP3N0cmluZyAkdGFibGUgPSBudWxsKQ0KCXsNCgkJJHRoaXMtPml0ZW1zID0gJGl0ZW1zOw0KCQlpZiAoJHRhYmxlICE9PSBudWxsKQ0KCQl7DQoJCQkkdGhpcy0+dGFibGUgPSAkdGFibGU7DQoJCX0NCg0KCQkkdGhpcy0+aWRlbnRpdHkgPSBGYWN0b3J5OjpnZXRBcHBsaWNhdGlvbigpLT5nZXRJZGVudGl0eSgpOw0KDQoJCS8vIFJldHJpZXZlIHRoZSB1c2VyIHByb3BlcnRpZXMNCgkJJHRoaXMtPmluaXRpYWxpemVVc2VyUHJvcGVydGllcygpOw0KCX0NCg0KCS8qKg0KCSAqIFNldCB0aGUgY3VycmVudCBhY3RpdmUgdGFibGUNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhYmxlIFRoZSB0YWJsZSB0aGF0IHNob3VsZCBiZSBhY3RpdmUNCgkgKg0KCSAqIEByZXR1cm4gc2VsZg0KCSAqIEBzaW5jZSAgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gdGFibGUoc3RyaW5nICR0YWJsZSk6IHNlbGYNCgl7DQoJCSR0aGlzLT50YWJsZSA9ICR0YWJsZTsNCg0KCQlyZXR1cm4gJHRoaXM7DQoJfQ0KDQoJLyoqDQoJICogR2V0IGEgc3ViZm9ybSBpdGVtcw0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAgICRsaW5rVmFsdWUgIFRoZSB2YWx1ZSBvZiB0aGUgbGluayBrZXkgaW4gY2hpbGQgdGFibGUuDQoJICogQHBhcmFtIHN0cmluZyAgICRsaW5rS2V5ICAgIFRoZSBsaW5rIGtleSBvbiB3aGljaCB0aGUgaXRlbXMgd2hlcmUgbGlua2VkIGluIHRoZSBjaGlsZCB0YWJsZS4NCgkgKiBAcGFyYW0gc3RyaW5nICAgJGZpZWxkICAgICAgVGhlIHBhcmVudCBmaWVsZCBuYW1lIG9mIHRoZSBzdWJmb3JtIGluIHRoZSBwYXJlbnQgdmlldy4NCgkgKiBAcGFyYW0gYXJyYXkgICAgJGdldCAgICAgICAgVGhlIGFycmF5IGdldDpzZXQgb2YgdGhlIGtleXMgb2YgZWFjaCByb3cgaW4gdGhlIHN1YmZvcm0uDQoJICogQHBhcmFtIGJvb2wgICAgICRtdWx0aSAgICAgIFRoZSBzd2l0Y2ggdG8gcmV0dXJuIGEgbXVsdGlwbGUgc2V0Lg0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsICAgVGhlIHN1YmZvcm0NCgkgKiBAc2luY2UgIDMuMi4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldChzdHJpbmcgJGxpbmtWYWx1ZSwgc3RyaW5nICRsaW5rS2V5LCBzdHJpbmcgJGZpZWxkLCBhcnJheSAkZ2V0LCBib29sICRtdWx0aSA9IHRydWUpOiA/YXJyYXkNCgl7DQoJCWlmICgoJGl0ZW1zID0gJHRoaXMtPml0ZW1zLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPmdldChbJGxpbmtWYWx1ZV0sICRsaW5rS2V5KSkgIT09IG51bGwpDQoJCXsNCgkJCXJldHVybiAkdGhpcy0+Y29udmVydGVyKA0KCQkJCSR0aGlzLT5nZXRVc2Vyc0RldGFpbHMoJGl0ZW1zKSwNCgkJCQkkZ2V0LA0KCQkJCSRmaWVsZCwNCgkJCQkkbXVsdGkNCgkJCSk7DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBTZXQgYSBzdWJmb3JtIGl0ZW1zDQoJICoNCgkgKiBAcGFyYW0gbWl4ZWQgICAgJGl0ZW1zICAgICAgVGhlIGxpc3Qgb2YgaXRlbXMgZnJvbSB0aGUgc3ViZm9ybSB0byBzZXQNCgkgKiBAcGFyYW0gc3RyaW5nICAgJGluZGV4S2V5ICAgVGhlIGluZGV4IGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIG9ic2VydmVkIGFzIGl0IHJlbGF0ZXMgdG8gaW5zZXJ0L3VwZGF0ZS9kZWxldGUuDQoJICogQHBhcmFtIHN0cmluZyAgICRsaW5rS2V5ICAgIFRoZSBsaW5rIGtleSBvbiB3aGljaCB0aGUgaXRlbXMgd2hlcmUgbGlua2VkIGluIHRoZSBjaGlsZCB0YWJsZS4NCgkgKiBAcGFyYW0gc3RyaW5nICAgJGxpbmtWYWx1ZSAgVGhlIHZhbHVlIG9mIHRoZSBsaW5rIGtleSBpbiBjaGlsZCB0YWJsZS4NCgkgKg0KCSAqIEByZXR1cm4gYm9vbA0KCSAqIEBzaW5jZSAgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gc2V0KG1peGVkICRpdGVtcywgc3RyaW5nICRpbmRleEtleSwgc3RyaW5nICRsaW5rS2V5LCBzdHJpbmcgJGxpbmtWYWx1ZSk6IGJvb2wNCgl7DQoJCSRpdGVtcyA9ICR0aGlzLT5wcm9jZXNzKCRpdGVtcywgJGluZGV4S2V5LCAkbGlua0tleSwgJGxpbmtWYWx1ZSk7DQoNCgkJJHRoaXMtPnB1cmdlKCRpdGVtcywgJGluZGV4S2V5LCAkbGlua0tleSwgJGxpbmtWYWx1ZSk7DQoNCgkJaWYgKGVtcHR5KCRpdGVtcykpDQoJCXsNCgkJCXJldHVybiB0cnVlOyAvLyBub3RoaW5nIHRvIHNldCAoYWxyZWFkeSBwdXJnZWQpDQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPml0ZW1zLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPnNldCgNCgkJCSRpdGVtcywgJGluZGV4S2V5DQoJCSk7DQoJfQ0KDQoJLyoqDQoJICogR2V0IHRoZSBjdXJyZW50IGFjdGl2ZSB0YWJsZQ0KCSAqDQoJICogQHJldHVybiAgc3RyaW5nDQoJICogQHNpbmNlICAgMy4yLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZ2V0VGFibGUoKTogc3RyaW5nDQoJew0KCQlyZXR1cm4gJHRoaXMtPnRhYmxlOw0KCX0NCg0KCS8qKg0KCSAqIEluaXRpYWxpemVzIHRoZSB1c2VyIHByb3BlcnRpZXMuDQoJICoNCgkgKiBAcmV0dXJuIHZvaWQNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBpbml0aWFsaXplVXNlclByb3BlcnRpZXMoKTogdm9pZA0KCXsNCgkJJHVzZXIgPSBVc2VySGVscGVyOjpnZXRVc2VyQnlJZCgwKTsNCg0KCQkvLyBQb3B1bGF0ZSB1c2VyIHByb3BlcnRpZXMgYXJyYXkgZXhjbHVkaW5nIHRoZSAnaWQnDQoJCWZvcmVhY2ggKGdldF9vYmplY3RfdmFycygkdXNlcikgYXMgJHByb3BlcnR5ID0+ICR2YWx1ZSkNCgkJew0KCQkJaWYgKCRwcm9wZXJ0eSAhPT0gJ2lkJykNCgkJCXsNCgkJCQkkdGhpcy0+dXNlclskcHJvcGVydHldID0gJHByb3BlcnR5Ow0KCQkJfQ0KCQl9DQoJCSR0aGlzLT51c2VyWydwYXNzd29yZDInXSA9ICdwYXNzd29yZDInOw0KCX0NCg0KCS8qKg0KCSAqIFB1cmdlIGFsbCBpdGVtcyBubyBsb25nZXIgaW4gc3ViZm9ybQ0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAgICRpdGVtcyAgICAgIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIHNldC4NCgkgKiBAcGFyYW0gc3RyaW5nICAgJGluZGV4S2V5ICAgVGhlIGluZGV4IGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIG9ic2VydmVkIGFzIGl0IHJlbGF0ZXMgdG8gaW5zZXJ0L3VwZGF0ZS9kZWxldGUNCgkgKiBAcGFyYW0gc3RyaW5nICAgJGxpbmtLZXkgICAgVGhlIGxpbmsga2V5IG9uIHdoaWNoIHRoZSBpdGVtcyB3aGVyZSBsaW5rZWQgaW4gdGhlIGNoaWxkIHRhYmxlLg0KCSAqIEBwYXJhbSBzdHJpbmcgICAkbGlua1ZhbHVlICBUaGUgdmFsdWUgb2YgdGhlIGxpbmsga2V5IGluIGNoaWxkIHRhYmxlLg0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcHVyZ2UoYXJyYXkgJGl0ZW1zLCBzdHJpbmcgJGluZGV4S2V5LCBzdHJpbmcgJGxpbmtLZXksIHN0cmluZyAkbGlua1ZhbHVlKTogdm9pZA0KCXsNCgkJLy8gR2V0IHRoZSBjdXJyZW50IGluZGV4IHZhbHVlcyBmcm9tIHRoZSBkYXRhYmFzZQ0KCQkkY3VycmVudEluZGV4VmFsdWVzID0gJHRoaXMtPml0ZW1zLT50YWJsZSgkdGhpcy0+Z2V0VGFibGUoKSktPnZhbHVlcyhbJGxpbmtWYWx1ZV0sICRsaW5rS2V5LCAkaW5kZXhLZXkpOw0KDQoJCWlmICgkY3VycmVudEluZGV4VmFsdWVzICE9PSBudWxsKQ0KCQl7DQoJCQkvLyBDaGVjayBpZiB0aGUgaXRlbXMgYXJyYXkgaXMgZW1wdHkNCgkJCWlmIChlbXB0eSgkaXRlbXMpKQ0KCQkJew0KCQkJCS8vIFNldCBhY3RpdmVJbmRleFZhbHVlcyB0byBhbiBlbXB0eSBhcnJheSBpZiBpdGVtcyBpcyBlbXB0eQ0KCQkJCSRhY3RpdmVJbmRleFZhbHVlcyA9IFtdOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCS8vIEV4dHJhY3QgdGhlIGluZGV4IHZhbHVlcyBmcm9tIHRoZSBpdGVtcyBhcnJheQ0KCQkJCSRhY3RpdmVJbmRleFZhbHVlcyA9IGFycmF5X3ZhbHVlcyhhcnJheV9tYXAoZnVuY3Rpb24oJGl0ZW0pIHVzZSAoJGluZGV4S2V5KSB7DQoJCQkJCXJldHVybiAkaXRlbVskaW5kZXhLZXldID8/IG51bGw7DQoJCQkJfSwgJGl0ZW1zKSk7DQoJCQl9DQoNCgkJCS8vIEZpbmQgdGhlIGluZGV4IHZhbHVlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlIGl0ZW1zIGFycmF5DQoJCQkkaW5hY3RpdmVJbmRleFZhbHVlcyA9IGFycmF5X2RpZmYoJGN1cnJlbnRJbmRleFZhbHVlcywgJGFjdGl2ZUluZGV4VmFsdWVzKTsNCg0KCQkJLy8gRGVsZXRlIHRoZSBpbmFjdGl2ZSBpbmRleCB2YWx1ZXMNCgkJCWlmICghZW1wdHkoJGluYWN0aXZlSW5kZXhWYWx1ZXMpKQ0KCQkJew0KCQkJCSR0aGlzLT5pdGVtcy0+dGFibGUoJHRoaXMtPmdldFRhYmxlKCkpLT5kZWxldGUoJGluYWN0aXZlSW5kZXhWYWx1ZXMsICRpbmRleEtleSk7DQoNCgkJCQkvLyAkdGhpcy0+ZGVsZXRlVXNlcnMoJGluYWN0aXZlSW5kZXhWYWx1ZXMpOyAoc29vbikNCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEdldCB0aGUgdXNlcnMgZGV0YWlscyBmb3VuZCBpbiB0aGUgdXNlciB0YWJsZS4NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGl0ZW1zICBBcnJheSBvZiBvYmplY3RzIG9yIGFycmF5cyB0byBiZSBmaWx0ZXJlZC4NCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBnZXRVc2Vyc0RldGFpbHMoYXJyYXkgJGl0ZW1zKTogYXJyYXkNCgl7DQoJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaW5kZXggPT4gJiRpdGVtKQ0KCQl7DQoJCQkkaXRlbSA9IChhcnJheSkgJGl0ZW07DQoJCQkkdGhpcy0+Z2V0VXNlckRldGFpbHMoJGl0ZW0pOw0KCQl9DQoNCgkJcmV0dXJuICRpdGVtczsNCgl9DQoNCgkvKioNCgkgKiBHZXQgdGhlIHVzZXIgZGV0YWlscyBmb3VuZCBpbiB0aGUgdXNlciB0YWJsZS4NCgkgKg0KCSAqIEBwYXJhbSBhcnJheSAgJGl0ZW0gIFRoZSB1c2VyIG1hcCBhcnJheQ0KCSAqDQoJICogQHJldHVybiB2b2lkDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gZ2V0VXNlckRldGFpbHMoYXJyYXkgJiRpdGVtKTogdm9pZA0KCXsNCgkJLy8gVmFsaWRhdGUgdGhlIHVzZXJfaWQgYW5kIGVuc3VyZSBpdCBpcyBudW1lcmljIGFuZCBncmVhdGVyIHRoYW4gMA0KCQlpZiAoZW1wdHkoJGl0ZW1bJ3VzZXJfaWQnXSkgfHwgIWlzX251bWVyaWMoJGl0ZW1bJ3VzZXJfaWQnXSkgfHwgJGl0ZW1bJ3VzZXJfaWQnXSA8PSAwKQ0KCQl7DQoJCQlyZXR1cm47DQoJCX0NCg0KCQkvLyBSZXRyaWV2ZSB0aGUgdXNlciBieSBJRA0KCQkkdXNlciA9IFVzZXJIZWxwZXI6OmdldFVzZXJCeUlkKChpbnQpJGl0ZW1bJ3VzZXJfaWQnXSk7DQoNCgkJLy8gVmVyaWZ5IGlmIHRoZSB1c2VyIGV4aXN0cyBhbmQgdGhlIElEIG1hdGNoZXMNCgkJaWYgKCR1c2VyICYmICR1c2VyLT5pZCA9PT0gKGludCkgJGl0ZW1bJ3VzZXJfaWQnXSkNCgkJew0KCQkJLy8gSXRlcmF0ZSBvdmVyIHB1YmxpYyBwcm9wZXJ0aWVzIG9mIHRoZSB1c2VyIG9iamVjdA0KCQkJZm9yZWFjaCAoZ2V0X29iamVjdF92YXJzKCR1c2VyKSBhcyAkcHJvcGVydHkgPT4gJHZhbHVlKQ0KCQkJew0KCQkJCS8vIEF2b2lkIG92ZXJ3cml0aW5nIHRoZSBpZCBpbiB0aGUgaXRlbQ0KCQkJCWlmICgkcHJvcGVydHkgIT09ICdpZCcpDQoJCQkJew0KCQkJCQkkaXRlbVskcHJvcGVydHldID0gJHZhbHVlOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8qKg0KCSAqIEZpbHRlcnMgdGhlIHNwZWNpZmllZCBrZXlzIGZyb20gYW4gYXJyYXkgb2Ygb2JqZWN0cyBvciBhcnJheXMsIGNvbnZlcnRzIHRoZW0gdG8gYXJyYXlzLA0KCSAqIGFuZCBzZXRzIHRoZW0gYnkgYXNzb2NpYXRpb24gd2l0aCBhIHNwZWNpZmllZCBrZXkgYW5kIGFuIGluY3JlbWVudGluZyBpbnRlZ2VyLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICAkaXRlbXMgIEFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXlzIHRvIGJlIGZpbHRlcmVkLg0KCSAqIEBwYXJhbSBhcnJheSAgJGtleVNldCBBcnJheSBvZiBrZXlzIHRvIHJldGFpbiBpbiBlYWNoIGl0ZW0uDQoJICogQHBhcmFtIHN0cmluZyAkZmllbGQgIFRoZSBmaWVsZCBwcmVmaXggZm9yIHRoZSByZXN1bHRpbmcgYXNzb2NpYXRpdmUgYXJyYXkuDQoJICogQHBhcmFtIGJvb2wgICAkbXVsdGkgIFRoZSBzd2l0Y2ggdG8gcmV0dXJuIGEgbXVsdGlwbGUgc2V0Lg0KCSAqDQoJICogQHJldHVybiBhcnJheSBBcnJheSBvZiBmaWx0ZXJlZCBhcnJheXMgc2V0IGJ5IGFzc29jaWF0aW9uLg0KCSAqIEBzaW5jZSAgMy4yLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGNvbnZlcnRlcihhcnJheSAkaXRlbXMsIGFycmF5ICRrZXlTZXQsIHN0cmluZyAkZmllbGQsIGJvb2wgJG11bHRpKTogYXJyYXkNCgl7DQoJCS8qKg0KCQkgKiBGaWx0ZXJzIGtleXMgZm9yIGEgc2luZ2xlIGl0ZW0gYW5kIGNvbnZlcnRzIGl0IHRvIGFuIGFycmF5Lg0KCQkgKg0KCQkgKiBAcGFyYW0gb2JqZWN0fGFycmF5ICRpdGVtICAgVGhlIGl0ZW0gdG8gZmlsdGVyLg0KCQkgKiBAcGFyYW0gYXJyYXkgICAgICAgICRrZXlTZXQgVGhlIGtleXMgdG8gcmV0YWluLg0KCQkgKg0KCQkgKiBAcmV0dXJuIGFycmF5IFRoZSBmaWx0ZXJlZCBhcnJheS4NCgkJICogQHNpbmNlIDMuMi4yDQoJCSAqLw0KCQkkZmlsdGVyS2V5cyA9IGZ1bmN0aW9uICgkaXRlbSwgYXJyYXkgJGtleVNldCkgew0KCQkJJGZpbHRlcmVkQXJyYXkgPSBbXTsNCgkJCWZvcmVhY2ggKCRrZXlTZXQgYXMgJGtleSkgew0KCQkJCWlmIChpc19vYmplY3QoJGl0ZW0pICYmIHByb3BlcnR5X2V4aXN0cygkaXRlbSwgJGtleSkpIHsNCgkJCQkJJGZpbHRlcmVkQXJyYXlbJGtleV0gPSAkaXRlbS0+eyRrZXl9Ow0KCQkJCX0gZWxzZWlmIChpc19hcnJheSgkaXRlbSkgJiYgYXJyYXlfa2V5X2V4aXN0cygka2V5LCAkaXRlbSkpIHsNCgkJCQkJJGZpbHRlcmVkQXJyYXlbJGtleV0gPSAkaXRlbVska2V5XTsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gJGZpbHRlcmVkQXJyYXk7DQoJCX07DQoNCgkJJHJlc3VsdCA9IFtdOw0KCQlmb3JlYWNoICgkaXRlbXMgYXMgJGluZGV4ID0+ICRpdGVtKQ0KCQl7DQoJCQlpZiAoISRtdWx0aSkNCgkJCXsNCgkJCQlyZXR1cm4gJGZpbHRlcktleXMoJGl0ZW0sICRrZXlTZXQpOw0KCQkJfQ0KCQkJJGZpbHRlcmVkQXJyYXkgPSAkZmlsdGVyS2V5cygkaXRlbSwgJGtleVNldCk7DQoJCQkkcmVzdWx0WyRmaWVsZCAuICRpbmRleF0gPSAkZmlsdGVyZWRBcnJheTsNCgkJfQ0KDQoJCXJldHVybiAkcmVzdWx0Ow0KCX0NCg0KCS8qKg0KCSAqIFByb2Nlc3NlcyBhbiBhcnJheSBvZiBhcnJheXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBrZXkuDQoJICoNCgkgKiBAcGFyYW0gbWl4ZWQgICAgJGl0ZW1zICAgICAgQXJyYXkgb2YgYXJyYXlzIHRvIGJlIHByb2Nlc3NlZC4NCgkgKiBAcGFyYW0gc3RyaW5nICAgJGluZGV4S2V5ICAgVGhlIGluZGV4IGtleSBvbiB3aGljaCB0aGUgaXRlbXMgc2hvdWxkIGJlIG9ic2VydmVkIGFzIGl0IHJlbGF0ZXMgdG8gaW5zZXJ0L3VwZGF0ZS9kZWxldGUNCgkgKiBAcGFyYW0gc3RyaW5nICAgJGxpbmtLZXkgICAgVGhlIGxpbmsga2V5IG9uIHdoaWNoIHRoZSBpdGVtcyB3aGVyZSBsaW5rZWQgaW4gdGhlIGNoaWxkIHRhYmxlLg0KCSAqIEBwYXJhbSBzdHJpbmcgICAkbGlua1ZhbHVlICBUaGUgdmFsdWUgb2YgdGhlIGxpbmsga2V5IGluIGNoaWxkIHRhYmxlLg0KCSAqDQoJICogQHJldHVybiBhcnJheSAgVGhlIHByb2Nlc3NlZCBhcnJheSBvZiBhcnJheXMuDQoJICogQHNpbmNlICAzLjIuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gcHJvY2VzcygkaXRlbXMsIHN0cmluZyAkaW5kZXhLZXksIHN0cmluZyAkbGlua0tleSwgc3RyaW5nICRsaW5rVmFsdWUpOiBhcnJheQ0KCXsNCgkJJGl0ZW1zID0gaXNfYXJyYXkoJGl0ZW1zKSA/ICRpdGVtcyA6IFtdOw0KCQlpZiAoJGl0ZW1zICE9PSBbXSAmJiAhJHRoaXMtPmlzTXVsdGlwbGVTZXRzKCRpdGVtcykpDQoJCXsNCgkJCSRpdGVtcyA9IFskaXRlbXNdOw0KCQl9DQoNCgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRuID0+ICYkaXRlbSkNCgkJew0KCQkJJHZhbHVlID0gJGl0ZW1bJGluZGV4S2V5XSA/PyAnJzsNCgkJCXN3aXRjaCAoJGluZGV4S2V5KSB7DQoJCQkJY2FzZSAnZ3VpZCc6DQoJCQkJCWlmIChlbXB0eSgkdmFsdWUpKQ0KCQkJCQl7DQoJCQkJCQkvLyBzZXQgSU5ERVgNCgkJCQkJCSRpdGVtWyRpbmRleEtleV0gPSAkdGhpcy0+Z2V0R3VpZCgkaW5kZXhLZXkpOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWNhc2UgJ2lkJzoNCgkJCQkJaWYgKGVtcHR5KCR2YWx1ZSkpDQoJCQkJCXsNCgkJCQkJCSRpdGVtWyRpbmRleEtleV0gPSAwOw0KCQkJCQl9DQoJCQkJCWJyZWFrOw0KCQkJCWRlZmF1bHQ6DQoJCQkJCS8vIE5vIGFjdGlvbiBmb3Igb3RoZXIga2V5cyBpZiBlbXB0eQ0KCQkJCQlicmVhazsNCgkJCX0NCg0KCQkJLy8gc2V0IExJTksNCgkJCSRpdGVtWyRsaW5rS2V5XSA9ICRsaW5rVmFsdWU7DQoNCgkJCS8vIGNyZWF0ZS91cGRhdGUgdXNlcg0KCQkJJGl0ZW1bJ3VzZXJfaWQnXSA9ICR0aGlzLT5zZXRVc2VyRGV0YWlscygNCgkJCQkkaXRlbSwNCgkJCQkkdGhpcy0+Z2V0QWN0aXZlVXNlcnMoDQoJCQkJCSRsaW5rS2V5LA0KCQkJCQkkbGlua1ZhbHVlDQoJCQkJKQ0KCQkJKTsNCg0KCQkJLy8gcmVtb3ZlIGVtcHR5IHJvdyAobWVhbnMgbm8gdXNlciBsaW5rZWQpDQoJCQlpZiAoJGl0ZW1bJ3VzZXJfaWQnXSA9PSAwKQ0KCQkJew0KCQkJCXVuc2V0KCRpdGVtc1skbl0pOw0KCQkJfQ0KCQl9DQoNCgkJcmV0dXJuIGFycmF5X3ZhbHVlcygkaXRlbXMpOw0KCX0NCg0KCS8qKg0KCSAqIEdldCBjdXJyZW50IGFjdGl2ZSBVc2VycyBMaW5rZWQgdG8gdGhpcyBlbnRpdHkNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgICAkbGlua0tleSAgICBUaGUgbGluayBrZXkgb24gd2hpY2ggdGhlIGl0ZW1zIHdoZXJlIGxpbmtlZCBpbiB0aGUgY2hpbGQgdGFibGUuDQoJICogQHBhcmFtIHN0cmluZyAgICRsaW5rVmFsdWUgIFRoZSB2YWx1ZSBvZiB0aGUgbGluayBrZXkgaW4gY2hpbGQgdGFibGUuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5ICAgVGhlIElEcyBvZiBhbGwgYWN0aXZlIHVzZXJzLg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGdldEFjdGl2ZVVzZXJzKHN0cmluZyAkbGlua0tleSwgc3RyaW5nICRsaW5rVmFsdWUpOiBhcnJheQ0KCXsNCgkJaWYgKGlzc2V0KCR0aGlzLT5hY3RpdmVVc2Vyc1skbGlua0tleSAuICRsaW5rVmFsdWVdKSkNCgkJew0KCQkJcmV0dXJuICR0aGlzLT5hY3RpdmVVc2Vyc1skbGlua0tleSAuICRsaW5rVmFsdWVdOw0KCQl9DQoNCgkJaWYgKCgkdXNlcnMgPSAkdGhpcy0+aXRlbXMtPnRhYmxlKCR0aGlzLT5nZXRUYWJsZSgpKS0+dmFsdWVzKFskbGlua1ZhbHVlXSwgJGxpbmtLZXksICd1c2VyX2lkJykpICE9PSBudWxsKQ0KCQl7DQoJCQkkdGhpcy0+YWN0aXZlVXNlcnNbJGxpbmtLZXkgLiAkbGlua1ZhbHVlXSA9ICR1c2VyczsNCgkJCXJldHVybiAkdXNlcnM7DQoJCX0NCg0KCQlyZXR1cm4gW107DQoJfQ0KDQoJLyoqDQoJICogSGFuZGxlcyBzZXR0aW5nIHVzZXIgZGV0YWlscyBhbmQgc2F2aW5nIHRoZW0uDQoJICoNCgkgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgdXNlciBieSBJRCwgc2V0cyB0aGUgdXNlciBkZXRhaWxzLCANCgkgKiBhbmQgYWRkcyBhcHByb3ByaWF0ZSB1c2VyIGdyb3VwcyBiZWZvcmUgc2F2aW5nIHRoZSB1c2VyLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRpdGVtICAgICAgICBUaGUgdXNlciBkZXRhaWxzIHBhc3NlZCBieSByZWZlcmVuY2UuDQoJICogQHBhcmFtIGFycmF5ICRhY3RpdmVVc2VycyBUaGUgY3VycmVudCBhY3RpdmUgdXNlciBsaW5rZWQgdG8gdGhpcyBlbnRpdHkuDQoJICoNCgkgKiBAcmV0dXJuIGludCBUaGUgSUQgb2YgdGhlIHNhdmVkIHVzZXIsIG9yIDAgb24gZmFpbHVyZS4NCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBzZXRVc2VyRGV0YWlscyhhcnJheSAmJGl0ZW0sIGFycmF5ICRhY3RpdmVVc2Vycyk6IGludA0KCXsNCgkJJHVzZXIgPSAkdGhpcy0+bG9hZFVzZXIoJGl0ZW0sICRhY3RpdmVVc2Vycyk7DQoJCSRkZXRhaWxzID0gJHRoaXMtPmV4dHJhY3RVc2VyRGV0YWlscygkaXRlbSwgJHVzZXIpOw0KDQoJCWlmICgkdGhpcy0+aWRlbnRpdHktPmlkICE9ICR1c2VyLT5pZCkNCgkJew0KCQkJJHRoaXMtPmFzc2lnblVzZXJHcm91cHMoJGRldGFpbHMsICR1c2VyLCAkaXRlbSk7DQoJCX0NCg0KCQlyZXR1cm4gJHRoaXMtPnNhdmVVc2VyRGV0YWlscygkZGV0YWlscywgJGRldGFpbHNbJ2lkJ10gPz8gMCk7DQoJfQ0KDQoJLyoqDQoJICogTG9hZCB0aGUgdXNlciBiYXNlZCBvbiB0aGUgdXNlciBJRCBmcm9tIHRoZSBpdGVtIGFycmF5Lg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRpdGVtICAgICAgICAgVGhlIGFycmF5IGNvbnRhaW5pbmcgdXNlciBkZXRhaWxzLg0KCSAqIEBwYXJhbSBhcnJheSAkYWN0aXZlVXNlcnMgIFRoZSBjdXJyZW50IGFjdGl2ZSB1c2VyIGxpbmtlZCB0byB0aGlzIGVudGl0eS4NCgkgKiANCgkgKiBAcmV0dXJuIFVzZXJ8bnVsbCBUaGUgdXNlciBvYmplY3QgaWYgZm91bmQsIG51bGwgb3RoZXJ3aXNlLg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGxvYWRVc2VyKGFycmF5ICRpdGVtLCBhcnJheSAkYWN0aXZlVXNlcnMpOiA/VXNlcg0KCXsNCgkJaWYgKCFpc3NldCgkaXRlbVsndXNlcl9pZCddKSB8fCAhaXNfbnVtZXJpYygkaXRlbVsndXNlcl9pZCddKSB8fCAkaXRlbVsndXNlcl9pZCddIDw9IDApDQoJCXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoNCgkJLy8gb25seSBhbGxvdyB1cGRhdGUgdG8gbGlua2VkIHVzZXJzDQoJCWlmICghaW5fYXJyYXkoJGl0ZW1bJ3VzZXJfaWQnXSwgJGFjdGl2ZVVzZXJzKSkNCgkJew0KCQkJcmV0dXJuIG51bGw7DQoJCX0NCg0KCQkkdXNlciA9IFVzZXJIZWxwZXI6OmdldFVzZXJCeUlkKChpbnQpICRpdGVtWyd1c2VyX2lkJ10pOw0KDQoJCWlmICgkdXNlciAmJiAkdXNlci0+aWQgPT0gJGl0ZW1bJ3VzZXJfaWQnXSkNCgkJew0KCQkJcmV0dXJuICR1c2VyOw0KCQl9DQoNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogRXh0cmFjdCB1c2VyIGRldGFpbHMgZnJvbSB0aGUgaXRlbSBhcnJheSBhbmQgcHJlcGFyZSB0aGVtIGZvciBzYXZpbmcuDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICAgICRpdGVtIFRoZSBhcnJheSBjb250YWluaW5nIHVzZXIgZGV0YWlscy4NCgkgKiBAcGFyYW0gVXNlcnxudWxsICR1c2VyIFRoZSB1c2VyIG9iamVjdCBpZiBmb3VuZCwgbnVsbCBvdGhlcndpc2UuDQoJICogDQoJICogQHJldHVybiBhcnJheSBUaGUgcHJlcGFyZWQgdXNlciBkZXRhaWxzIGFycmF5Lg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RVc2VyRGV0YWlscyhhcnJheSAmJGl0ZW0sID9Vc2VyICR1c2VyKTogYXJyYXkNCgl7DQoJCSRkZXRhaWxzID0gW107DQoNCgkJaWYgKCR1c2VyICE9PSBudWxsKQ0KCQl7DQoJCQkkZGV0YWlsc1snaWQnXSA9IChpbnQpICRpdGVtWyd1c2VyX2lkJ107DQoJCX0NCg0KCQlmb3JlYWNoICgkdGhpcy0+dXNlciBhcyAkcHJvcGVydHkpDQoJCXsNCgkJCWlmIChpc3NldCgkaXRlbVskcHJvcGVydHldKSkNCgkJCXsNCgkJCQkkZGV0YWlsc1skcHJvcGVydHldID0gJGl0ZW1bJHByb3BlcnR5XTsNCgkJCQl1bnNldCgkaXRlbVskcHJvcGVydHldKTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiAkZGV0YWlsczsNCgl9DQoNCgkvKioNCgkgKiBBc3NpZ25zIHVzZXIgZ3JvdXBzIGJhc2VkIG9uIGV4aXN0aW5nIGdyb3VwcyBhbmQgZW50aXR5IHR5cGUuDQoJICoNCgkgKiBAcGFyYW0gYXJyYXkgICAgICYkZGV0YWlscyBUaGUgYXJyYXkgdG8gc3RvcmUgdXNlciBkZXRhaWxzIGluY2x1ZGluZyBncm91cHMuDQoJICogQHBhcmFtIFVzZXJ8bnVsbCAkdXNlciAgICAgVGhlIHVzZXIgb2JqZWN0IGlmIGZvdW5kLCBudWxsIG90aGVyd2lzZS4NCgkgKiBAcGFyYW0gYXJyYXkgICAgICRpdGVtICAgICBUaGUgYXJyYXkgY29udGFpbmluZyBhZGRpdGlvbmFsIHVzZXIgZGV0YWlscy4NCgkgKg0KCSAqIEByZXR1cm4gdm9pZA0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gYXNzaWduVXNlckdyb3VwcyhhcnJheSAmJGRldGFpbHMsID9Vc2VyICR1c2VyLCBhcnJheSAkaXRlbSk6IHZvaWQNCgl7DQoJCSRncm91cHMgPSAkdXNlciAhPT0gbnVsbCA/IChhcnJheSkgJHVzZXItPmdyb3VwcyA6IFtdOw0KDQoJCWlmICghZW1wdHkoJGl0ZW1bJ2VudGl0eV90eXBlJ10pKQ0KCQl7DQoJCQkkZ2xvYmFsX2VudGl0eV9ncm91cHMgPSBDb21wb25lbnQ6OmdldFBhcmFtcygpLT5nZXQoJGl0ZW1bJ2VudGl0eV90eXBlJ10gLiAnX2dyb3VwcycsIFtdKTsNCgkJCWZvcmVhY2ggKCRnbG9iYWxfZW50aXR5X2dyb3VwcyBhcyAkZ3JvdXApDQoJCQl7DQoJCQkJaWYgKCFpbl9hcnJheSgkZ3JvdXAsICRncm91cHMpKQ0KCQkJCXsNCgkJCQkJJGdyb3Vwc1tdID0gJGdyb3VwOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCS8vIEVuc3VyZSAkZGV0YWlsc1snZ3JvdXBzJ10gaXMgYW4gYXJyYXkgaWYgaXQgZXhpc3RzLCBlbHNlIGRlZmF1bHQgdG8gYW4gZW1wdHkgYXJyYXkNCgkJJGRldGFpbHNHcm91cHMgPSBpc3NldCgkZGV0YWlsc1snZ3JvdXBzJ10pID8gKGFycmF5KSAkZGV0YWlsc1snZ3JvdXBzJ10gOiBbXTsNCg0KCQkvLyBNZXJnZSB0aGUgYXJyYXlzIGFuZCByZW1vdmUgZHVwbGljYXRlcw0KCQkkbWVyZ2VkR3JvdXBzID0gYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRkZXRhaWxzR3JvdXBzLCAkZ3JvdXBzKSk7DQoNCgkJLy8gT25seSBzZXQgJGRldGFpbHNbJ2dyb3VwcyddIGlmIHRoZSBtZXJnZWQgYXJyYXkgaXMgbm90IGVtcHR5DQoJCWlmICghZW1wdHkoJG1lcmdlZEdyb3VwcykpDQoJCXsNCgkJCSRkZXRhaWxzWydncm91cHMnXSA9ICRtZXJnZWRHcm91cHM7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl1bnNldCgkZGV0YWlsc1snZ3JvdXBzJ10pOw0KCQl9DQoJfQ0KDQoJLyoqDQoJICogU2F2ZSB0aGUgdXNlciBkZXRhaWxzIHVzaW5nIFVzZXJIZWxwZXIgYW5kIGhhbmRsZSBleGNlcHRpb25zLg0KCSAqDQoJICogQHBhcmFtIGFycmF5ICRkZXRhaWxzIFRoZSBwcmVwYXJlZCB1c2VyIGRldGFpbHMgYXJyYXkuDQoJICogQHBhcmFtIGludCAgICR1c2VySWQgIFRoZSBJRCBvZiB0aGUgdXNlciBiZWluZyBwcm9jZXNzZWQuDQoJICogDQoJICogQHJldHVybiBpbnQgVGhlIElEIG9mIHRoZSBzYXZlZCB1c2VyLCBvciAwIG9uIGZhaWx1cmUuDQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBzYXZlVXNlckRldGFpbHMoYXJyYXkgJGRldGFpbHMsIGludCAkdXNlcklkKTogaW50DQoJew0KCQl0cnkgew0KCQkJcmV0dXJuIFVzZXJIZWxwZXI6OnNhdmUoJGRldGFpbHMsIDAsIFsndXNlcmFjdGl2YXRpb24nID0+IDAsICdzZW5kcGFzc3dvcmQnID0+IDEsICdhbGxvd1VzZXJSZWdpc3RyYXRpb24nID0+IDFdKTsNCgkJfSBjYXRjaCAoTm9Vc2VySWRGb3VuZEV4Y2VwdGlvbiAkZSkgew0KCQkJRmFjdG9yeTo6Z2V0QXBwbGljYXRpb24oKS0+ZW5xdWV1ZU1lc3NhZ2UoJGUtPmdldE1lc3NhZ2UoKSwgJ2Vycm9yJyk7DQoJCX0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsNCgkJCUZhY3Rvcnk6OmdldEFwcGxpY2F0aW9uKCktPmVucXVldWVNZXNzYWdlKCRlLT5nZXRNZXNzYWdlKCksICd3YXJuaW5nJyk7DQoJCQlyZXR1cm4gJHVzZXJJZDsNCgkJfQ0KDQoJCXJldHVybiAwOw0KCX0NCg0KCS8qKg0KCSAqIEZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgYXJyYXkgY29uc2lzdHMgb2YgbXVsdGlwbGUgZGF0YSBzZXRzIChhcnJheXMgb2YgYXJyYXlzKS4NCgkgKiANCgkgKiBAcGFyYW0gYXJyYXkgJGFycmF5IFRoZSBpbnB1dCBhcnJheSB0byBiZSBjaGVja2VkLg0KCSAqIA0KCSAqIEByZXR1cm4gYm9vbCBUcnVlIGlmIHRoZSBhcnJheSBjb250YWlucyBvbmx5IGFycmF5cyAobXVsdGlwbGUgZGF0YSBzZXRzKSwgZmFsc2Ugb3RoZXJ3aXNlLg0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGlzTXVsdGlwbGVTZXRzKGFycmF5ICRhcnJheSk6IGJvb2wNCgl7DQoJCWZvcmVhY2ggKCRhcnJheSBhcyAkZWxlbWVudCkNCgkJew0KCQkJLy8gQXMgc29vbiBhcyB3ZSBmaW5kIGEgbm9uLWFycmF5IGVsZW1lbnQsIHJldHVybiBmYWxzZQ0KCQkJaWYgKCFpc19hcnJheSgkZWxlbWVudCkpDQoJCQl7DQoJCQkJcmV0dXJuIGZhbHNlOw0KCQkJfQ0KCQl9DQoNCgkJLy8gSWYgYWxsIGVsZW1lbnRzIGFyZSBhcnJheXMsIHJldHVybiB0cnVlDQoJCXJldHVybiB0cnVlOw0KCX0=', '{}', '{}', NULL, 1, '2024-09-01 23:13:51', 31, 0, 1), -(823, '5acded67-0e3d-4c6b-a6ea-b533b076de0c', 'VDM.Data.Guid', 'Guid', 'trait', 'Globally Unique Identifier\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Data.Guid', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFJldHVybnMgYSBHVUlEdjQgc3RyaW5nLg0KCSAqIA0KCSAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYmVzdCBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgbWV0aG9kDQoJICogYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSB3aXRoIGEgZmFsbGJhY2sgdG8gYW4gb2xkZXIsIGxlc3Mgc2VjdXJlIHZlcnNpb24uDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjayBhbmQgbW9kaWZ5IHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIEEgR1VJRHY0IHN0cmluZy4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRHdWlkKHN0cmluZyAka2V5KTogc3RyaW5nDQoJew0KCQkvLyBXaW5kb3dzOiBVc2UgY29tX2NyZWF0ZV9ndWlkIGlmIGF2YWlsYWJsZQ0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdjb21fY3JlYXRlX2d1aWQnKSkNCgkJew0KCQkJJGd1aWQgPSB0cmltKFxjb21fY3JlYXRlX2d1aWQoKSwgJ3t9Jyk7DQoJCQlyZXR1cm4gJHRoaXMtPmNoZWNrR3VpZCgkZ3VpZCwgJGtleSk7DQoJCX0NCg0KCQkvLyBVbml4LWJhc2VkIHN5c3RlbXM6IFVzZSBvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMgaWYgYXZhaWxhYmxlDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ3JhbmRvbV9ieXRlcycpKQ0KCQl7DQoJCQl0cnkgew0KCQkJCSRkYXRhID0gcmFuZG9tX2J5dGVzKDE2KTsNCgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KCQkJCS8vIEhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAobG9nZ2luZywgdGhyb3dpbmcsIGV0Yy4pDQoJCQkJcmV0dXJuICR0aGlzLT5mYWxsYmFja0d1aWQoJGtleSk7DQoJCQl9DQoNCgkJCS8vIFNldCB0aGUgdmVyc2lvbiB0byAwMTAwIGFuZCB0aGUgYml0cyA2LTcgdG8gMTAgYXMgcGVyIFJGQyA0MTIyDQoJCQkkZGF0YVs2XSA9IGNocihvcmQoJGRhdGFbNl0pICYgMHgwZiB8IDB4NDApOw0KCQkJJGRhdGFbOF0gPSBjaHIob3JkKCRkYXRhWzhdKSAmIDB4M2YgfCAweDgwKTsNCg0KCQkJJGd1aWQgPSB2c3ByaW50ZignJXMlcy0lcy0lcy0lcy0lcyVzJXMnLCBzdHJfc3BsaXQoYmluMmhleCgkZGF0YSksIDQpKTsNCgkJCXJldHVybiAkdGhpcy0+Y2hlY2tHdWlkKCRndWlkLCAka2V5KTsNCgkJfQ0KDQoJCS8vIEZhbGxiYWNrIHRvIG9sZGVyIG1ldGhvZHMgaWYgc2VjdXJlIG1ldGhvZHMgYXJlIG5vdCBhdmFpbGFibGUNCgkJcmV0dXJuICR0aGlzLT5mYWxsYmFja0d1aWQoJGtleSk7DQoJfQ0KDQoJLyoqDQoJICogVmFsaWRhdGUgdGhlIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZUd1aWQoJGd1aWQpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGEgc3RyaW5nDQoJCWlmICghZW1wdHkoJGd1aWQpICYmIGlzX3N0cmluZygkZ3VpZCkpDQoJCXsNCgkJCXJldHVybiBwcmVnX21hdGNoKCIvXihceyk/W2EtZlxkXXs4fSgtW2EtZlxkXXs0fSl7NH1bYS1mXGRdezh9KD8oMSlcfSkkL2kiLCAkZ3VpZCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIEdlbmVyYXRlcyBhIGZhbGxiYWNrIEdVSUR2NCB1c2luZyBsZXNzIHNlY3VyZSBtZXRob2RzLg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAka2V5IFRoZSBrZXkgdG8gY2hlY2sgYW5kIG1vZGlmeSB2YWx1ZXMuDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyBBIEdVSUR2NCBzdHJpbmcuDQoJICoNCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwcml2YXRlIGZ1bmN0aW9uIGZhbGxiYWNrR3VpZChzdHJpbmcgJGtleSk6IHN0cmluZw0KCXsNCgkJJGNoYXJpZCA9IHN0cnRvbG93ZXIobWQ1KHVuaXFpZChyYW5kb21faW50KDAsIFBIUF9JTlRfTUFYKSwgdHJ1ZSkpKTsNCgkJJGd1aWR2NCA9IHNwcmludGYoDQoJCQknJXMtJXMtJXMtJXMtJXMnLA0KCQkJc3Vic3RyKCRjaGFyaWQsICAwLCA4KSwNCgkJCXN1YnN0cigkY2hhcmlkLCAgOCwgNCksDQoJCQlzdWJzdHIoJGNoYXJpZCwgMTIsIDQpLA0KCQkJc3Vic3RyKCRjaGFyaWQsIDE2LCA0KSwNCgkJCXN1YnN0cigkY2hhcmlkLCAyMCwgMTIpDQoJCSk7DQoNCgkJcmV0dXJuICR0aGlzLT5jaGVja0d1aWQoJGd1aWR2NCwgJGtleSk7DQoJfQ0KDQoJLyoqDQoJICogQ2hlY2tzIGlmIHRoZSBHVUlEIHZhbHVlIGlzIHVuaXF1ZSBhbmQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgVGhlIEdVSUQgdmFsdWUgdG8gY2hlY2suDQoJICogQHBhcmFtIHN0cmluZyAka2V5ICBUaGUga2V5IHRvIGNoZWNrIGFuZCBtb2RpZnkgdmFsdWVzLg0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgVGhlIHVuaXF1ZSBHVUlEIHZhbHVlLg0KCSAqDQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0d1aWQoc3RyaW5nICRndWlkLCBzdHJpbmcgJGtleSk6IHN0cmluZw0KCXsNCgkJLy8gQ2hlY2sgdGhhdCB0aGUgR1VJRCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0DQoJCWlmICgkdGhpcy0+aXRlbXMtPnRhYmxlKCR0aGlzLT5nZXRUYWJsZSgpKS0+dmFsdWVzKFskZ3VpZF0sICRrZXkpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmdldEd1aWQoJGtleSk7DQoJCX0NCg0KCQlyZXR1cm4gJGd1aWQ7DQoJfQ==', '{}', '{}', NULL, 1, '2024-09-02 00:08:44', 4, 0, 1), +(823, '5acded67-0e3d-4c6b-a6ea-b533b076de0c', 'VDM.Data.Guid', 'Guid', 'trait', 'Globally Unique Identifier\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Data.Guid', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFJldHVybnMgYSBHVUlEdjQgc3RyaW5nLg0KCSAqIA0KCSAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYmVzdCBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgbWV0aG9kDQoJICogYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSB3aXRoIGEgZmFsbGJhY2sgdG8gYW4gb2xkZXIsIGxlc3Mgc2VjdXJlIHZlcnNpb24uDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjayBhbmQgbW9kaWZ5IHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIEEgR1VJRHY0IHN0cmluZy4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRHdWlkKHN0cmluZyAka2V5KTogc3RyaW5nDQoJew0KCQkvLyBXaW5kb3dzOiBVc2UgY29tX2NyZWF0ZV9ndWlkIGlmIGF2YWlsYWJsZQ0KCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdjb21fY3JlYXRlX2d1aWQnKSkNCgkJew0KCQkJJGd1aWQgPSB0cmltKFxjb21fY3JlYXRlX2d1aWQoKSwgJ3t9Jyk7DQoJCQlyZXR1cm4gJHRoaXMtPmNoZWNrR3VpZCgkZ3VpZCwgJGtleSk7DQoJCX0NCg0KCQkvLyBVbml4LWJhc2VkIHN5c3RlbXM6IFVzZSBvcGVuc3NsX3JhbmRvbV9wc2V1ZG9fYnl0ZXMgaWYgYXZhaWxhYmxlDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ3JhbmRvbV9ieXRlcycpKQ0KCQl7DQoJCQl0cnkgew0KCQkJCSRkYXRhID0gcmFuZG9tX2J5dGVzKDE2KTsNCgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KCQkJCS8vIEhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseSAobG9nZ2luZywgdGhyb3dpbmcsIGV0Yy4pDQoJCQkJcmV0dXJuICR0aGlzLT5mYWxsYmFja0d1aWQoJGtleSk7DQoJCQl9DQoNCgkJCS8vIFNldCB0aGUgdmVyc2lvbiB0byAwMTAwIGFuZCB0aGUgYml0cyA2LTcgdG8gMTAgYXMgcGVyIFJGQyA0MTIyDQoJCQkkZGF0YVs2XSA9IGNocihvcmQoJGRhdGFbNl0pICYgMHgwZiB8IDB4NDApOw0KCQkJJGRhdGFbOF0gPSBjaHIob3JkKCRkYXRhWzhdKSAmIDB4M2YgfCAweDgwKTsNCg0KCQkJJGd1aWQgPSB2c3ByaW50ZignJXMlcy0lcy0lcy0lcy0lcyVzJXMnLCBzdHJfc3BsaXQoYmluMmhleCgkZGF0YSksIDQpKTsNCgkJCXJldHVybiAkdGhpcy0+Y2hlY2tHdWlkKCRndWlkLCAka2V5KTsNCgkJfQ0KDQoJCS8vIEZhbGxiYWNrIHRvIG9sZGVyIG1ldGhvZHMgaWYgc2VjdXJlIG1ldGhvZHMgYXJlIG5vdCBhdmFpbGFibGUNCgkJcmV0dXJuICR0aGlzLT5mYWxsYmFja0d1aWQoJGtleSk7DQoJfQ0KDQoJLyoqDQoJICogVmFsaWRhdGUgdGhlIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wNCgkgKiBAc2luY2UgIDUuMC40DQoJICovDQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZUd1aWQoJGd1aWQpDQoJew0KCQkvLyBjaGVjayBpZiB3ZSBoYXZlIGEgc3RyaW5nDQoJCWlmICghZW1wdHkoJGd1aWQpICYmIGlzX3N0cmluZygkZ3VpZCkpDQoJCXsNCgkJCXJldHVybiBwcmVnX21hdGNoKCIvXihceyk/W2EtZlxkXXs4fSgtW2EtZlxkXXs0fSl7NH1bYS1mXGRdezh9KD8oMSlcfSkkL2kiLCAkZ3VpZCk7DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCS8qKg0KCSAqIENoZWNrcyBpZiB0aGUgR1VJRCB2YWx1ZSBpcyB1bmlxdWUgYW5kIGRvZXMgbm90IGFscmVhZHkgZXhpc3QuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkIFRoZSBHVUlEIHZhbHVlIHRvIGNoZWNrLg0KCSAqIEBwYXJhbSBzdHJpbmcgJGtleSAgVGhlIGtleSB0byBjaGVjayBhbmQgbW9kaWZ5IHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIFRoZSB1bmlxdWUgR1VJRCB2YWx1ZS4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0d1aWQoc3RyaW5nICRndWlkLCBzdHJpbmcgJGtleSk6IHN0cmluZw0KCXsNCgkJLy8gQ2hlY2sgdGhhdCB0aGUgR1VJRCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0DQoJCWlmICgkdGhpcy0+aXRlbXMtPnRhYmxlKCR0aGlzLT5nZXRUYWJsZSgpKS0+dmFsdWVzKFskZ3VpZF0sICRrZXkpKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmdldEd1aWQoJGtleSk7DQoJCX0NCg0KCQlyZXR1cm4gJGd1aWQ7DQoJfQ0KDQoJLyoqDQoJICogR2VuZXJhdGVzIGEgZmFsbGJhY2sgR1VJRHY0IHVzaW5nIGxlc3Mgc2VjdXJlIG1ldGhvZHMuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjayBhbmQgbW9kaWZ5IHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIEEgR1VJRHY0IHN0cmluZy4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXByaXZhdGUgZnVuY3Rpb24gZmFsbGJhY2tHdWlkKHN0cmluZyAka2V5KTogc3RyaW5nDQoJew0KCQkkY2hhcmlkID0gc3RydG9sb3dlcihtZDUodW5pcWlkKHJhbmRvbV9pbnQoMCwgUEhQX0lOVF9NQVgpLCB0cnVlKSkpOw0KCQkkZ3VpZHY0ID0gc3ByaW50ZigNCgkJCSclcy0lcy0lcy0lcy0lcycsDQoJCQlzdWJzdHIoJGNoYXJpZCwgIDAsIDgpLA0KCQkJc3Vic3RyKCRjaGFyaWQsICA4LCA0KSwNCgkJCXN1YnN0cigkY2hhcmlkLCAxMiwgNCksDQoJCQlzdWJzdHIoJGNoYXJpZCwgMTYsIDQpLA0KCQkJc3Vic3RyKCRjaGFyaWQsIDIwLCAxMikNCgkJKTsNCg0KCQlyZXR1cm4gJHRoaXMtPmNoZWNrR3VpZCgkZ3VpZHY0LCAka2V5KTsNCgl9', '{}', '{}', NULL, 1, '2024-09-02 00:08:44', 6, 0, 1), (824, '576685fd-263c-46bb-9fdc-1f5eb234cbb6', 'VDM.Interfaces.Data.GuidInterface', 'GuidInterface', 'interface', 'Globally Unique Identifier Interface\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIyDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\Interfaces.Data.GuidInterface', 0, '{}', '{}', '', '{}', 'CS8qKg0KCSAqIFJldHVybnMgYSBHVUlEdjQgc3RyaW5nLg0KCSAqIA0KCSAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYmVzdCBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUgbWV0aG9kDQoJICogYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSB3aXRoIGEgZmFsbGJhY2sgdG8gYW4gb2xkZXIsIGxlc3Mgc2VjdXJlIHZlcnNpb24uDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRrZXkgVGhlIGtleSB0byBjaGVjayBhbmQgbW9kaWZ5IHZhbHVlcy4NCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nIEEgR1VJRHY0IHN0cmluZy4NCgkgKg0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXRHdWlkKHN0cmluZyAka2V5KTogc3RyaW5nOw==', '{}', '{}', NULL, 1, '2024-09-02 00:11:37', 3, 0, 1), (825, '1c10a5f1-204d-4f17-ad9f-0e0684f2030d', 'Joomla.Utilities.Exception.NoUserIdFoundException', 'NoUserIdFoundException', 'class', 'No User Id Found Exception\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', '-1', '\\InvalidArgumentException', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].Utilities.Exception.NoUserIdFoundException', 0, '{}', '{}', '', '{}', '', '{}', '{}', NULL, 1, '2024-09-02 23:10:09', 1, 0, 1), (831, '12a2a8de-a893-4dbb-a53d-b52de4f6cb0e', 'Joomla.File.Type', 'Type', 'final class', 'File Type Class\r\n\r\n@since 5.0.2', 2, 'LyoqDQogKiBAcGFja2FnZSAgICBKb29tbGEuQ29tcG9uZW50LkJ1aWxkZXINCiAqDQogKiBAY3JlYXRlZCAgICA0dGggU2VwdGVtYmVyLCAyMDIwDQogKiBAYXV0aG9yICAgICBMbGV3ZWxseW4gdmFuIGRlciBNZXJ3ZSA8aHR0cHM6Ly9kZXYudmRtLmlvPg0KICogQGdpdCAgICAgICAgSm9vbWxhIENvbXBvbmVudCBCdWlsZGVyIDxodHRwczovL2dpdC52ZG0uZGV2L2pvb21sYS9Db21wb25lbnQtQnVpbGRlcj4NCiAqIEBjb3B5cmlnaHQgIENvcHlyaWdodCAoQykgMjAxNSBWYXN0IERldmVsb3BtZW50IE1ldGhvZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAqIEBsaWNlbnNlICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBvciBsYXRlcjsgc2VlIExJQ0VOU0UudHh0DQogKi8NCg==', '1.0.0', 0, '', '', '', '', '', '[[[NamespacePrefix]]]\\Joomla\\[[[ComponentNamespace]]].File.Type', 1, '{}', '{}', 'dXNlIEpvb21sYVxGaWxlc3lzdGVtXFBhdGg7', '{\"use_selection0\":{\"use\":\"05744dd3-4030-4cf8-8dda-a93ab809b473\",\"as\":\"Item\"}}', 'CS8qKg0KCSAqIFRoZSBJdGVtIENsYXNzLg0KCSAqDQoJICogQHZhciAgICBJdGVtDQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHJvdGVjdGVkIEl0ZW0gJGl0ZW07DQoNCgkvKioNCgkgKiBUaGUgRmlsZSBUeXBlcw0KCSAqDQoJICogQHZhciAgICBhcnJheQ0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgYXJyYXkgJGZpbGVUeXBlcyA9IFsxID0+ICdpbWFnZScgLCAyID0+ICdkb2N1bWVudCcgLCAzID0+ICdtZWRpYScsIDQgPT4gJ2ZpbGUnXTsNCg0KCS8qKg0KCSAqIENvbnN0cnVjdG9yLg0KCSAqDQoJICogQHBhcmFtIEl0ZW0gICAkaXRlbSAgIFRoZSBJdGVtIENsYXNzLg0KCSAqDQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEl0ZW0gJGl0ZW0pDQoJew0KCQkkdGhpcy0+aXRlbSA9ICRpdGVtOw0KCX0NCg0KCS8qKg0KCSAqIFJldHJpZXZlcyB0aGUgZmlsZSB0eXBlIGRldGFpbHMgKGFqYXgpDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkICAgIFRoZSBHVUlEIChHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllcikgdXNlZCBhcyB0aGUga2V5IHRvIHJldHJpZXZlIHRoZSBmaWxlIHR5cGUNCgkgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgIFRoZSBlbnRpdHkgdGFyZ2V0IG5hbWUuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgICBUaGUgaXRlbSBvYmplY3QgaWYgZm91bmQsIG9yIG51bGwgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QuDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBnZXQoc3RyaW5nICRndWlkLCBzdHJpbmcgJHRhcmdldCk6ID9hcnJheQ0KCXsNCgkJaWYgKCgkZmlsZVR5cGUgPSAkdGhpcy0+ZGV0YWlscygkZ3VpZCkpICE9PSBudWxsICYmDQoJCQkkdGhpcy0+dmFsaWRUYXJnZXQoJGZpbGVUeXBlLCAkdGFyZ2V0KSkNCgkJew0KCQkJcmV0dXJuIFsNCgkJCQknbmFtZScgPT4gJHRoaXMtPmdldEZpZWxkTmFtZSgkZmlsZVR5cGUpLA0KCQkJCSdhbGxvdycgPT4gJHRoaXMtPmdldEFsbG93KCRmaWxlVHlwZSksDQoJCQkJJ2FsbG93X3NwYW4nID0+ICR0aGlzLT5nZXRBbGxvd1NwYW4oJGZpbGVUeXBlKSwNCgkJCQknZmlsZV90eXBlX3NwYW4nID0+ICRmaWxlVHlwZS0+bmFtZSA/PyAnZmlsZScsDQoJCQkJJ2Rpc3BsYXlfZmllbGRzJyA9PiAkZmlsZVR5cGUtPmRpc3BsYXlfZmllbGRzID8/IG51bGwsDQoJCQkJJ3BhcmFtX2ZpZWxkcycgPT4gJGZpbGVUeXBlLT5wYXJhbV9maWVsZHMgPz8gbnVsbCwNCgkJCV07DQoJCX0NCg0KCQlyZXR1cm4gbnVsbDsNCgl9DQoNCgkvKioNCgkgKiBSZXRyaWV2ZXMgdGhlIGZpbGUgdHlwZSBkZXRhaWxzICh1cGxvYWQpDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRndWlkICAgIFRoZSBHVUlEIChHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllcikgdXNlZCBhcyB0aGUga2V5IHRvIHJldHJpZXZlIHRoZSBmaWxlIHR5cGUNCgkgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgIFRoZSBlbnRpdHkgdGFyZ2V0IG5hbWUuDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5fG51bGwgICBUaGUgaXRlbSBvYmplY3QgaWYgZm91bmQsIG9yIG51bGwgaWYgdGhlIGl0ZW0gZG9lcyBub3QgZXhpc3QuDQoJICogQHNpbmNlICA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBsb2FkKHN0cmluZyAkZ3VpZCwgc3RyaW5nICR0YXJnZXQpOiA/YXJyYXkNCgl7DQoJCWlmICgoJGZpbGVUeXBlID0gJHRoaXMtPmRldGFpbHMoJGd1aWQpKSAhPT0gbnVsbCAmJg0KCQkJJHRoaXMtPnZhbGlkVGFyZ2V0KCRmaWxlVHlwZSwgJHRhcmdldCkpDQoJCXsNCgkJCXJldHVybiBbDQoJCQkJJ25hbWUnID0+ICRmaWxlVHlwZS0+bmFtZSA/PyAnZmlsZXMnLA0KCQkJCSdhY2Nlc3MnID0+ICRmaWxlVHlwZS0+YWNjZXNzID8/IDEsDQoJCQkJJ2Rvd25sb2FkX2FjY2VzcycgPT4gJGZpbGVUeXBlLT5kb3dubG9hZF9hY2Nlc3MgPz8gMSwNCgkJCQknZmllbGQnID0+ICR0aGlzLT5nZXRGaWVsZE5hbWUoJGZpbGVUeXBlKSwNCgkJCQkndHlwZScgPT4gJHRoaXMtPmdldEZpZWxkTmFtZSgkZmlsZVR5cGUpLA0KCQkJCSdmb3JtYXRzJyA9PiAkdGhpcy0+Z2V0QWxsb3dGb3JtYXRzKCRmaWxlVHlwZSkgPz8gW10sDQoJCQkJJ2ZpbHRlcicgPT4gJGZpbGVUeXBlLT5maWx0ZXIgPz8gbnVsbCwNCgkJCQkncGF0aCcgPT4gJHRoaXMtPmdldEZpbGVUeXBlUGF0aCgkZmlsZVR5cGUpLA0KCQkJCSdjcm9wJyA9PiAkdGhpcy0+Z2V0Q3JvcERldGFpbHMoJGZpbGVUeXBlKQ0KCQkJXTsNCgkJfQ0KDQoJCXJldHVybiBudWxsOw0KCX0NCg0KCS8qKg0KCSAqIFJldHJpZXZlcyB0aGUgZmlsZSB0eXBlIGRldGFpbHMNCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgICBUaGUgR1VJRCAoR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIpIHVzZWQgYXMgdGhlIGtleSB0byByZXRyaWV2ZSB0aGUgZmlsZSB0eXBlLg0KCSAqDQoJICogQHJldHVybiBvYmplY3R8bnVsbCAgIFRoZSBpdGVtIG9iamVjdCBpZiBmb3VuZCwgb3IgbnVsbCBpZiB0aGUgaXRlbSBkb2VzIG5vdCBleGlzdC4NCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGRldGFpbHMoc3RyaW5nICRndWlkKTogP29iamVjdA0KCXsNCgkJcmV0dXJuICR0aGlzLT5pdGVtLT50YWJsZSgnZmlsZV90eXBlJyktPmdldCgkZ3VpZCk7DQoJfQ0KDQoJLyoqDQoJICogVmFsaWQgaWYgdGhpcyBpcyBhIGNvcnJlY3QgdGFyZ2V0IHRyeWluZyB0byBjYWxsIHRoaXMgZmlsZSB0eXBlDQoJICoNCgkgKiBAcGFyYW0gb2JqZWN0ICAkZGF0YSAgIFRoZSB0eXBlIGRhdGEgYXJyYXkNCgkgKiBAcGFyYW0gc3RyaW5nICAkdGFyZ2V0IFRoZSBlbnRpdHkgdGFyZ2V0IG5hbWUuDQoJICoNCgkgKiBAcmV0dXJuIGJvb2wgICBUcnVlIGlmIHZhbGlkIHRhcmdldA0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRUYXJnZXQob2JqZWN0ICRkYXRhLCBzdHJpbmcgJHRhcmdldCk6IGJvb2wNCgl7DQoJCSR0YXJnZXRzID0gJGRhdGEtPnRhcmdldCA/PyBudWxsOw0KCQlpZiAoIWVtcHR5KCR0YXJnZXRzKSkNCgkJew0KCQkJJHRhcmdldHMgPSAoYXJyYXkpICR0YXJnZXRzOw0KCQkJcmV0dXJuIGluX2FycmF5KCR0YXJnZXQsICR0YXJnZXRzKTsNCgkJfQ0KDQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgkvKioNCgkgKiBSZXRyaWV2ZXMgdGhlIGZpZWxkIG5hbWUNCgkgKg0KCSAqIEBwYXJhbSBvYmplY3QgICRkYXRhICAgVGhlIHR5cGUgZGF0YSBhcnJheQ0KCSAqDQoJICogQHJldHVybiBzdHJpbmcgICBUaGUgZmllbGQgbmFtZQ0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RmllbGROYW1lKG9iamVjdCAkZGF0YSk6IHN0cmluZw0KCXsNCgkJJHR5cGUgPSAkZGF0YS0+dHlwZSA/PyA0Ow0KCQlpZiAoaXNzZXQoJHRoaXMtPmZpbGVUeXBlc1skdHlwZV0pKQ0KCQl7DQoJCQlyZXR1cm4gJHRoaXMtPmZpbGVUeXBlc1skdHlwZV07DQoJCX0NCgkJcmV0dXJuICdmaWxlJzsNCgl9DQoNCgkvKioNCgkgKiBSZXRyaWV2ZXMgdGhlIGltYWdlIGNyb3AgZGV0YWlscyBpZiBzZXQuDQoJICoNCgkgKiBFbnN1cmVzIHRoZSByZXR1cm5lZCBzdHJ1Y3R1cmUgaXMgYWx3YXlzIGFuIGFycmF5IG9mIGFycmF5cywNCgkgKiBjb252ZXJ0aW5nIGFueSBzdGRDbGFzcyB0byBhcnJheSByZWN1cnNpdmVseS4NCgkgKg0KCSAqIEBwYXJhbSAgIG9iamVjdCAgJGRhdGEgIFRoZSB0eXBlIGRhdGEgb2JqZWN0Lg0KCSAqDQoJICogQHJldHVybiAgYXJyYXkgIFRoZSBpbWFnZSBjcm9wIGRldGFpbHMuDQoJICogQHNpbmNlICAgNS4xLjENCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q3JvcERldGFpbHMob2JqZWN0ICRkYXRhKTogYXJyYXkNCgl7DQoJCWlmICgoJGRhdGEtPnR5cGUgPz8gMCkgIT09IDEgfHwgZW1wdHkoJGRhdGEtPmNyb3ApKQ0KCQl7DQoJCQlyZXR1cm4gW107DQoJCX0NCg0KCQkvLyBVc2UgbmF0aXZlIEpTT04gbWV0aG9kIHRvIGRlZXBseSBjb252ZXJ0IHN0ZENsYXNzIOKGkiBhcnJheQ0KCQkkY3JvcCA9IGpzb25fZGVjb2RlKGpzb25fZW5jb2RlKCRkYXRhLT5jcm9wKSwgdHJ1ZSkgPz8gW107DQoNCgkJcmV0dXJuIGFycmF5X3ZhbHVlcygkY3JvcCk7DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmVzIHRoZSBhbGxvdyBmb3JtYXRzIChmb3Igc2NyaXB0KQ0KCSAqDQoJICogQHBhcmFtIG9iamVjdCAgJGRhdGEgICBUaGUgdHlwZSBkYXRhIGFycmF5DQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZyAgIFRoZSBhbGxvdyB2YWx1ZXMNCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFsbG93KG9iamVjdCAkZGF0YSk6IHN0cmluZw0KCXsNCgkJJGZvcm1hdHMgPSAkdGhpcy0+Z2V0QWxsb3dGb3JtYXRzKCRkYXRhKTsNCgkJaWYgKCFlbXB0eSgkZm9ybWF0cykpDQoJCXsNCgkJCXJldHVybiAnKi4oJyAuIGltcGxvZGUoJ3wnLCAkZm9ybWF0cykgLiAnKSc7DQoJCX0NCgkJcmV0dXJuICcnOw0KCX0NCg0KCS8qKg0KCSAqIFJldHJpZXZlcyB0aGUgYWxsb3cgZm9ybWF0cyAoZm9yIHNwYW4pDQoJICoNCgkgKiBAcGFyYW0gb2JqZWN0ICAkZGF0YSAgIFRoZSB0eXBlIGRhdGEgYXJyYXkNCgkgKg0KCSAqIEByZXR1cm4gc3RyaW5nICAgVGhlIGFsbG93IHZhbHVlcw0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxsb3dTcGFuKG9iamVjdCAkZGF0YSk6IHN0cmluZw0KCXsNCgkJJGZvcm1hdHMgPSAkdGhpcy0+Z2V0QWxsb3dGb3JtYXRzKCRkYXRhKTsNCgkJaWYgKCFlbXB0eSgkZm9ybWF0cykpDQoJCXsNCgkJCXJldHVybiAnKGZvcm1hdHMgYWxsb3dlZDogPGI+JyAuIGltcGxvZGUoJywgJywgJGZvcm1hdHMpIC4gJzwvYj4pJzsNCgkJfQ0KCQlyZXR1cm4gJyc7DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmVzIHRoZSBhbGxvdyBmb3JtYXRzDQoJICoNCgkgKiBAcGFyYW0gb2JqZWN0fG51bGwgICRkYXRhICAgVGhlIHR5cGUgZGF0YSBhcnJheQ0KCSAqDQoJICogQHJldHVybiBhcnJheXxudWxsICAgVGhlIGFsbG93IHZhbHVlcw0KCSAqIEBzaW5jZSAgNS4wLjINCgkgKi8NCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0QWxsb3dGb3JtYXRzKG9iamVjdCAkZGF0YSk6ID9hcnJheQ0KCXsNCgkJJHR5cGUgPSAkZGF0YS0+dHlwZSA/PyA0Ow0KCQlzd2l0Y2ggKCR0eXBlKQ0KCQl7DQoJCQljYXNlIDE6DQoJCQkJJGZvcm1hdHMgPSAkZGF0YS0+aW1hZ2VfZm9ybWF0cyA/PyBudWxsOw0KCQkJYnJlYWs7DQoJCQljYXNlIDI6DQoJCQkJJGZvcm1hdHMgPSAkZGF0YS0+ZG9jdW1lbnRfZm9ybWF0cyA/PyBudWxsOw0KCQkJYnJlYWs7DQoJCQljYXNlIDM6DQoJCQkJJGZvcm1hdHMgPSAkZGF0YS0+bWVkaWFfZm9ybWF0cyA/PyBudWxsOw0KCQkJYnJlYWs7DQoJCQlkZWZhdWx0Og0KCQkJCSRmb3JtYXRzID0gJGRhdGEtPmZpbGVfZm9ybWF0cyA/PyBudWxsOw0KCQkJYnJlYWs7DQoJCX0NCg0KCQlpZiAoJGZvcm1hdHMpDQoJCXsNCgkJCXJldHVybiAoYXJyYXkpICRmb3JtYXRzOw0KCQl9DQoNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogUmV0cmlldmVzIHRoZSBmaWxlIHR5cGUgcGF0aCBiYXNlZCBvbiBwcm92aWRlZCBkYXRhLg0KCSAqDQoJICogUGVyZm9ybXMgc2FmZXR5IGNoZWNrcyBhbmQgcmV0dXJucyBlaXRoZXIgYSBjbGVhbmVkIHBhdGggaWYgaXQgZXhpc3RzDQoJICogYW5kIGlzIGEgd3JpdGFibGUgZGlyZWN0b3J5LCBvciBjb25zdHJ1Y3RzIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgJ2ltYWdlcycgZm9sZGVyDQoJICogYmFzZWQgb24gdGhlIGxhc3QgZm9sZGVyIG5hbWUgZnJvbSB0aGUgZ2l2ZW4gcGF0aC4NCgkgKg0KCSAqIEBwYXJhbSBvYmplY3QgICRkYXRhICBUaGUgdHlwZSBkYXRhIG9iamVjdCBjb250YWluaW5nIHBhdGggaW5mb3JtYXRpb24uDQoJICoNCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFJldHVybnMgdGhlIGNsZWFuZWQgZmlsZSBwYXRoIG9yIG51bGwgaWYgbm8gdmFsaWQgcGF0aCBpcyBmb3VuZC4NCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEZpbGVUeXBlUGF0aChvYmplY3QgJGRhdGEpOiA/c3RyaW5nDQoJew0KCQkvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgcGF0aCBkYXRhDQoJCSRwYXRoID0gaXNzZXQoJGRhdGEtPnBhdGgpICYmIGlzX3N0cmluZygkZGF0YS0+cGF0aCkgJiYgdHJpbSgkZGF0YS0+cGF0aCkgIT09ICcnID8NCgkJCVBhdGg6OmNsZWFuKHRyaW0oJGRhdGEtPnBhdGgpKSA6IG51bGw7DQoNCgkJLy8gUmV0dXJuIHRoZSBwYXRoIGlmIGl0J3MgYSB2YWxpZCBkaXJlY3RvcnkgYW5kIHdyaXRhYmxlDQoJCWlmICgkcGF0aCAhPT0gbnVsbCAmJiBpc19kaXIoJHBhdGgpICYmIGlzX3dyaXRhYmxlKCRwYXRoKSkNCgkJew0KCQkJcmV0dXJuICRwYXRoOw0KCQl9DQoNCgkJLy8gSWYgbm8gdmFsaWQgcGF0aCBpcyBmb3VuZCwgdHJ5IHRvIGRlcml2ZSBhIHJlbGF0aXZlIHBhdGggZnJvbSB0aGUgJ2ltYWdlcycgZm9sZGVyDQoJCWlmICgkcGF0aCAhPT0gbnVsbCAmJiAoJGZvbGRlciA9ICR0aGlzLT5nZXRMYXN0Rm9sZGVyTmFtZSgkcGF0aCkpICE9PSBudWxsKQ0KCQl7DQoJCQlyZXR1cm4gSlBBVEhfU0lURSAuICcvaW1hZ2VzLycgLiAkZm9sZGVyOw0KCQl9DQoNCgkJcmV0dXJuIG51bGw7DQoJfQ0KDQoJLyoqDQoJICogUmVjdXJzaXZlbHkgcmV0cmlldmVzIHRoZSBsYXN0IGZvbGRlciBuYW1lIGZyb20gYSBnaXZlbiBwYXRoLCBpZ25vcmluZyBhbnkgZmlsZSBuYW1lcy4NCgkgKiBJZiB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBwYXRoIGNvbnRhaW5zIGEgZG90IChpbmRpY2F0aW5nIGEgZmlsZSksIGl0IG1vdmVzIHVwIHRoZSBkaXJlY3RvcnkgdHJlZQ0KCSAqIHVudGlsIGl0IGZpbmRzIGEgdmFsaWQgZm9sZGVyIG5hbWUuIFJldHVybnMgbnVsbCBpZiBubyB2YWxpZCBmb2xkZXIgaXMgZm91bmQuDQoJICoNCgkgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBmaWxlIHN5c3RlbSBwYXRoIGZyb20gd2hpY2ggdG8gZXh0cmFjdCB0aGUgbGFzdCBmb2xkZXIgbmFtZS4NCgkgKiANCgkgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFJldHVybnMgdGhlIGxhc3QgZm9sZGVyIG5hbWUgaWYgZm91bmQsIG9yIG51bGwgaWYgbm8gdmFsaWQgZm9sZGVyIGV4aXN0cy4NCgkgKiBAc2luY2UgIDUuMC4yDQoJICovDQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldExhc3RGb2xkZXJOYW1lKHN0cmluZyAkcGF0aCk6ID9zdHJpbmcNCgl7DQoJCS8vIFJlbW92ZSBhbnkgdHJhaWxpbmcgc2xhc2hlcyB0byBhdm9pZCBhbiBlbXB0eSByZXN1bHQNCgkJJHBhdGggPSBydHJpbSgkcGF0aCwgJy9cXCcpOw0KDQoJCS8vIElmIHRoZSBwYXRoIGJlY29tZXMgZW1wdHksIHJldHVybiBudWxsIChiYXNlIGNhc2UpDQoJCWlmIChlbXB0eSgkcGF0aCkpDQoJCXsNCgkJCXJldHVybiBudWxsOw0KCQl9DQoNCgkJLy8gR2V0IHRoZSBsYXN0IHBhcnQgb2YgdGhlIHBhdGgNCgkJJGxhc3RQYXJ0ID0gYmFzZW5hbWUoJHBhdGgpOw0KDQoJCS8vIElmIHRoZSBsYXN0IHBhcnQgY29udGFpbnMgYSBkb3QgKGFuZCBpdCdzIG5vdCBhIGhpZGRlbiBmb2xkZXIpLCBtb3ZlIHVwIHRoZSBkaXJlY3RvcnkgdHJlZQ0KCQlpZiAoc3RycG9zKCRsYXN0UGFydCwgJy4nKSA+IDApDQoJCXsNCgkJCS8vIElmIGl0IGNvbnRhaW5zIGEgZG90LCB0cmVhdCBpdCBhcyBhIGZpbGUgYW5kIG1vdmUgdXAgb25lIGxldmVsDQoJCQlyZXR1cm4gJHRoaXMtPmdldExhc3RGb2xkZXJOYW1lKGRpcm5hbWUoJHBhdGgpKTsNCgkJfQ0KDQoJCS8vIFJldHVybiB0aGUgbGFzdCBmb2xkZXIgbmFtZSAoaWYgaXQncyB2YWxpZCBhbmQgbm90IGEgZmlsZSkNCgkJcmV0dXJuICRsYXN0UGFydDsNCgl9', '{}', '{}', NULL, 1, '2024-09-10 02:09:28', 29, 0, 1), @@ -2274,18 +2277,18 @@ INSERT INTO `#__componentbuilder_power` (`id`, `guid`, `system_name`, `name`, `t -- INSERT INTO `#__componentbuilder_admin_view` (`id`, `add_category_submenu`, `add_css_view`, `add_css_views`, `add_custom_button`, `add_fadein`, `add_javascript_view_file`, `add_javascript_view_footer`, `add_javascript_views_file`, `add_javascript_views_footer`, `add_php_after_cancel`, `add_php_after_delete`, `add_php_after_publish`, `add_php_ajax`, `add_php_allowadd`, `add_php_allowedit`, `add_php_batchcopy`, `add_php_batchmove`, `add_php_before_cancel`, `add_php_before_delete`, `add_php_before_publish`, `add_php_before_save`, `add_php_document`, `add_php_getform`, `add_php_getitem`, `add_php_getitems`, `add_php_getitems_after_all`, `add_php_getlistquery`, `add_php_postsavehook`, `add_php_save`, `add_sql`, `addlinked_views`, `addpermissions`, `addtables`, `addtabs`, `ajax_input`, `alias_builder`, `alias_builder_type`, `css_view`, `css_views`, `custom_button`, `description`, `guid`, `icon`, `icon_add`, `icon_category`, `javascript_view_file`, `javascript_view_footer`, `javascript_views_file`, `javascript_views_footer`, `mysql_table_charset`, `mysql_table_collate`, `mysql_table_engine`, `mysql_table_row_format`, `name_list`, `name_single`, `php_after_cancel`, `php_after_delete`, `php_after_publish`, `php_ajaxmethod`, `php_allowadd`, `php_allowedit`, `php_batchcopy`, `php_batchmove`, `php_before_cancel`, `php_before_delete`, `php_before_publish`, `php_before_save`, `php_controller`, `php_controller_list`, `php_document`, `php_getform`, `php_getitem`, `php_getitems`, `php_getitems_after_all`, `php_getlistquery`, `php_model`, `php_model_list`, `php_postsavehook`, `php_save`, `short_description`, `source`, `sql`, `system_name`, `type`, `params`, `published`, `created`, `modified`, `version`, `hits`, `access`, `ordering`) VALUES (109, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{\"addtabs0\":{\"name\":\"Details\"},\"addtabs1\":{\"name\":\"Media\"},\"addtabs2\":{\"name\":\"Participants\"},\"addtabs3\":{\"name\":\"More\"}}', '{}', '', 1, 'LmNvbnRyb2wtd3JhcHBlci1tb3JlIC5jb250cm9sLWxhYmVsIHsNCiAgICBkaXNwbGF5OiBub25lOyAvLyBqdXN0IGZvciBmdW4gOikNCn0=', '', '{}', '', 'c1053952-8a84-4398-aef1-41726f7c0043', 'images/vdm/icon/look.png', 'images/vdm/icon/look_add.png', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Looks', 'Look', '', '', '', '', '', '', '', '', '', '', '', 'IFtDVVNUT01DT0RFPXNhdmVHVUlEUG93ZXJd', '', '', 'W0NVU1RPTUNPREU9dmRtVXBsb2FkZXJDb25maWcrdmRtLXVpa2l0LXVwbG9hZGVyLGZpbGVfdmRtX3VwbG9hZGVyLGdldEZpbGVUeXBlRGV0YWlscyx1cGxvYWRGaWxlLGRpc3BsYXlGaWxlcyxkZWxldGVGaWxlXQ0KW0NVU1RPTUNPREU9YWRkVWlraXRUaHJlZVRvQWRtaW5WaWV3c10=', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'The demo view', 0, '', 'Look', 1, '{\"privacy\":{\"activate\":\"1\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"23\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2016-10-18 11:44:46', '2024-09-19 22:30:12', 42, 0, 1, 110), -(283, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{\"ajax_input0\":{\"value_name\":\"guid\",\"task_name\":\"getFileTypeDetails\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"getFileTypeDetails\",\"user_check\":\"1\"},\"ajax_input1\":{\"value_name\":\"target\",\"task_name\":\"getFileTypeDetails\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"getFileTypeDetails\",\"user_check\":\"1\"},\"ajax_input2\":{\"value_name\":\"guid\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input3\":{\"value_name\":\"entity\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input4\":{\"value_name\":\"target\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input5\":{\"value_name\":\"guid\",\"task_name\":\"deleteFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"deleteFile\",\"user_check\":\"1\"},\"ajax_input6\":{\"value_name\":\"entity\",\"task_name\":\"displayFiles\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"displayFiles\",\"user_check\":\"1\"},\"ajax_input7\":{\"value_name\":\"target\",\"task_name\":\"displayFiles\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"displayFiles\",\"user_check\":\"1\"}}', '', 0, '', '', '{}', '', '19a973ea-cdfa-4c79-bbbd-1b8a37286b27', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'File Types', 'File Type', '', '', '', 'CS8qKg0KCSAqIEdldCB0aGUgZmlsZSB0eXBlIGRldGFpbHMsIGlmIGl0IGV4aXN0cy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgICAgVGhlIGZpbGUgdHlwZSBndWlkDQoJICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0ICBUaGUgdGFyZ2V0IGVudGl0eSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5DQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEZpbGVUeXBlRGV0YWlscyhzdHJpbmcgJGd1aWQsIHN0cmluZyAkdGFyZ2V0KTogYXJyYXkNCgl7DQoJCWlmIChTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjp2YWxpZCgkZ3VpZCkpDQoJCXsNCgkJCXRyeQ0KCQkJew0KCQkJCSR0YXJnZXQgPSBiYXNlNjRfZGVjb2RlKCR0YXJnZXQpOw0KCQkJCSR0eXBlID0gU3VwZXJfX184ODRlY2E3OF8yODFmXzRlYWJfYjk2Ml9kOTdlMzU1YWYxNmRfX19Qb3dlcjo6XygnRmlsZS5UeXBlJyktPmdldCgkZ3VpZCwgJHRhcmdldCk7DQoJCQl9DQoJCQljYXRjaCAoXEV4Y2VwdGlvbiAkZXJyb3IpDQoJCQl7DQoJCQkJcmV0dXJuIFsnZXJyb3InID0+ICRlcnJvci0+Z2V0TWVzc2FnZSgpXTsNCgkJCX0NCg0KCQkJaWYgKCR0eXBlICE9PSBudWxsKQ0KCQkJew0KCQkJCXJldHVybiBbJ2RhdGEnID0+ICR0eXBlXTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBbJ2Vycm9yJyA9PiBUZXh0OjpfKCdGaWxlIHR5cGUgZGV0YWlscyBjb3VsZCBub3QgYmUgZm91bmQnKV07DQoJfQ0KDQoJLyoqDQoJICogVXBsb2FkIGEgZmlsZSwgb2YgYSBnaXZlbiBmaWxlIHR5cGUgYW5kIGxpbmsgaXQgdG8gYW4gZW50aXR5Lg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZ3VpZCAgICBUaGUgZmlsZSB0eXBlIGd1aWQNCgkgKiBAcGFyYW0gc3RyaW5nICRlbnRpdHkgIFRoZSBlbnRpdHkgZ3VpZA0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldCAgVGhlIHRhcmdldCBlbnRpdHkgbmFtZQ0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB1cGxvYWRGaWxlKHN0cmluZyAkZ3VpZCwgc3RyaW5nICRlbnRpdHksIHN0cmluZyAkdGFyZ2V0KTogYXJyYXkNCgl7DQoJCWlmIChTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjp2YWxpZCgkZ3VpZCkNCgkJCSYmIFN1cGVyX19fOWM1MTNiYWZfYjI3OV80M2ZkX2FlMjlfYTU4NWM4Y2JjNGYwX19fUG93ZXI6OnZhbGlkKCRlbnRpdHkpKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQkkdGFyZ2V0ID0gYmFzZTY0X2RlY29kZSgkdGFyZ2V0KTsNCgkJCQlTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLk1hbmFnZXInKS0+dXBsb2FkKCRndWlkLCAkZW50aXR5LCAkdGFyZ2V0KTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlcnJvcikNCgkJCXsNCgkJCQlyZXR1cm4gWydlcnJvcicgPT4gJGVycm9yLT5nZXRNZXNzYWdlKCldOw0KCQkJfQ0KDQoJCQlyZXR1cm4gWydzdWNjZXNzJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkJyldOw0KCQl9DQoNCgkJcmV0dXJuIFsnZXJyb3InID0+IFRleHQ6Ol8oJ1RoZSBmaWxlIGZhaWxlZCB0byB1cGxvYWQnKV07DQoJfQ0KDQoJLyoqDQoJICogRGVsZXRlIGEgZmlsZSBvZiBhIGdpdmVuIGVudGl0eS4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgICAgVGhlIGZpbGUgZ3VpZA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVGaWxlKHN0cmluZyAkZ3VpZCk6IGFycmF5DQoJew0KCQlpZiAoU3VwZXJfX185YzUxM2JhZl9iMjc5XzQzZmRfYWUyOV9hNTg1YzhjYmM0ZjBfX19Qb3dlcjo6dmFsaWQoJGd1aWQpKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQlTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLk1hbmFnZXInKS0+ZGVsZXRlKCRndWlkKTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlcnJvcikNCgkJCXsNCgkJCQlyZXR1cm4gWydlcnJvcicgPT4gJGVycm9yLT5nZXRNZXNzYWdlKCldOw0KCQkJfQ0KDQoJCQlyZXR1cm4gWydzdWNjZXNzJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQnKV07DQoJCX0NCg0KCQlyZXR1cm4gWydlcnJvcicgPT4gVGV4dDo6XygnVGhlIGZpbGUgY291bGQgbm90IGJlIGRlbGV0ZWQnKV07DQoJfQ0KDQoJLyoqDQoJICogTG9hZCB0aGUgZGlzcGxheSBvZiB0aGUgZmlsZXMgbGlua2VkIHRoaXMgZW50aXR5Lg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZW50aXR5ICBUaGUgZW50aXR5IGd1aWQNCgkgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgIFRoZSB0YXJnZXQgZW50aXR5IG5hbWUNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZGlzcGxheUZpbGVzKHN0cmluZyAkZW50aXR5LCBzdHJpbmcgJHRhcmdldCk6IGFycmF5DQoJew0KCQlpZiAoU3VwZXJfX185YzUxM2JhZl9iMjc5XzQzZmRfYWUyOV9hNTg1YzhjYmM0ZjBfX19Qb3dlcjo6dmFsaWQoJGVudGl0eSkpDQoJCXsNCgkJCSRkaXNwbGF5ID0gbnVsbDsNCg0KCQkJdHJ5DQoJCQl7DQoJCQkJJHRhcmdldCA9IGJhc2U2NF9kZWNvZGUoJHRhcmdldCk7DQoJCQkJJGRhdGEgPSBTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLkRpc3BsYXknKS0+Z2V0KCRlbnRpdHksICR0YXJnZXQpOw0KDQoJCQkJaWYgKCRkYXRhICE9PSBudWxsKQ0KCQkJCXsNCgkJCQkJJGRpc3BsYXlEYXRhID0gIFsnZGF0YScgPT4gJGRhdGEsICdlbnRpdHknID0+ICRlbnRpdHksICd0YXJnZXQnID0+ICR0YXJnZXRdOw0KCQkJCQkkZGlzcGxheSA9IEpvb21sYV9fXzdhYjgyMjcyXzBiM2RfNGJiMV9hZjM1X2U2M2EwOTZjZmUwYl9fX1Bvd2VyOjpyZW5kZXIoJ2RlbW9sb29rZmlsZWRpc3BsYXknLCAkZGlzcGxheURhdGEpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gWydkYXRhJyA9PiAnPGI+JyAuIFRleHQ6OnNwcmludGYoJ05vIGZpbGVzIGxpbmtlZCB0byAlcy4nLCAkdGFyZ2V0KSAuICc8L2I+J107DQoJCQkJfQ0KCQkJfQ0KCQkJY2F0Y2ggKFxFeGNlcHRpb24gJGVycm9yKQ0KCQkJew0KCQkJCXJldHVybiBbJ2Vycm9yJyA9PiAkZXJyb3ItPmdldE1lc3NhZ2UoKV07DQoJCQl9DQoNCgkJCWlmICghZW1wdHkoJGRpc3BsYXkpKQ0KCQkJew0KCQkJCXJldHVybiBbJ2RhdGEnID0+ICRkaXNwbGF5XTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBbJ2Vycm9yJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSBkaXNwbGF5IGNvdWxkIG5vdCBiZSBsb2FkZWQnKV07DQoJfQ==', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', '', '', 'Ly8gSm9vbWxhX19fN2FiODIyNzJfMGIzZF80YmIxX2FmMzVfZTYzYTA5NmNmZTBiX19fUG93ZXI6OnJlbmRlcignZGVtb2xvb2tmaWxlZGlzcGxheScsICRkaXNwbGF5RGF0YSk7', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'File Type', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX2RlbW9fZmlsZV90eXBlYA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX2RlbW9fZmlsZV90eXBlYCAoYGlkYCwgYGNyb3BgLCBgZG9jdW1lbnRfZm9ybWF0c2AsIGBkb3dubG9hZF9hY2Nlc3NgLCBgZmlsZV9mb3JtYXRzYCwgYGd1aWRgLCBgaW1hZ2VfZm9ybWF0c2AsIGBtZWRpYV9mb3JtYXRzYCwgYG5hbWVgLCBgcGF0aGAsIGB0YXJnZXRgLCBgdHlwZWAsIGBwYXJhbXNgLCBgcHVibGlzaGVkYCwgYGNyZWF0ZWRgLCBgbW9kaWZpZWRgLCBgdmVyc2lvbmAsIGBoaXRzYCwgYGFjY2Vzc2AsIGBvcmRlcmluZ2AsIGBtZXRha2V5YCwgYG1ldGFkZXNjYCwgYG1ldGFkYXRhYCkgVkFMVUVTDQooMSwgJycsICd7XCIwXCI6XCJwZGZcIn0nLCAxLCAnJywgJzYwODM0ZTAyLWJkMGItNDBhYS1iMGZlLWE0MGJiYTIyNTU2OCcsICcnLCAnJywgJ0RvY3VtZW50JywgJy9kb2N1bWVudHMnLCAne1wiMFwiOlwibG9va1wifScsIDIsICcnLCAxLCAnMjAxOS0wOS0wMyAyMjozOToyMScsICcyMDE5LTA5LTAzIDIyOjQ0OjIzJywgMSwgJycsIDEsIDEsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nKSwNCigyLCAnJywgJ3tcIjBcIjpcIm9kc1wiLFwiMVwiOlwieGxzXCIsXCIyXCI6XCJ4bHN4XCIsXCIzXCI6XCJjc3ZcIixcIjRcIjpcInRzdlwifScsIDEsICcnLCAnY2RiMTk3YjctZjQ3Yy00NTc3LThhOTQtMDMwMGY1NTk5MzZiJywgJycsICcnLCAnSW1wb3J0JywgJy9pbXBvcnRzJywgJ3tcIjBcIjpcImltcG9ydGVyXCJ9JywgMiwgJycsIDEsICcyMDE5LTA5LTAzIDIyOjM5OjIxJywgJzIwMTktMDktMDMgMjI6NDQ6MjMnLCAxLCAnJywgMSwgMSwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScpOw==', 'File Types (demo-look)', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-08 21:58:20', '2025-03-04 21:02:45', 36, 0, 1, 245), +(283, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{\"ajax_input0\":{\"value_name\":\"guid\",\"task_name\":\"getFileTypeDetails\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"getFileTypeDetails\",\"user_check\":\"1\"},\"ajax_input1\":{\"value_name\":\"target\",\"task_name\":\"getFileTypeDetails\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"getFileTypeDetails\",\"user_check\":\"1\"},\"ajax_input2\":{\"value_name\":\"guid\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input3\":{\"value_name\":\"entity\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input4\":{\"value_name\":\"target\",\"task_name\":\"uploadFile\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"uploadFile\",\"user_check\":\"1\"},\"ajax_input5\":{\"value_name\":\"guid\",\"task_name\":\"deleteFile\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"deleteFile\",\"user_check\":\"1\"},\"ajax_input6\":{\"value_name\":\"entity\",\"task_name\":\"displayFiles\",\"input_default\":\"NULL\",\"input_filter\":\"STRING\",\"method_name\":\"displayFiles\",\"user_check\":\"1\"},\"ajax_input7\":{\"value_name\":\"target\",\"task_name\":\"displayFiles\",\"input_default\":\"NULL\",\"input_filter\":\"BASE64\",\"method_name\":\"displayFiles\",\"user_check\":\"1\"}}', '', 0, '', '', '{}', '', '19a973ea-cdfa-4c79-bbbd-1b8a37286b27', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'File Types', 'File Type', '', '', '', 'CS8qKg0KCSAqIEdldCB0aGUgZmlsZSB0eXBlIGRldGFpbHMsIGlmIGl0IGV4aXN0cy4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgICAgVGhlIGZpbGUgdHlwZSBndWlkDQoJICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0ICBUaGUgdGFyZ2V0IGVudGl0eSBuYW1lDQoJICoNCgkgKiBAcmV0dXJuIGFycmF5DQoJICogQHNpbmNlIDUuMC4yDQoJICovDQoJcHVibGljIGZ1bmN0aW9uIGdldEZpbGVUeXBlRGV0YWlscyhzdHJpbmcgJGd1aWQsIHN0cmluZyAkdGFyZ2V0KTogYXJyYXkNCgl7DQoJCWlmIChTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjp2YWxpZCgkZ3VpZCkpDQoJCXsNCgkJCXRyeQ0KCQkJew0KCQkJCSR0YXJnZXQgPSBiYXNlNjRfZGVjb2RlKCR0YXJnZXQpOw0KCQkJCSR0eXBlID0gU3VwZXJfX184ODRlY2E3OF8yODFmXzRlYWJfYjk2Ml9kOTdlMzU1YWYxNmRfX19Qb3dlcjo6XygnRmlsZS5UeXBlJyktPmdldCgkZ3VpZCwgJHRhcmdldCk7DQoJCQl9DQoJCQljYXRjaCAoXEV4Y2VwdGlvbiAkZXJyb3IpDQoJCQl7DQoJCQkJcmV0dXJuIFsnZXJyb3InID0+ICRlcnJvci0+Z2V0TWVzc2FnZSgpXTsNCgkJCX0NCg0KCQkJaWYgKCR0eXBlICE9PSBudWxsKQ0KCQkJew0KCQkJCXJldHVybiBbJ2RhdGEnID0+ICR0eXBlXTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBbJ2Vycm9yJyA9PiBUZXh0OjpfKCdGaWxlIHR5cGUgZGV0YWlscyBjb3VsZCBub3QgYmUgZm91bmQnKV07DQoJfQ0KDQoJLyoqDQoJICogVXBsb2FkIGEgZmlsZSwgb2YgYSBnaXZlbiBmaWxlIHR5cGUgYW5kIGxpbmsgaXQgdG8gYW4gZW50aXR5Lg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZ3VpZCAgICBUaGUgZmlsZSB0eXBlIGd1aWQNCgkgKiBAcGFyYW0gc3RyaW5nICRlbnRpdHkgIFRoZSBlbnRpdHkgZ3VpZA0KCSAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldCAgVGhlIHRhcmdldCBlbnRpdHkgbmFtZQ0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiB1cGxvYWRGaWxlKHN0cmluZyAkZ3VpZCwgc3RyaW5nICRlbnRpdHksIHN0cmluZyAkdGFyZ2V0KTogYXJyYXkNCgl7DQoJCWlmIChTdXBlcl9fXzljNTEzYmFmX2IyNzlfNDNmZF9hZTI5X2E1ODVjOGNiYzRmMF9fX1Bvd2VyOjp2YWxpZCgkZ3VpZCkNCgkJCSYmIFN1cGVyX19fOWM1MTNiYWZfYjI3OV80M2ZkX2FlMjlfYTU4NWM4Y2JjNGYwX19fUG93ZXI6OnZhbGlkKCRlbnRpdHkpKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQkkdGFyZ2V0ID0gYmFzZTY0X2RlY29kZSgkdGFyZ2V0KTsNCgkJCQlTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLk1hbmFnZXInKS0+dXBsb2FkKCRndWlkLCAkZW50aXR5LCAkdGFyZ2V0KTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlcnJvcikNCgkJCXsNCgkJCQlyZXR1cm4gWydlcnJvcicgPT4gJGVycm9yLT5nZXRNZXNzYWdlKCldOw0KCQkJfQ0KDQoJCQlyZXR1cm4gWydzdWNjZXNzJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IHVwbG9hZGVkJyldOw0KCQl9DQoNCgkJcmV0dXJuIFsnZXJyb3InID0+IFRleHQ6Ol8oJ1RoZSBmaWxlIGZhaWxlZCB0byB1cGxvYWQnKV07DQoJfQ0KDQoJLyoqDQoJICogRGVsZXRlIGEgZmlsZSBvZiBhIGdpdmVuIGVudGl0eS4NCgkgKg0KCSAqIEBwYXJhbSBzdHJpbmcgJGd1aWQgICAgVGhlIGZpbGUgZ3VpZA0KCSAqDQoJICogQHJldHVybiBhcnJheQ0KCSAqIEBzaW5jZSA1LjAuMg0KCSAqLw0KCXB1YmxpYyBmdW5jdGlvbiBkZWxldGVGaWxlKHN0cmluZyAkZ3VpZCk6IGFycmF5DQoJew0KCQlpZiAoU3VwZXJfX185YzUxM2JhZl9iMjc5XzQzZmRfYWUyOV9hNTg1YzhjYmM0ZjBfX19Qb3dlcjo6dmFsaWQoJGd1aWQpKQ0KCQl7DQoJCQl0cnkNCgkJCXsNCgkJCQlTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLk1hbmFnZXInKS0+ZGVsZXRlKCRndWlkKTsNCgkJCX0NCgkJCWNhdGNoIChcRXhjZXB0aW9uICRlcnJvcikNCgkJCXsNCgkJCQlyZXR1cm4gWydlcnJvcicgPT4gJGVycm9yLT5nZXRNZXNzYWdlKCldOw0KCQkJfQ0KDQoJCQlyZXR1cm4gWydzdWNjZXNzJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQnKV07DQoJCX0NCg0KCQlyZXR1cm4gWydlcnJvcicgPT4gVGV4dDo6XygnVGhlIGZpbGUgY291bGQgbm90IGJlIGRlbGV0ZWQnKV07DQoJfQ0KDQoJLyoqDQoJICogTG9hZCB0aGUgZGlzcGxheSBvZiB0aGUgZmlsZXMgbGlua2VkIHRoaXMgZW50aXR5Lg0KCSAqDQoJICogQHBhcmFtIHN0cmluZyAkZW50aXR5ICBUaGUgZW50aXR5IGd1aWQNCgkgKiBAcGFyYW0gc3RyaW5nICR0YXJnZXQgIFRoZSB0YXJnZXQgZW50aXR5IG5hbWUNCgkgKg0KCSAqIEByZXR1cm4gYXJyYXkNCgkgKiBAc2luY2UgNS4wLjINCgkgKi8NCglwdWJsaWMgZnVuY3Rpb24gZGlzcGxheUZpbGVzKHN0cmluZyAkZW50aXR5LCBzdHJpbmcgJHRhcmdldCk6IGFycmF5DQoJew0KCQlpZiAoU3VwZXJfX185YzUxM2JhZl9iMjc5XzQzZmRfYWUyOV9hNTg1YzhjYmM0ZjBfX19Qb3dlcjo6dmFsaWQoJGVudGl0eSkpDQoJCXsNCgkJCSRkaXNwbGF5ID0gbnVsbDsNCg0KCQkJdHJ5DQoJCQl7DQoJCQkJJHRhcmdldCA9IGJhc2U2NF9kZWNvZGUoJHRhcmdldCk7DQoJCQkJJGRhdGEgPSBTdXBlcl9fXzg4NGVjYTc4XzI4MWZfNGVhYl9iOTYyX2Q5N2UzNTVhZjE2ZF9fX1Bvd2VyOjpfKCdGaWxlLkRpc3BsYXknKS0+Z2V0KCRlbnRpdHksICR0YXJnZXQpOw0KDQoJCQkJaWYgKCRkYXRhICE9PSBudWxsKQ0KCQkJCXsNCgkJCQkJJGRpc3BsYXlEYXRhID0gIFsnZGF0YScgPT4gJGRhdGEsICdlbnRpdHknID0+ICRlbnRpdHksICd0YXJnZXQnID0+ICR0YXJnZXRdOw0KCQkJCQkkZGlzcGxheSA9IEpvb21sYV9fXzdhYjgyMjcyXzBiM2RfNGJiMV9hZjM1X2U2M2EwOTZjZmUwYl9fX1Bvd2VyOjpyZW5kZXIoJ2RlbW9sb29rZmlsZWRpc3BsYXknLCAkZGlzcGxheURhdGEpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQlyZXR1cm4gWydkYXRhJyA9PiAnPGI+JyAuIFRleHQ6OnNwcmludGYoJ05vIGZpbGVzIGxpbmtlZCB0byAlcy4nLCAkdGFyZ2V0KSAuICc8L2I+J107DQoJCQkJfQ0KCQkJfQ0KCQkJY2F0Y2ggKFxFeGNlcHRpb24gJGVycm9yKQ0KCQkJew0KCQkJCXJldHVybiBbJ2Vycm9yJyA9PiAkZXJyb3ItPmdldE1lc3NhZ2UoKV07DQoJCQl9DQoNCgkJCWlmICghZW1wdHkoJGRpc3BsYXkpKQ0KCQkJew0KCQkJCXJldHVybiBbJ2RhdGEnID0+ICRkaXNwbGF5XTsNCgkJCX0NCgkJfQ0KDQoJCXJldHVybiBbJ2Vycm9yJyA9PiBUZXh0OjpfKCdUaGUgZmlsZSBkaXNwbGF5IGNvdWxkIG5vdCBiZSBsb2FkZWQnKV07DQoJfQ==', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', '', '', 'Ly8gSm9vbWxhX19fN2FiODIyNzJfMGIzZF80YmIxX2FmMzVfZTYzYTA5NmNmZTBiX19fUG93ZXI6OnJlbmRlcignZGVtb2xvb2tmaWxlZGlzcGxheScsICRkaXNwbGF5RGF0YSk7', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'File Type', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9maWxlX3R5cGVgDQotLQ0KDQpJTlNFUlQgSU5UTyBgI19fW1tbY29tcG9uZW50XV1dX2ZpbGVfdHlwZWAgKGBpZGAsIGBjcm9wYCwgYGRvY3VtZW50X2Zvcm1hdHNgLCBgZG93bmxvYWRfYWNjZXNzYCwgYGZpbGVfZm9ybWF0c2AsIGBndWlkYCwgYGltYWdlX2Zvcm1hdHNgLCBgbWVkaWFfZm9ybWF0c2AsIGBuYW1lYCwgYHBhdGhgLCBgdGFyZ2V0YCwgYHR5cGVgLCBgcGFyYW1zYCwgYHB1Ymxpc2hlZGAsIGBjcmVhdGVkYCwgYG1vZGlmaWVkYCwgYHZlcnNpb25gLCBgaGl0c2AsIGBhY2Nlc3NgLCBgb3JkZXJpbmdgLCBgbWV0YWtleWAsIGBtZXRhZGVzY2AsIGBtZXRhZGF0YWApIFZBTFVFUw0KKDEsICcnLCAne1wiMFwiOlwicGRmXCJ9JywgMSwgJycsICc2MDgzNGUwMi1iZDBiLTQwYWEtYjBmZS1hNDBiYmEyMjU1NjgnLCAnJywgJycsICdEb2N1bWVudCcsICcvZG9jdW1lbnRzJywgJ3tcIjBcIjpcImxvb2tcIn0nLCAyLCAnJywgMSwgJzIwMTktMDktMDMgMjI6Mzk6MjEnLCAnMjAxOS0wOS0wMyAyMjo0NDoyMycsIDEsICcnLCAxLCAxLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JyksDQooMiwgJycsICd7XCIwXCI6XCJvZHNcIixcIjFcIjpcInhsc1wiLFwiMlwiOlwieGxzeFwiLFwiM1wiOlwiY3N2XCIsXCI0XCI6XCJ0c3ZcIn0nLCAxLCAnJywgJ2NkYjE5N2I3LWY0N2MtNDU3Ny04YTk0LTAzMDBmNTU5OTM2YicsICcnLCAnJywgJ0ltcG9ydCcsICcvaW1wb3J0cycsICd7XCIwXCI6XCJpbXBvcnRlclwifScsIDIsICcnLCAxLCAnMjAxOS0wOS0wMyAyMjozOToyMScsICcyMDE5LTA5LTAzIDIyOjQ0OjIzJywgMSwgJycsIDEsIDEsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nKTs=', 'File Types (demo-look)', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"019c6ed4-b16f-452c-8db5-288f9c35a171\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-08 21:58:20', '2025-07-24 08:30:02', 37, 0, 1, 245), (284, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 0, '', '', '{}', '', '595ba2c9-21fa-43a4-9af7-93c9cfb21b82', 'images/vdm/icon/detail.png', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Details', 'Detail', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Add More Details', 0, '', 'Details (look)', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"3429\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-07 22:09:41', '2024-09-19 22:29:45', 7, 0, 1, 246), (285, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 0, '', '', '{}', 'Files', '224eb9c7-8b40-48cf-bf77-2afa291fd54a', 'images/vdm/icon/file.png', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Files', 'File', '', 'CQlmb3JlYWNoICgkZmlsZVBhdGhzIGFzICRmaWxlUGF0aCkNCgkJew0KCQkJaWYgKGlzX2ZpbGUoJGZpbGVQYXRoKSAmJiBpc193cml0YWJsZSgkZmlsZVBhdGgpKQ0KCQkJew0KCQkJCUpvb21sYV9fXzU1ZTllOGYwXzNjNWVfNDgzYV9hMDYzXzdjNzU2NWIwMGVkN19fX1Bvd2VyOjpkZWxldGUoJGZpbGVQYXRoKTsgLy8gcmVtb3ZlIGZyb20gZmlsZSBzeXN0ZW0NCgkJCX0NCgkJfQ==', '', '', '', '', '', '', '', 'CQkkZmlsZVBhdGhzID0gU3VwZXJfX185ZDc2YjhkY18zODgzXzQ3NTVfYjExY18xMzFkMTljYThhNTNfX19Qb3dlcjo6XygnRGF0YS5JdGVtcycpLT50YWJsZSgnW1tbdmlld11dXScpLT52YWx1ZXMoJHBrcywgJ2lkJywgJ2ZpbGVfcGF0aCcpID8/IFtdOw==', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Files', 0, '', 'Files', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"65341477-33f1-4d58-9b3c-c371168809da\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-07 22:38:14', '2025-03-28 10:18:59', 18, 0, 1, 247), (286, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":1},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":1},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":1},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":1},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":1},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":1},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":1},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":1},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":1}}', '{}', '{}', '{}', '', 0, '', '', '{}', '', '60b7b30d-9229-4ce2-b055-9efbb7ac4cea', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'User Entity Maps', 'User Entity Map', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', '', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'User Entity Maps', 0, '', 'User Entity Map', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"3404\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-09-07 22:49:46', '2024-09-16 23:34:45', 4, 0, 1, 248), (293, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 0, '', '', '{}', '', 'ab2bbdfc-c0a0-4ffc-9556-67d5af8bec64', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Importer Message Logs', 'Importer Message Log', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'Importer Message Logs', 0, '', 'Importer Message Logs', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-02-06 17:25:28', '2025-02-17 10:13:58', 6, 0, 1, 249), (294, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 0, '', '', '{}', 'The item import queue', 'a9f19a16-fadb-44ea-a9b6-41130aad05ec', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Items Import Queue', 'Item Import', '', 'CQlpZiAoIWVtcHR5KCRmaWxlcykpDQoJCXsNCgkJCSRmaWxlcyA9IFN1cGVyX19fOWQ3NmI4ZGNfMzg4M180NzU1X2IxMWNfMTMxZDE5Y2E4YTUzX19fUG93ZXI6Ol8oJ0RhdGEuSXRlbXMnKS0+dGFibGUoJ2ZpbGUnKS0+dmFsdWVzKCRmaWxlcywgJ2d1aWQnLCAnaWQnKTsNCgkJCWlmICghZW1wdHkoJGZpbGVzKSkNCgkJCXsNCgkJCQkkbW9kZWwgPSBTdXBlcl9fXzY0MGI1MzUyX2ZiMDlfNDI1Zl9hMjZlX2NkNDRlZGEwM2YxNV9fX1Bvd2VyOjpnZXRNb2RlbCgnZmlsZScpOw0KCQkJCSRtb2RlbC0+ZGVsZXRlKCRmaWxlcyk7DQoJCQl9DQoJCX0=', 'CQlpZiAoIWVtcHR5KCRmaWxlcykpDQoJCXsNCgkJCSR1cGRhdGUgPSBbXTsNCgkJCWZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkNCgkJCXsNCgkJCQkkdXBkYXRlW10gPSAob2JqZWN0KSBbJ2d1aWQnID0+ICRmaWxlLCAncHVibGlzaGVkJyA9PiAkdmFsdWVdOw0KCQkJfQ0KCQkJU3VwZXJfX185ZDc2YjhkY18zODgzXzQ3NTVfYjExY18xMzFkMTljYThhNTNfX19Qb3dlcjo6XygnRGF0YS5JdGVtcycpLT50YWJsZSgnZmlsZScpLT5zZXQoJHVwZGF0ZSwgJ2d1aWQnKTsNCgkJfQ==', '', '', '', '', '', '', 'CQkkZmlsZXMgPSBTdXBlcl9fXzlkNzZiOGRjXzM4ODNfNDc1NV9iMTFjXzEzMWQxOWNhOGE1M19fX1Bvd2VyOjpfKCdEYXRhLkl0ZW1zJyktPnRhYmxlKCdbW1t2aWV3XV1dJyktPnZhbHVlcygkcGtzLCAnaWQnLCAnZmlsZScpOw==', 'CQkkZmlsZXMgPSBTdXBlcl9fXzlkNzZiOGRjXzM4ODNfNDc1NV9iMTFjXzEzMWQxOWNhOGE1M19fX1Bvd2VyOjpfKCdEYXRhLkl0ZW1zJyktPnRhYmxlKCdbW1t2aWV3XV1dJyktPnZhbHVlcygkcGtzLCAnaWQnLCAnZmlsZScpOw==', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', '', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', 'CQkkZmlsZSA9IChvYmplY3QpIFsnZ3VpZCcgPT4gJHZhbGlkRGF0YVsnZmlsZSddLCAncHVibGlzaGVkJyA9PiAkdmFsaWREYXRhWydwdWJsaXNoZWQnXV07DQoJCVN1cGVyX19fOWQ3NmI4ZGNfMzg4M180NzU1X2IxMWNfMTMxZDE5Y2E4YTUzX19fUG93ZXI6Ol8oJ0RhdGEuSXRlbScpLT50YWJsZSgnZmlsZScpLT5zZXQoJGZpbGUsICdndWlkJywgJ3VwZGF0ZScpOw==', '', 'Item Import Queue', 0, '', 'Item Import', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2020-11-05 18:35:12', '2025-03-03 09:01:55', 10, 0, 1, 250), -(296, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{\"addtabs0\":{\"name\":\"Details\"},\"addtabs1\":{\"name\":\"Cities\"}}', '{}', '', 1, '', '', '{}', '', '6c6345a1-e3e4-4840-8918-831034e95b19', 'images/vdm/icon/state.png#joomlaImage://local-images/vdm/icon/state.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'States', 'State', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'States', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX2RlbW9fc3RhdGVgDQotLQ0KDQpJTlNFUlQgSU5UTyBgI19fZGVtb19zdGF0ZWAgKGBpZGAsIGBjb3VudHJ5YCwgYGZpcHNfY29kZWAsIGBuYW1lYCwgYHR5cGVgLCBgd2lraWRhdGFpZGAsIGBsYXRpdHVkZWAsIGBsb25naXR1ZGVgLCBgbWV0YWtleWAsIGBtZXRhZGVzY2AsIGBtZXRhZGF0YWAsIGBvcmRlcmluZ2AsIGBwdWJsaXNoZWRgLCBgbW9kaWZpZWRgLCBgY3JlYXRlZGAsIGBoaXRzYCwgYHZlcnNpb25gLCBgcGFyYW1zYCwgYGd1aWRgLCBgaXNvMmApIFZBTFVFUw0KKDEsICc2MmI1MDM5Mi01NGUyLTQ0OTAtYWQ5NC04ZGUwNzczNWE1ODQnLCAyMSwgJ0tob21hcycsICdyZWdpb24nLCAnUTgzNDUwOCcsIC0yMi42Mzc3ODU0MCwgMTcuMTAxMTkzMTAsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAxLCAxLCAnMjAyNS0wMy0yNiAxOTo1NTo0NycsICcyMDI1LTAzLTI1IDE2OjIzOjM0JywgJycsIDExLCAnJywgJ2M4NDBjNWFlLWQzODQtNDg0Ny1iNTBkLWE4MmVmMjk4M2M0ZCcsICdOQScpLA0KKDIsICcyZmNhOWU3OS1jOGM5LTQ1N2YtYTJhMi05M2JlNzkyMDdlZGUnLCAxMSwgJ1dldGVybiBDYXBlJywgJ3Byb3ZpbmNlJywgJ1ExMjcxNjcnLCAtMzMuMjI3NzkxODAsIDIxLjg1Njg1ODYwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMiwgMSwgJzIwMjUtMDMtMjYgMTU6NTU6NDYnLCAnMjAyNS0wMy0yNiAxNToyMDowNScsICcnLCAzLCAnJywgJ2EyMDE1ZGVkLTBmZWQtNDA2NC04ZTYzLTgzYTQ5NWUxYTA5YicsICdXQycpLA0KKDMsICc2MmI1MDM5Mi01NGUyLTQ0OTAtYWQ5NC04ZGUwNzczNWE1ODQnLCAxNTIsICdPdGpvem9uZGp1cGEnLCAncmVnaW9uJywgJ1E4NzY1MDYnLCAtMjAuNTQ4NjkxNjAsIDE3LjY2ODg4NzAwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMywgMSwgJzIwMjUtMDMtMjYgMTk6NTY6NDQnLCAnMjAyNS0wMy0yNiAxNTo0NDoxMScsICcnLCAzLCAnJywgJ2RlNTc3MzI1LTFkZWQtNDZkOS1hMDJjLTIzMWJjZDhhNDYxZScsICdPRCcpLA0KKDQsICc2MmI1MDM5Mi01NGUyLTQ0OTAtYWQ5NC04ZGUwNzczNWE1ODQnLCAxNTIsICdFcm9uZ28nLCAncmVnaW9uJywgJ1E2NDg3NTMnLCAtMjIuMjU2NTY4MjAsIDE1LjQwNjgwNzkwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgNCwgMSwgJzIwMjUtMDMtMjYgMTk6NTU6MDgnLCAnMjAyNS0wMy0yNiAxNTo1MDo1MCcsICcnLCA0LCAnJywgJzJjMDM3N2M3LWRkMzAtNGE2Ny1iOGI5LTdjZTFhZmY0ZmY5YicsICdFUicpLA0KKDksICc2MmI1MDM5Mi01NGUyLTQ0OTAtYWQ5NC04ZGUwNzczNWE1ODQnLCAxNTIsICdIYXJkYXAnLCAncmVnaW9uJywgJ1E3NTI2NzYnLCAtMjYuODQyOTY0NTAsIDE3LjI5MDI4MzkwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjIxOjE3JywgJzIwMjUtMDMtMjYgMjE6MjE6NTUnLCAnJywgMiwgJycsICdhNmU3Zjk2My01Mjg4LTQyM2EtYjlmYi02ZTkyYjlmYmEyNDEnLCAnS0EnKSwNCigxMSwgJzJmY2E5ZTc5LWM4YzktNDU3Zi1hMmEyLTkzYmU3OTIwN2VkZScsIDA2LCAnR2F1dGVuZycsICdwcm92aW5jZScsICdRMTMzMDgzJywgLTI2LjI3MDc1OTMwLCAyOC4xMTIyNjc5MCwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDYsIDEsICcyMDI1LTAzLTI3IDIwOjA0OjMxJywgJzIwMjUtMDMtMjcgMTI6NDA6MjMnLCAnJywgMTUsICcnLCAnOWZkY2U4NzUtMDZlZC00NDk4LTk2NGUtMGY3MjM2MzFmZTFmJywgJ0dQJyksDQooMTIsICc2MmI1MDM5Mi01NGUyLTQ0OTAtYWQ5NC04ZGUwNzczNWE1ODQnLCAzMSwgJ0thcmFzJywgJ3JlZ2lvbicsICdRNTczNDY3JywgLTI2Ljg0Mjk2NDUwLCAxNy4yOTAyODM5MCwgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODozNjozMCcsICcnLCAxLCAnJywgJ2NjMDdjNTViLWZmZTQtNDNiMy05N2I3LTIzYjU3NDZjMDlmOScsICdLQScpLA0KKDEzLCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgNDAsICdLYXZhbmdvIEVhc3QnLCAncmVnaW9uJywgJ1ExNDgyNDAzMicsIDE4LjI3MTA0ODAwLCAxOC40Mjc2MDQ3MCwgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo0NDozOScsICcnLCAxLCAnJywgJ2Q1M2NmNDE3LTg0YmMtNGE3Mi04YWNiLTI4MzY3ZjQxYmZiYicsICdLRScpLA0KKDE0LCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMzIsICdLdW5lbmUnLCAncmVnaW9uJywgJ1E4MzQ1MTMnLCAtMTkuNDA4NjMxNzAsIDEzLjkxNDM5OTAwLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjQ3OjU3JywgJycsIDEsICcnLCAnYTU1ZjhkNWEtZjQxZi00YjBkLWI2YTQtNjk3MjY0NzdmYzUyJywgJ0tVJyksDQooMTUsICc2MmI1MDM5Mi01NGUyLTQ0OTAtYWQ5NC04ZGUwNzczNWE1ODQnLCAzMywgJ09oYW5nd2VuYScsICdyZWdpb24nLCAnUTg0NTcwMicsIC0xNy41OTc5MjkxMCwgMTYuODE3ODM3NzAsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NTM6NTknLCAnJywgMSwgJycsICczZWU1YjEwZS02MGQ0LTRlYjAtYTVlYS1hZTk4ZGI0NWJlYmUnLCAnT1cnKSwNCigxNiwgJzYyYjUwMzkyLTU0ZTItNDQ5MC1hZDk0LThkZTA3NzM1YTU4NCcsIDM1LCAnT21haGVrZScsICdyZWdpb24nLCAnUTgzODc3NScsIDE5LjE4ODAwNDcwLCAtMjEuODQ2NjY1MTAsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCA3LCAxLCAnMjAyNS0wMy0yOCAwODo1OTo0NicsICcyMDI1LTAzLTI4IDA4OjU4OjA3JywgJycsIDMsICcnLCAnYWI4ODg0MmYtMGU2Ni00N2NkLTk3MTItNmQ1YWFkM2IxNzliJywgJ09IJyksDQooMTcsICc2MmI1MDM5Mi01NGUyLTQ0OTAtYWQ5NC04ZGUwNzczNWE1ODQnLCAzNiwgJ09tdXNhdGknLCAncmVnaW9uJywgJ1E3NjQzODUnLCAxNC44NDU0NjE5MCwgLTE4LjQwNzAyOTQwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgOCwgMSwgJzIwMjUtMDMtMjggMDk6MDE6NTgnLCAnMjAyNS0wMy0yOCAwOTowMTowMicsICcnLCAyLCAnJywgJ2RkMDE1ZmU3LTUwYjktNGExZS1iZTY2LTJlNWRlYjZlYTA1ZScsICdPUycpLA0KKDE4LCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMzcsICdPc2hhbmEnLCAncmVnaW9uJywgJ1E1MzQ1MjgnLCAxNS42ODgxNzg4MCwgLTE4LjQzMDUwNjQwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgOSwgMSwgJzIwMjUtMDMtMjggMDk6MDU6NTUnLCAnMjAyNS0wMy0yOCAwOTowNDoyMScsICcnLCAzLCAnJywgJzZmMTE0ZDEzLWNlN2YtNDc1MS04MDI5LWZmNzcyM2E5MzJhMicsICdPTicpLA0KKDE5LCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMzgsICdPc2hpa290bycsICdyZWdpb24nLCAnUTg3NjUxMicsIDE2LjkxMjI1MTAwLCAtMTguNDE1MjU3NTAsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAxMCwgMSwgJzIwMjUtMDMtMjggMDk6MDk6MjMnLCAnMjAyNS0wMy0yOCAwOTowODowOCcsICcnLCAyLCAnJywgJ2IwNjUwYTZkLTU2ZDgtNDc2NS1iNTY2LWY2YjkzMjU1ZjdmNCcsICdPVCcpLA0KKDIwLCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMjgsICdaYW1iZXppJywgJ3JlZ2lvbicsICdRNDczMTkwJywgMjMuOTUzNjQ2NjAsIC0xNy44MTkzNDE5MCwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDExLCAxLCAnMjAyNS0wMy0yOCAwOToxMzozMScsICcyMDI1LTAzLTI4IDA5OjEwOjUyJywgJycsIDIsICcnLCAnZWRjM2FkZDYtMTk3Ny00NDNlLWFmNDAtMzZmNzAwYWQzMWMwJywgJ0NBJyk7', 'States', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"c31eea82-d52d-4586-9d34-c73abfebf5f3\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-24 08:26:24', '2025-03-28 12:25:29', 40, 0, 1, 170), -(297, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 1, '', '', '{}', '', '3dbb581b-619a-4fb0-a6f6-e4a136ea31e2', 'images/vdm/icon/city.png#joomlaImage://local-images/vdm/icon/city.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Cities', 'City', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'Cities', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX2RlbW9fY2l0eWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19kZW1vX2NpdHlgIChgaWRgLCBgbmFtZWAsIGBsYXRpdHVkZWAsIGBsb25naXR1ZGVgLCBgZ3VpZGAsIGB3aWtpZGF0YWlkYCwgYG1ldGFrZXlgLCBgbWV0YWRlc2NgLCBgbWV0YWRhdGFgLCBgb3JkZXJpbmdgLCBgcHVibGlzaGVkYCwgYG1vZGlmaWVkYCwgYGNyZWF0ZWRgLCBgaGl0c2AsIGB2ZXJzaW9uYCwgYHBhcmFtc2AsIGBzdGF0ZWApIFZBTFVFUw0KKDEsICdXaW5kaG9laycsIC0yMi41NTk0MTAwMCwgMTcuMDgzMjMwMDAsICdiYmIwZDU2NC1jZTA2LTQ0ZDMtOGExZi1kNWU1N2Y1NmIxMTMnLCAnUTM5MzUnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMSwgMSwgJzIwMjUtMDMtMjcgMDY6Mjc6MzknLCAnMjAyNS0wMy0yNSAxNjoxNTowNycsICcnLCAzLCAnJywgJ2M4NDBjNWFlLWQzODQtNDg0Ny1iNTBkLWE4MmVmMjk4M2M0ZCcpLA0KKDIsICdLYXR1dHVyYScsIC0yMi41MjMwNjAwMCwgMTcuMDYwMjgwMDAsICcyNDI3NjdlMi1iNzYyLTQ5YzMtODZmMy1mMjBiMGMzMTc4MmEnLCAnUTg2NDEwMCcsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6Mjc6MzAnLCAnMjAyNS0wMy0yNiAxNDozMzozMCcsICcnLCAyLCAnJywgJ2M4NDBjNWFlLWQzODQtNDg0Ny1iNTBkLWE4MmVmMjk4M2M0ZCcpLA0KKDMsICdHcm9vdGZvbnRlaW4nLCAtMTkuNTY2NjcwMDAsIDE4LjExNjY3MDAwLCAnNmYxMzQxNDctNjI0OC00YTgwLWIzZjItOGI4ZmU1ZGFkYWY4JywgJ1E5ODYzMzYnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI3OjIxJywgJzIwMjUtMDMtMjYgMTU6NDQ6MTEnLCAnJywgMiwgJycsICdkZTU3NzMyNS0xZGVkLTQ2ZDktYTAyYy0yMzFiY2Q4YTQ2MWUnKSwNCig0LCAnT2thaGFuZGphJywgLTIxLjk4MzMzMDAwLCAxNi45MTY2NzAwMCwgJzMwYzRiNjA0LWE2YmItNGViYS1hMGE0LTk3NmVhMGY3MjE4MycsICdRNTk3NDkxJywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNzoxNCcsICcyMDI1LTAzLTI2IDE1OjQ0OjExJywgJycsIDIsICcnLCAnZGU1NzczMjUtMWRlZC00NmQ5LWEwMmMtMjMxYmNkOGE0NjFlJyksDQooNSwgJ09rYWthcmFyYScsIC0yMC41ODMzMzAwMCwgMTcuNDMzMzMwMDAsICdlMTAyOTA1Ni05YjJjLTRmMjQtOGY4NS02ZDc3YWE1OWQyNDcnLCAnUTk5MjA3NycsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6Mjc6MDQnLCAnMjAyNS0wMy0yNiAxNTo0NDoxMScsICcnLCAyLCAnJywgJ2RlNTc3MzI1LTFkZWQtNDZkOS1hMDJjLTIzMWJjZDhhNDYxZScpLA0KKDYsICdPdGF2aScsIC0xOS42NTAwMDAwMCwgMTcuMzMzMzMwMDAsICc3YzYzYjU4MC00ZWUwLTQ5OWYtYjM0Yi1lZmJjNDY3NWJmZjYnLCAnUTEwMTM5NjUnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI2OjU2JywgJzIwMjUtMDMtMjYgMTU6NDQ6MTEnLCAnJywgMiwgJycsICdkZTU3NzMyNS0xZGVkLTQ2ZDktYTAyYy0yMzFiY2Q4YTQ2MWUnKSwNCig3LCAnT3RqaXdhcm9uZ28nLCAtMjAuNDYzNjkwMDAsIDE2LjY0NzcyMDAwLCAnNGVkNmM2MGUtNWUxMy00ZDY4LTgzZTgtNWUyZjVlNmQwYTc1JywgJ1E5OTMxNDknLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI2OjQzJywgJzIwMjUtMDMtMjYgMTU6NDQ6MTEnLCAnJywgMiwgJycsICdkZTU3NzMyNS0xZGVkLTQ2ZDktYTAyYy0yMzFiY2Q4YTQ2MWUnKSwNCig0NiwgJ0FyYW5kaXMnLCAtMjIuNDE2NjcwMDAsIDE0Ljk2NjY3MDAwLCAnZjE3ZTU0ZjAtZTA1ZC00M2NkLTk4ZWYtNWJlZGVhYTU1NGQyJywgJ1E0Mzg4NTEnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI2OjA3JywgJzIwMjUtMDMtMjYgMTU6NTY6NTMnLCAnJywgMiwgJycsICcyYzAzNzdjNy1kZDMwLTRhNjctYjhiOS03Y2UxYWZmNGZmOWInKSwNCig0NywgJ0hlbnRpZXNiYWFpJywgLTIyLjExNjY3MDAwLCAxNC4yODMzMzAwMCwgJ2MyOTNlZDgzLWM2OWMtNGI3Zi1hMjcxLTdlNTBlYWNkMTM0YicsICdRMTAxMzM4OScsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjY6MDAnLCAnMjAyNS0wMy0yNiAxNTo1Njo1MycsICcnLCAyLCAnJywgJzJjMDM3N2M3LWRkMzAtNGE2Ny1iOGI5LTdjZTFhZmY0ZmY5YicpLA0KKDQ4LCAnS2FyaWJpYicsIC0yMS45MzMzMzAwMCwgMTUuODMzMzMwMDAsICc1M2E5ZDQ5Yi1hMGVmLTRlN2UtYWQ2Ny03ZWEwOWM1MTc5ODEnLCAnUTEzNDgxODEnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI1OjUxJywgJzIwMjUtMDMtMjYgMTU6NTY6NTMnLCAnJywgMiwgJycsICcyYzAzNzdjNy1kZDMwLTRhNjctYjhiOS03Y2UxYWZmNGZmOWInKSwNCig0OSwgJ09tYXJ1cnUnLCAtMjEuNDMzMzMwMDAsIDE1LjkzMzMzMDAwLCAnZGE4YjQ3YjAtODE3ZC00NDkwLTg3ZDMtNDk3NWJiNTQwNDY4JywgJ1ExODk2MTYxJywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNTo0MScsICcyMDI1LTAzLTI2IDE1OjU2OjUzJywgJycsIDIsICcnLCAnMmMwMzc3YzctZGQzMC00YTY3LWI4YjktN2NlMWFmZjRmZjliJyksDQooNTAsICdPdGppbWJpbmd3ZScsIC0yMi4zNTAwMDAwMCwgMTYuMTMzMzMwMDAsICdiNTljNDNjMC02ZGE5LTRkMDYtODVlOC1jZWQzMzQ0MDc5N2UnLCAnUTQ2NDA1MCcsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjU6MzInLCAnMjAyNS0wMy0yNiAxNTo1Njo1MycsICcnLCAyLCAnJywgJzJjMDM3N2M3LWRkMzAtNGE2Ny1iOGI5LTdjZTFhZmY0ZmY5YicpLA0KKDUxLCAnU3dha29wbXVuZCcsIC0yMi42MzE5OTAwMCwgMTQuNjAxMTkwMDAsICc0YzUxMjMxNi03ZDU5LTQ2YTYtYmVmOS1iNjA5NWRlOWZkMzQnLCAnUTU5Njk4JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNToxNycsICcyMDI1LTAzLTI2IDE1OjU2OjUzJywgJycsIDIsICcnLCAnMmMwMzc3YzctZGQzMC00YTY3LWI4YjktN2NlMWFmZjRmZjliJyksDQooNTIsICdTd2Frb3BtdW5kIENvbnN0aXR1ZW5jeScsIC0yMi42MzE5OTAwMCwgMTQuNjAxMTkwMDAsICcyMjVkNTA2NC0xN2QzLTRjYTctOTk3MC0zZjk5YTRjZDBkNTQnLCAnUTM3MTE3MTAnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI1OjEwJywgJzIwMjUtMDMtMjYgMTU6NTY6NTMnLCAnJywgMiwgJycsICcyYzAzNzdjNy1kZDMwLTRhNjctYjhiOS03Y2UxYWZmNGZmOWInKSwNCig1MywgJ1VzYWtvcycsIC0yMi4wMDAwMDAwMCwgMTUuNjAwMDAwMDAsICczNjcwMGY2Yy1jYjBhLTQwNTgtYThkYy0wNmViZjA4Y2I3NzgnLCAnUTE0NTcyNjUnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI1OjAyJywgJzIwMjUtMDMtMjYgMTU6NTY6NTMnLCAnJywgMiwgJycsICcyYzAzNzdjNy1kZDMwLTRhNjctYjhiOS03Y2UxYWZmNGZmOWInKSwNCig1NCwgJ1dhbHZpcyBCYXknLCAtMjIuOTU3NTAwMDAsIDE0LjUwNTI4MDAwLCAnODhkODhkZjktYmVjYy00ODg5LTkyZjEtMTU4M2JmNTUyN2NjJywgJ1EyMjA4NDMnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI0OjU1JywgJzIwMjUtMDMtMjYgMTU6NTY6NTMnLCAnJywgMiwgJycsICcyYzAzNzdjNy1kZDMwLTRhNjctYjhiOS03Y2UxYWZmNGZmOWInKSwNCig1NSwgJ0FyYW5vcycsIC0yNC4xMzMzMzAwMCwgMTkuMTE2NjcwMDAsICdkNmYyNGY2NC1iMjUxLTQwYTYtYjc4OC1mYTYwYmVlMTlhZDAnLCAnUTYyNjA0MCcsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjQ6NDknLCAnMjAyNS0wMy0yNiAyMDo0MToyMScsICcnLCAyLCAnJywgJ2E2ZTdmOTYzLTUyODgtNDIzYS1iOWZiLTZlOTJiOWZiYTI0MScpLA0KKDU2LCAnSG9hY2hhbmFzJywgLTIzLjkxNjY3MDAwLCAxOC4wNTAwMDAwMCwgJ2Q3MzViMzY5LWVhYWEtNGY1MS05NDQzLWQ1ZDNkYmVmYTQwYicsICdRMTYyMTQ5OCcsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjQ6NDEnLCAnMjAyNS0wMy0yNiAyMDo0MToyMScsICcnLCAyLCAnJywgJ2E2ZTdmOTYzLTUyODgtNDIzYS1iOWZiLTZlOTJiOWZiYTI0MScpLA0KKDU3LCAnTWFsdGFow7ZoZScsIC0yNC44MzMzMzAwMCwgMTYuOTgzMzMwMDAsICc4MGNhOTVlNS1jYzliLTQwNmQtODRiNC1hYWZkZTAwMTg1Y2EnLCAnUTY2NjA3OScsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjQ6MzQnLCAnMjAyNS0wMy0yNiAyMDo0MToyMScsICcnLCAzLCAnJywgJ2E2ZTdmOTYzLTUyODgtNDIzYS1iOWZiLTZlOTJiOWZiYTI0MScpLA0KKDU4LCAnTWFyaWVudGFsJywgLTI0LjYzMzMzMDAwLCAxNy45NjY2NzAwMCwgJzU5M2QyMDcxLTBhOGQtNDEzNS04NzZmLWFjNTcxMDhhZGQ1NicsICdRODc2MTY2JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNDoyMycsICcyMDI1LTAzLTI2IDIwOjQxOjIxJywgJycsIDIsICcnLCAnYTZlN2Y5NjMtNTI4OC00MjNhLWI5ZmItNmU5MmI5ZmJhMjQxJyksDQooNTksICdSZWhvYm90aCcsIC0yMy4zMTcwMDAwMCwgMTcuMDkwMDAwMDAsICdlZjAyNjk2Ni1lMjVhLTQyMzctYTVmYy1mZGNkM2IxZTgwNTUnLCAnUTcwMDA1MCcsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjE6MDYnLCAnMjAyNS0wMy0yNiAyMDo0MToyMScsICcnLCA0LCAnJywgJ2E2ZTdmOTYzLTUyODgtNDIzYS1iOWZiLTZlOTJiOWZiYTI0MScpLA0KKDE2MywgJ0pvaGFubmVzYnVyZycsIC0yNi4yMDIyNzAwMCwgMjguMDQzNjMwMDAsICc0ODgyZGVhMC01ZmY3LTRlN2ItYTBlOC05MGQ1YmFhYjVjMDQnLCAnUTM0NjQ3JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yNyAyMDowNDoyOScsICcnLCAxLCAnJywgJzlmZGNlODc1LTA2ZWQtNDQ5OC05NjRlLTBmNzIzNjMxZmUxZicpLA0KKDE2NCwgJ0JldGhhbmllJywgLTI2LjQ4MzMzMDAwLCAxNy4xNTAwMDAwMCwgJzYzOTI3YTFmLTUzMWYtNGExOC05MDEzLTQ4ZmM4OTJhYzA3ZScsICdRMjUxNjc3JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo0MjozNycsICcnLCAxLCAnJywgJ2NjMDdjNTViLWZmZTQtNDNiMy05N2I3LTIzYjU3NDZjMDlmOScpLA0KKDE2NSwgJ0thcmFzYnVyZycsIC0yOC4wMTY2NzAwMCwgMTguNzUwMDAwMDAsICcyNWQ2N2FkOC1mMzNjLTQ0ZTItYWIxMS03YWQwNmI2YzY3YTUnLCAnUTEwMDMzMjgnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjQyOjM3JywgJycsIDEsICcnLCAnY2MwN2M1NWItZmZlNC00M2IzLTk3YjctMjNiNTc0NmMwOWY5JyksDQooMTY2LCAnS2VldG1hbnNob29wJywgLTI2LjU4MzMzMDAwLCAxOC4xMzMzMzAwMCwgJzgyZjNmYzZkLTBmYTUtNGQxYS05YTA2LTE1NmFkMzA4ZjkzMCcsICdRMTYwODg0JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo0MjozNycsICcnLCAxLCAnJywgJ2NjMDdjNTViLWZmZTQtNDNiMy05N2I3LTIzYjU3NDZjMDlmOScpLA0KKDE2NywgJ0zDvGRlcml0eicsIC0yNi42NDgwNzAwMCwgMTUuMTUzODMwMDAsICdkODk0ZTIzZi1kYTI2LTRlZDEtYTRmMS01MjM0YTA4NGM1ZmQnLCAnUTE1OTMyNScsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NDI6MzcnLCAnJywgMSwgJycsICdjYzA3YzU1Yi1mZmU0LTQzYjMtOTdiNy0yM2I1NzQ2YzA5ZjknKSwNCigxNjgsICdPcmFuamVtdW5kJywgLTI4LjU1MDAwMDAwLCAxNi40MzMzMzAwMCwgJ2ZjOTMwOWViLWJhMWEtNDI1Mi05OGMwLTQxMzZhYmVjODIxYicsICdRMTQwNDUxOCcsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NDI6MzcnLCAnJywgMSwgJycsICdjYzA3YzU1Yi1mZmU0LTQzYjMtOTdiNy0yM2I1NzQ2YzA5ZjknKSwNCigxNjksICdUc2VzJywgLTI1Ljg4MzMzMDAwLCAxOC4wMDAwMDAwMCwgJzM0OTE3OTQxLThiYmYtNDAzNi1iYTM3LWQ5YTAxM2YyYTYxNScsICdRMTUyOTQ0NCcsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NDI6MzcnLCAnJywgMSwgJycsICdjYzA3YzU1Yi1mZmU0LTQzYjMtOTdiNy0yM2I1NzQ2YzA5ZjknKSwNCigxNzAsICdXYXJtYmFkJywgLTI4LjQ1MDAwMDAwLCAxOC43MzMzMzAwMCwgJ2Y5NTQ5NmNjLTZlNjYtNDNjNC1hNjg5LTQ5ZTRlZTdiYTM0ZicsICdRNDc5MzEyJywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo0MjozNycsICcnLCAxLCAnJywgJ2NjMDdjNTViLWZmZTQtNDNiMy05N2I3LTIzYjU3NDZjMDlmOScpLA0KKDE3MSwgJ1J1bmR1JywgLTE3LjkzMzMzMDAwLCAxOS43NjY2NzAwMCwgJzlhNTQ0NTU3LWU5ZDUtNGJiOS04NWJiLWRjZmIxMDZmNzVjMScsICdRNjYyMjkxJywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo0NToxMicsICcnLCAxLCAnJywgJ2Q1M2NmNDE3LTg0YmMtNGE3Mi04YWNiLTI4MzY3ZjQxYmZiYicpLA0KKDE3MiwgJ0NhcGUgVG93bicsIC0zMy45MjU4NDAwMCwgMTguNDIzMjIwMDAsICc2NjFhY2RhZC05NGQ0LTRiNWEtYjE1Zi01YjZlN2ExNTc5YjEnLCAnUTU0NjUnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjQ2OjM4JywgJycsIDEsICcnLCAnYTIwMTVkZWQtMGZlZC00MDY0LThlNjMtODNhNDk1ZTFhMDliJyksDQooMTczLCAnRXB1cGEgQ29uc3RpdHVlbmN5JywgLTE3LjAwMzg4MDAwLCAxMy4yNDgyNTAwMCwgJ2IxNTYzZDY3LWNjNDMtNDMwYy1iMWM0LWYzYzM4ZDdjMTdmYicsICdRMTAyNjUxMScsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NTA6NDAnLCAnJywgMSwgJycsICdhNTVmOGQ1YS1mNDFmLTRiMGQtYjZhNC02OTcyNjQ3N2ZjNTInKSwNCigxNzQsICdLaG9yaXhhcycsIC0yMC4zNjY2NzAwMCwgMTQuOTY2NjcwMDAsICdkNmEzODExNS03NzdiLTRhMzQtOWMxYy0wMmI4Y2I1NzU2MTUnLCAnUTE3NDA2ODEnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjUwOjQwJywgJycsIDEsICcnLCAnYTU1ZjhkNWEtZjQxZi00YjBkLWI2YTQtNjk3MjY0NzdmYzUyJyksDQooMTc1LCAnS2hvcml4YXMgQ29uc3RpdHVlbmN5JywgLTIwLjM2NzkyMDAwLCAxNC45NTk5NjAwMCwgJzk1ZGE3MzFlLTA1NmMtNGEwYy04ZTgzLTI3ZjRjZTVhZjYxZScsICdRNDEyMjM0MCcsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NTA6NDAnLCAnJywgMSwgJycsICdhNTVmOGQ1YS1mNDFmLTRiMGQtYjZhNC02OTcyNjQ3N2ZjNTInKSwNCigxNzYsICdPcHV3bycsIC0xOC4wNjA2ODAwMCwgMTMuODM5OTgwMDAsICdlZmIxODlmNC1lYzFhLTRjMzctODdhYi1lZjg3ZThlYjFjZjQnLCAnUTEwMjQwODknLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjUwOjQwJywgJycsIDEsICcnLCAnYTU1ZjhkNWEtZjQxZi00YjBkLWI2YTQtNjk3MjY0NzdmYzUyJyksDQooMTc3LCAnT3B1d28gQ29uc3RpdHVlbmN5JywgLTIwLjExNjY3MDAwLCAxNi4xNTAwMDAwMCwgJzhkN2MzNjFmLWU2ZmEtNGIwYy1iMDYxLTAzNTE2MDRmZjEzYScsICdRMTcwNDM0NicsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NTE6NTYnLCAnJywgMSwgJycsICdhNTVmOGQ1YS1mNDFmLTRiMGQtYjZhNC02OTcyNjQ3N2ZjNTInKSwNCigxNzgsICdTZXNmb250ZWluIENvbnN0aXR1ZW5jeScsIC0xOS41NjEwNjAwMCwgMTMuNzY1MzAwMDAsICc1NDU4ZDYxNS1mNjc0LTQ3MTQtOWYwYi0xZTdhMzdiYzNlYTEnLCAnUTM3MTE3MDgnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjUxOjU2JywgJycsIDEsICcnLCAnYTU1ZjhkNWEtZjQxZi00YjBkLWI2YTQtNjk3MjY0NzdmYzUyJyksDQooMTc5LCAnT2hhbmd3ZW5hJywgLTE3LjQwMDAwMDAwLCAxNS44ODMzMzAwMCwgJ2Y1NTI3ZDU4LTVmMjMtNDFjZi05ZmUwLTRlZjliOTFiY2VjZicsICdRMjAzMzMxOScsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NTU6MDgnLCAnJywgMSwgJycsICczZWU1YjEwZS02MGQ0LTRlYjAtYTVlYS1hZTk4ZGI0NWJlYmUnKSwNCigxODAsICdHb2JhYmlzJywgLTIyLjQ1MDAwMDAwLCAxOC45NjY2NzAwMCwgJzAwYzUwMDBhLTM3NDItNDUwYy1hNTJiLTliYTM4OTEzZTk0NScsICdRMTAwMDYwOScsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NTk6MzMnLCAnJywgMSwgJycsICdhYjg4ODQyZi0wZTY2LTQ3Y2QtOTcxMi02ZDVhYWQzYjE3OWInKSwNCigxODEsICdPbmdhbmRqZXJhJywgLTE3Ljg4MzMzMDAwLCAxNS4wNjY2NzAwMCwgJzJmMTM2ODNhLTk4NjMtNDgzYy1iYTg4LTE3MGQ1YTc4YjlkOCcsICdRMzM1MjcyMScsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDk6MDE6NTgnLCAnJywgMSwgJycsICdkZDAxNWZlNy01MGI5LTRhMWUtYmU2Ni0yZTVkZWI2ZWEwNWUnKSwNCigxODIsICdPdXRhcGknLCAtMTcuNTAwMDAwMDAsIDE0Ljk4MzMzMDAwLCAnY2QyMmUxZTktZWI2Zi00MmUxLTkwZDYtZWE4YWEwN2UyNzUzJywgJ1ExNzU4MjE1JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwOTowMTo1OCcsICcnLCAxLCAnJywgJ2RkMDE1ZmU3LTUwYjktNGExZS1iZTY2LTJlNWRlYjZlYTA1ZScpLA0KKDE4MywgJ09uZGFuZ3dhJywgLTE3LjkxNjY3MDAwLCAxNS45NTAwMDAwMCwgJzU4OWNiY2JjLTlkYzUtNDg4MC05NjhkLWMzODBmZDQzMTZlZicsICdRMjAyMzc3MycsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDk6MDU6NTMnLCAnJywgMSwgJycsICc2ZjExNGQxMy1jZTdmLTQ3NTEtODAyOS1mZjc3MjNhOTMyYTInKSwNCigxODQsICdPbmd3ZWRpdmEnLCAtMTcuNzgzMzMwMDAsIDE1Ljc2NjY3MDAwLCAnNmFlNGYzNTEtNTVlMi00ZTY5LWEzMWUtMjllNzZhYzdmN2M1JywgJ1E4NDE1NTcnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA5OjA1OjUzJywgJycsIDEsICcnLCAnNmYxMTRkMTMtY2U3Zi00NzUxLTgwMjktZmY3NzIzYTkzMmEyJyksDQooMTg1LCAnT3NoYWthdGknLCAtMTcuNzg4MzMwMDAsIDE1LjcwNDM2MDAwLCAnNWViZTIwYjUtMjQ2OC00ZWY5LWFiODItMzdlNTU0ZDM5ZDVmJywgJ1E5ODU2MjInLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA5OjA1OjUzJywgJycsIDEsICcnLCAnNmYxMTRkMTMtY2U3Zi00NzUxLTgwMjktZmY3NzIzYTkzMmEyJyksDQooMTg2LCAnT211dGhpeWEnLCAtMTguMzY0NjMwMDAsIDE2LjU4MTQ2MDAwLCAnZDg4OGI0ZDItYWY4Ni00ZTM0LThiZWUtNDU1NGUwYjE5MjEzJywgJ1ExMDA1NTg0JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwOTowOToyMycsICcnLCAxLCAnJywgJ2IwNjUwYTZkLTU2ZDgtNDc2NS1iNTY2LWY2YjkzMjU1ZjdmNCcpLA0KKDE4NywgJ1RzdW1lYicsIC0xOS4yMzMzMzAwMCwgMTcuNzE2NjcwMDAsICc5NmI1MTUwNy0xYjY2LTRiNWMtYWIzNy05MDkxNTlkNTMyNjEnLCAnUTYzOTQ2NycsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDk6MDk6MjMnLCAnJywgMSwgJycsICdiMDY1MGE2ZC01NmQ4LTQ3NjUtYjU2Ni1mNmI5MzI1NWY3ZjQnKSwNCigxODgsICdCYWdhbmknLCAtMTguMTEwNjUwMDAsIDIxLjYxNjQ1MDAwLCAnYjI4MTk5YjgtYzFkOS00N2M1LTgzNmEtZmFiMjgyM2E3MjZiJywgJ1E3OTk4MzAnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA5OjEzOjMxJywgJycsIDEsICcnLCAnZWRjM2FkZDYtMTk3Ny00NDNlLWFmNDAtMzZmNzAwYWQzMWMwJyksDQooMTg5LCAnS2F0aW1hIE11bGlsbycsIC0xNy41MDAwMDAwMCwgMjQuMjY2NjcwMDAsICdhYTcyMDMwNC1iODliLTQxNzAtODUzOS0wZjQ3NmQ3NzAyODQnLCAnUTg2NDEwMCcsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDk6MTM6MzEnLCAnJywgMSwgJycsICdlZGMzYWRkNi0xOTc3LTQ0M2UtYWY0MC0zNmY3MDBhZDMxYzAnKTs=', 'Cities', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-24 10:21:08', '2025-03-28 12:25:19', 30, 0, 1, 251), -(298, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 1, '', '', '{}', '', '75061367-79c2-4d5b-a75d-eca6d33507df', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Timezones', 'Timezone', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', '', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'Timezones.', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX2RlbW9fdGltZXpvbmVgDQotLQ0KDQpJTlNFUlQgSU5UTyBgI19fZGVtb190aW1lem9uZWAgKGBpZGAsIGB0aW1lem9uZV9uYW1lYCwgYHRpbWV6b25lX2lkZW50aWZpZXJgLCBgZ210X29mZnNldF9uYW1lYCwgYGd1aWRgLCBgZ210X29mZnNldF9zZWNgLCBgYWJicmV2aWF0aW9uYCwgYG1ldGFrZXlgLCBgbWV0YWRlc2NgLCBgbWV0YWRhdGFgLCBgb3JkZXJpbmdgLCBgcHVibGlzaGVkYCwgYG1vZGlmaWVkYCwgYGNyZWF0ZWRgLCBgaGl0c2AsIGB2ZXJzaW9uYCwgYHBhcmFtc2AsIGBjb3VudHJ5YCkgVkFMVUVTDQooMSwgJ1NvdXRoIEFmcmljYW4gU3RhbmRhcmQgVGltZScsICdBZnJpY2EvSm9oYW5uZXNidXJnJywgJ1VUQyswMjowMCcsICdkZWI3ZDkzOC1hMzg1LTQ1NGQtYjZjNy1mYTU5ZDIzZjk3NmInLCA3MjAwLCAnU0FTVCcsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMTM6NDk6MTEnLCAnMjAyNS0wMy0yNiAxNDo1ODo1NCcsICcnLCAyLCAnJywgJzJmY2E5ZTc5LWM4YzktNDU3Zi1hMmEyLTkzYmU3OTIwN2VkZScpLA0KKDIsICdXZXN0IEFmcmljYSBTdW1tZXIgVGltZScsICdBZnJpY2EvV2luZGhvZWsnLCAnVVRDKzAyOjAwJywgJzM1YmJjOTJmLTUxNjEtNGQxMy1hMjBmLTU4NGMyMzExNmIxMicsIDcyMDAsICdXQVNUJywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAxMzo0OTowMicsICcyMDI1LTAzLTI2IDE1OjMzOjM4JywgJycsIDIsICcnLCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0Jyk7', 'Timezone', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"da82cdf5-15f0-45b2-b5e7-0678780a50f0\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-24 10:48:37', '2025-05-13 13:10:01', 24, 0, 1, 52), -(299, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{\"addtabs0\":{\"name\":\"Details\"},\"addtabs1\":{\"name\":\"States\"}}', '{}', '', 1, '', '', '{}', '', '6acc4069-1c33-4470-85a6-07bc9bb16d10', 'images/vdm/icon/country.png#joomlaImage://local-images/vdm/icon/country.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Countries', 'Country', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'A list of countries.', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX2RlbW9fY291bnRyeWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19kZW1vX2NvdW50cnlgIChgaWRgLCBgbmFtZWAsIGBzdWJyZWdpb25gLCBgY2FwaXRhbGAsIGBsb25naXR1ZGVgLCBgbGF0aXR1ZGVgLCBgZW1vaml1YCwgYGVtb2ppYCwgYHRsZGAsIGBuYXRpb25hbGl0eWAsIGBuYXRpdmVgLCBgbnVtZXJpY19jb2RlYCwgYHBob25lY29kZWAsIGB3aWtpZGF0YWlkYCwgYG1ldGFrZXlgLCBgbWV0YWRlc2NgLCBgbWV0YWRhdGFgLCBgb3JkZXJpbmdgLCBgcHVibGlzaGVkYCwgYG1vZGlmaWVkYCwgYGNyZWF0ZWRgLCBgaGl0c2AsIGB2ZXJzaW9uYCwgYHBhcmFtc2AsIGBjdXJyZW5jeV9uYW1lYCwgYGNvZGV0aHJlZWAsIGBzeW1ib2xgLCBgZ3VpZGAsIGBpc28yYCwgYGlzbzNgKSBWQUxVRVMNCigxLCAnTmFtaWJpYScsICdjMWNjZTkzMC01MmFhLTQ4ZmMtYjVkNC1mZDVjOTcyOWE3MzUnLCAnYmJiMGQ1NjQtY2UwNi00NGQzLThhMWYtZDVlNTdmNTZiMTEzJywgMTcuMDAwMDAwMDAsIC0yMi4wMDAwMDAwMCwgJ1UrMUYxRjMgVSsxRjFFNicsICfwn4ez8J+HpicsICcubmEnLCAnTmFtaWJpYW4nLCAnTmFtaWJpYScsIDUxNiwgMjY0LCAnUTEwMzAnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMSwgMSwgJzIwMjUtMDMtMjggMDg6NTU6MTEnLCAnMjAyNS0wMy0yNSAxNjoxMDo0MycsICcnLCAyNiwgJycsICdOYW1pYmlhbiBEb2xsYXInLCAnTkFEJywgJyQnLCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgJ05BJywgJ05BTScpLA0KKDIsICdTb3V0aCBBZnJpY2EnLCAnYzFjY2U5MzAtNTJhYS00OGZjLWI1ZDQtZmQ1Yzk3MjlhNzM1JywgJzQ4ODJkZWEwLTVmZjctNGU3Yi1hMGU4LTkwZDViYWFiNWMwNCcsIDI0LjAwMDAwMDAwLCAtMjkuMDAwMDAwMDAsICdVKzFGMUZGIFUrMUYxRTYnLCAn8J+Hv/Cfh6YnLCAnLnphJywgJ1NvdXRoIEFmcmljYW4nLCAnU291dGggQWZyaWNhJywgNzEwLCAyNywgJ1EyNTgnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMiwgMSwgJzIwMjUtMDMtMjggMDg6NDY6NTgnLCAnMjAyNS0wMy0yNiAxNDo1ODo1NCcsICcnLCA3LCAnJywgJ1NvdXRoIEFmcmljYW4gcmFuZCcsICdaQVInLCAnUicsICcyZmNhOWU3OS1jOGM5LTQ1N2YtYTJhMi05M2JlNzkyMDdlZGUnLCAnWkEnLCAnWkFGJyk7', 'Country', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"335866ce-b81b-4329-901d-c20254135c9c\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-24 12:36:05', '2025-03-28 12:25:09', 44, 0, 1, 36), -(301, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 0, '', '', '{}', '', '9eefa86b-6294-4512-8d62-979abf16c00d', 'images/vdm/icon/region.png#joomlaImage://local-images/vdm/icon/region.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Regions', 'Region', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'Regions', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX2RlbW9fcmVnaW9uYA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX2RlbW9fcmVnaW9uYCAoYGlkYCwgYG5hbWVgLCBgd2lraWRhdGFpZGAsIGBtZXRha2V5YCwgYG1ldGFkZXNjYCwgYG1ldGFkYXRhYCwgYG9yZGVyaW5nYCwgYHB1Ymxpc2hlZGAsIGBtb2RpZmllZGAsIGBjcmVhdGVkYCwgYGhpdHNgLCBgdmVyc2lvbmAsIGBwYXJhbXNgLCBgZ3VpZGApIFZBTFVFUw0KKDEsICdBZnJpY2EnLCAnUTE1JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDEsIDEsICcyMDI1LTAzLTI2IDEzOjEwOjMyJywgJzIwMjUtMDMtMjUgMTU6Mzg6MTMnLCAnJywgNSwgJycsICcyZTQ4NzM0Yi05OTc4LTRmZTEtYWU5MC1iNzVlM2RlOTA1M2QnKSwNCigyLCAnQXNpYScsICdRNDgnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMiwgMSwgJzIwMjUtMDMtMjggMDk6NDc6NTMnLCAnMjAyNS0wMy0yNiAxMzoyMjoxOScsICcnLCAyLCAnJywgJ2ZlYTg1MDM2LTg4MjItNGQ5Ni1iOGM3LTViZjQ1MTE0YzQwYScpOw==', 'Regions', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-25 09:11:11', '2025-03-28 12:24:23', 21, 0, 1, 252), -(302, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 0, '', '', '{}', '', '2e451812-45af-4015-aa0c-f5912702c9af', 'images/vdm/icon/subregion.png#joomlaImage://local-images/vdm/icon/subregion.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Subregions', 'Subregion', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'Subregions', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX2RlbW9fc3VicmVnaW9uYA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX2RlbW9fc3VicmVnaW9uYCAoYGlkYCwgYG5hbWVgLCBgcmVnaW9uYCwgYHdpa2lkYXRhaWRgLCBgbWV0YWtleWAsIGBtZXRhZGVzY2AsIGBtZXRhZGF0YWAsIGBvcmRlcmluZ2AsIGBwdWJsaXNoZWRgLCBgbW9kaWZpZWRgLCBgY3JlYXRlZGAsIGBoaXRzYCwgYHZlcnNpb25gLCBgcGFyYW1zYCwgYGd1aWRgKSBWQUxVRVMNCigxLCAnU291dGhlcm4gQWZyaWNhJywgJzJlNDg3MzRiLTk5NzgtNGZlMS1hZTkwLWI3NWUzZGU5MDUzZCcsICdRMjczOTQnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMSwgMSwgJzIwMjUtMDMtMjcgMTQ6MTI6NTknLCAnMjAyNS0wMy0yNSAxNTo0MDoxMycsICcnLCAyNSwgJycsICdjMWNjZTkzMC01MmFhLTQ4ZmMtYjVkNC1mZDVjOTcyOWE3MzUnKSwNCigyLCAnQ2VudHJhbCBBc2lhJywgJ2ZlYTg1MDM2LTg4MjItNGQ5Ni1iOGM3LTViZjQ1MTE0YzQwYScsICdRMjcyNzUnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA5OjQ3OjUzJywgJycsIDEsICcnLCAnMmNjY2IwNzgtYTIzYi00NWIyLWJmYTUtYWVmNGVmZTk1ZWM0Jyk7', 'Sub-Regions', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-25 13:19:47', '2025-03-28 12:24:16', 25, 0, 1, 253); +(296, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{\"addtabs0\":{\"name\":\"Details\"},\"addtabs1\":{\"name\":\"Cities\"}}', '{}', '', 1, '', '', '{}', '', '6c6345a1-e3e4-4840-8918-831034e95b19', 'images/vdm/icon/state.png#joomlaImage://local-images/vdm/icon/state.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'States', 'State', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'States', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdGF0ZWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fc3RhdGVgIChgaWRgLCBgY291bnRyeWAsIGBmaXBzX2NvZGVgLCBgbmFtZWAsIGB0eXBlYCwgYHdpa2lkYXRhaWRgLCBgbGF0aXR1ZGVgLCBgbG9uZ2l0dWRlYCwgYG1ldGFrZXlgLCBgbWV0YWRlc2NgLCBgbWV0YWRhdGFgLCBgb3JkZXJpbmdgLCBgcHVibGlzaGVkYCwgYG1vZGlmaWVkYCwgYGNyZWF0ZWRgLCBgaGl0c2AsIGB2ZXJzaW9uYCwgYHBhcmFtc2AsIGBndWlkYCwgYGlzbzJgKSBWQUxVRVMNCigxLCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMjEsICdLaG9tYXMnLCAncmVnaW9uJywgJ1E4MzQ1MDgnLCAtMjIuNjM3Nzg1NDAsIDE3LjEwMTE5MzEwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMSwgMSwgJzIwMjUtMDMtMjYgMTk6NTU6NDcnLCAnMjAyNS0wMy0yNSAxNjoyMzozNCcsICcnLCAxMSwgJycsICdjODQwYzVhZS1kMzg0LTQ4NDctYjUwZC1hODJlZjI5ODNjNGQnLCAnTkEnKSwNCigyLCAnMmZjYTllNzktYzhjOS00NTdmLWEyYTItOTNiZTc5MjA3ZWRlJywgMTEsICdXZXRlcm4gQ2FwZScsICdwcm92aW5jZScsICdRMTI3MTY3JywgLTMzLjIyNzc5MTgwLCAyMS44NTY4NTg2MCwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDIsIDEsICcyMDI1LTAzLTI2IDE1OjU1OjQ2JywgJzIwMjUtMDMtMjYgMTU6MjA6MDUnLCAnJywgMywgJycsICdhMjAxNWRlZC0wZmVkLTQwNjQtOGU2My04M2E0OTVlMWEwOWInLCAnV0MnKSwNCigzLCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMTUyLCAnT3Rqb3pvbmRqdXBhJywgJ3JlZ2lvbicsICdRODc2NTA2JywgLTIwLjU0ODY5MTYwLCAxNy42Njg4ODcwMCwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDMsIDEsICcyMDI1LTAzLTI2IDE5OjU2OjQ0JywgJzIwMjUtMDMtMjYgMTU6NDQ6MTEnLCAnJywgMywgJycsICdkZTU3NzMyNS0xZGVkLTQ2ZDktYTAyYy0yMzFiY2Q4YTQ2MWUnLCAnT0QnKSwNCig0LCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMTUyLCAnRXJvbmdvJywgJ3JlZ2lvbicsICdRNjQ4NzUzJywgLTIyLjI1NjU2ODIwLCAxNS40MDY4MDc5MCwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDQsIDEsICcyMDI1LTAzLTI2IDE5OjU1OjA4JywgJzIwMjUtMDMtMjYgMTU6NTA6NTAnLCAnJywgNCwgJycsICcyYzAzNzdjNy1kZDMwLTRhNjctYjhiOS03Y2UxYWZmNGZmOWInLCAnRVInKSwNCig5LCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMTUyLCAnSGFyZGFwJywgJ3JlZ2lvbicsICdRNzUyNjc2JywgLTI2Ljg0Mjk2NDUwLCAxNy4yOTAyODM5MCwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyMToxNycsICcyMDI1LTAzLTI2IDIxOjIxOjU1JywgJycsIDIsICcnLCAnYTZlN2Y5NjMtNTI4OC00MjNhLWI5ZmItNmU5MmI5ZmJhMjQxJywgJ0tBJyksDQooMTEsICcyZmNhOWU3OS1jOGM5LTQ1N2YtYTJhMi05M2JlNzkyMDdlZGUnLCAwNiwgJ0dhdXRlbmcnLCAncHJvdmluY2UnLCAnUTEzMzA4MycsIC0yNi4yNzA3NTkzMCwgMjguMTEyMjY3OTAsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCA2LCAxLCAnMjAyNS0wMy0yNyAyMDowNDozMScsICcyMDI1LTAzLTI3IDEyOjQwOjIzJywgJycsIDE1LCAnJywgJzlmZGNlODc1LTA2ZWQtNDQ5OC05NjRlLTBmNzIzNjMxZmUxZicsICdHUCcpLA0KKDEyLCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMzEsICdLYXJhcycsICdyZWdpb24nLCAnUTU3MzQ2NycsIC0yNi44NDI5NjQ1MCwgMTcuMjkwMjgzOTAsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6MzY6MzAnLCAnJywgMSwgJycsICdjYzA3YzU1Yi1mZmU0LTQzYjMtOTdiNy0yM2I1NzQ2YzA5ZjknLCAnS0EnKSwNCigxMywgJzYyYjUwMzkyLTU0ZTItNDQ5MC1hZDk0LThkZTA3NzM1YTU4NCcsIDQwLCAnS2F2YW5nbyBFYXN0JywgJ3JlZ2lvbicsICdRMTQ4MjQwMzInLCAxOC4yNzEwNDgwMCwgMTguNDI3NjA0NzAsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NDQ6MzknLCAnJywgMSwgJycsICdkNTNjZjQxNy04NGJjLTRhNzItOGFjYi0yODM2N2Y0MWJmYmInLCAnS0UnKSwNCigxNCwgJzYyYjUwMzkyLTU0ZTItNDQ5MC1hZDk0LThkZTA3NzM1YTU4NCcsIDMyLCAnS3VuZW5lJywgJ3JlZ2lvbicsICdRODM0NTEzJywgLTE5LjQwODYzMTcwLCAxMy45MTQzOTkwMCwgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo0Nzo1NycsICcnLCAxLCAnJywgJ2E1NWY4ZDVhLWY0MWYtNGIwZC1iNmE0LTY5NzI2NDc3ZmM1MicsICdLVScpLA0KKDE1LCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMzMsICdPaGFuZ3dlbmEnLCAncmVnaW9uJywgJ1E4NDU3MDInLCAtMTcuNTk3OTI5MTAsIDE2LjgxNzgzNzcwLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjUzOjU5JywgJycsIDEsICcnLCAnM2VlNWIxMGUtNjBkNC00ZWIwLWE1ZWEtYWU5OGRiNDViZWJlJywgJ09XJyksDQooMTYsICc2MmI1MDM5Mi01NGUyLTQ0OTAtYWQ5NC04ZGUwNzczNWE1ODQnLCAzNSwgJ09tYWhla2UnLCAncmVnaW9uJywgJ1E4Mzg3NzUnLCAxOS4xODgwMDQ3MCwgLTIxLjg0NjY2NTEwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgNywgMSwgJzIwMjUtMDMtMjggMDg6NTk6NDYnLCAnMjAyNS0wMy0yOCAwODo1ODowNycsICcnLCAzLCAnJywgJ2FiODg4NDJmLTBlNjYtNDdjZC05NzEyLTZkNWFhZDNiMTc5YicsICdPSCcpLA0KKDE3LCAnNjJiNTAzOTItNTRlMi00NDkwLWFkOTQtOGRlMDc3MzVhNTg0JywgMzYsICdPbXVzYXRpJywgJ3JlZ2lvbicsICdRNzY0Mzg1JywgMTQuODQ1NDYxOTAsIC0xOC40MDcwMjk0MCwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDgsIDEsICcyMDI1LTAzLTI4IDA5OjAxOjU4JywgJzIwMjUtMDMtMjggMDk6MDE6MDInLCAnJywgMiwgJycsICdkZDAxNWZlNy01MGI5LTRhMWUtYmU2Ni0yZTVkZWI2ZWEwNWUnLCAnT1MnKSwNCigxOCwgJzYyYjUwMzkyLTU0ZTItNDQ5MC1hZDk0LThkZTA3NzM1YTU4NCcsIDM3LCAnT3NoYW5hJywgJ3JlZ2lvbicsICdRNTM0NTI4JywgMTUuNjg4MTc4ODAsIC0xOC40MzA1MDY0MCwgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDksIDEsICcyMDI1LTAzLTI4IDA5OjA1OjU1JywgJzIwMjUtMDMtMjggMDk6MDQ6MjEnLCAnJywgMywgJycsICc2ZjExNGQxMy1jZTdmLTQ3NTEtODAyOS1mZjc3MjNhOTMyYTInLCAnT04nKSwNCigxOSwgJzYyYjUwMzkyLTU0ZTItNDQ5MC1hZDk0LThkZTA3NzM1YTU4NCcsIDM4LCAnT3NoaWtvdG8nLCAncmVnaW9uJywgJ1E4NzY1MTInLCAxNi45MTIyNTEwMCwgLTE4LjQxNTI1NzUwLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgMTAsIDEsICcyMDI1LTAzLTI4IDA5OjA5OjIzJywgJzIwMjUtMDMtMjggMDk6MDg6MDgnLCAnJywgMiwgJycsICdiMDY1MGE2ZC01NmQ4LTQ3NjUtYjU2Ni1mNmI5MzI1NWY3ZjQnLCAnT1QnKSwNCigyMCwgJzYyYjUwMzkyLTU0ZTItNDQ5MC1hZDk0LThkZTA3NzM1YTU4NCcsIDI4LCAnWmFtYmV6aScsICdyZWdpb24nLCAnUTQ3MzE5MCcsIDIzLjk1MzY0NjYwLCAtMTcuODE5MzQxOTAsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAxMSwgMSwgJzIwMjUtMDMtMjggMDk6MTM6MzEnLCAnMjAyNS0wMy0yOCAwOToxMDo1MicsICcnLCAyLCAnJywgJ2VkYzNhZGQ2LTE5NzctNDQzZS1hZjQwLTM2ZjcwMGFkMzFjMCcsICdDQScpOw==', 'States', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"abaff633-2a9f-4be1-b057-241f657953a1\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-24 08:26:24', '2025-07-24 08:28:45', 41, 0, 1, 170), +(297, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 1, '', '', '{}', '', '3dbb581b-619a-4fb0-a6f6-e4a136ea31e2', 'images/vdm/icon/city.png#joomlaImage://local-images/vdm/icon/city.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Cities', 'City', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'Cities', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9jaXR5YA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV9jaXR5YCAoYGlkYCwgYG5hbWVgLCBgbGF0aXR1ZGVgLCBgbG9uZ2l0dWRlYCwgYGd1aWRgLCBgd2lraWRhdGFpZGAsIGBtZXRha2V5YCwgYG1ldGFkZXNjYCwgYG1ldGFkYXRhYCwgYG9yZGVyaW5nYCwgYHB1Ymxpc2hlZGAsIGBtb2RpZmllZGAsIGBjcmVhdGVkYCwgYGhpdHNgLCBgdmVyc2lvbmAsIGBwYXJhbXNgLCBgc3RhdGVgKSBWQUxVRVMNCigxLCAnV2luZGhvZWsnLCAtMjIuNTU5NDEwMDAsIDE3LjA4MzIzMDAwLCAnYmJiMGQ1NjQtY2UwNi00NGQzLThhMWYtZDVlNTdmNTZiMTEzJywgJ1EzOTM1JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDEsIDEsICcyMDI1LTAzLTI3IDA2OjI3OjM5JywgJzIwMjUtMDMtMjUgMTY6MTU6MDcnLCAnJywgMywgJycsICdjODQwYzVhZS1kMzg0LTQ4NDctYjUwZC1hODJlZjI5ODNjNGQnKSwNCigyLCAnS2F0dXR1cmEnLCAtMjIuNTIzMDYwMDAsIDE3LjA2MDI4MDAwLCAnMjQyNzY3ZTItYjc2Mi00OWMzLTg2ZjMtZjIwYjBjMzE3ODJhJywgJ1E4NjQxMDAnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI3OjMwJywgJzIwMjUtMDMtMjYgMTQ6MzM6MzAnLCAnJywgMiwgJycsICdjODQwYzVhZS1kMzg0LTQ4NDctYjUwZC1hODJlZjI5ODNjNGQnKSwNCigzLCAnR3Jvb3Rmb250ZWluJywgLTE5LjU2NjY3MDAwLCAxOC4xMTY2NzAwMCwgJzZmMTM0MTQ3LTYyNDgtNGE4MC1iM2YyLThiOGZlNWRhZGFmOCcsICdROTg2MzM2JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNzoyMScsICcyMDI1LTAzLTI2IDE1OjQ0OjExJywgJycsIDIsICcnLCAnZGU1NzczMjUtMWRlZC00NmQ5LWEwMmMtMjMxYmNkOGE0NjFlJyksDQooNCwgJ09rYWhhbmRqYScsIC0yMS45ODMzMzAwMCwgMTYuOTE2NjcwMDAsICczMGM0YjYwNC1hNmJiLTRlYmEtYTBhNC05NzZlYTBmNzIxODMnLCAnUTU5NzQ5MScsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6Mjc6MTQnLCAnMjAyNS0wMy0yNiAxNTo0NDoxMScsICcnLCAyLCAnJywgJ2RlNTc3MzI1LTFkZWQtNDZkOS1hMDJjLTIzMWJjZDhhNDYxZScpLA0KKDUsICdPa2FrYXJhcmEnLCAtMjAuNTgzMzMwMDAsIDE3LjQzMzMzMDAwLCAnZTEwMjkwNTYtOWIyYy00ZjI0LThmODUtNmQ3N2FhNTlkMjQ3JywgJ1E5OTIwNzcnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI3OjA0JywgJzIwMjUtMDMtMjYgMTU6NDQ6MTEnLCAnJywgMiwgJycsICdkZTU3NzMyNS0xZGVkLTQ2ZDktYTAyYy0yMzFiY2Q4YTQ2MWUnKSwNCig2LCAnT3RhdmknLCAtMTkuNjUwMDAwMDAsIDE3LjMzMzMzMDAwLCAnN2M2M2I1ODAtNGVlMC00OTlmLWIzNGItZWZiYzQ2NzViZmY2JywgJ1ExMDEzOTY1JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNjo1NicsICcyMDI1LTAzLTI2IDE1OjQ0OjExJywgJycsIDIsICcnLCAnZGU1NzczMjUtMWRlZC00NmQ5LWEwMmMtMjMxYmNkOGE0NjFlJyksDQooNywgJ090aml3YXJvbmdvJywgLTIwLjQ2MzY5MDAwLCAxNi42NDc3MjAwMCwgJzRlZDZjNjBlLTVlMTMtNGQ2OC04M2U4LTVlMmY1ZTZkMGE3NScsICdROTkzMTQ5JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNjo0MycsICcyMDI1LTAzLTI2IDE1OjQ0OjExJywgJycsIDIsICcnLCAnZGU1NzczMjUtMWRlZC00NmQ5LWEwMmMtMjMxYmNkOGE0NjFlJyksDQooNDYsICdBcmFuZGlzJywgLTIyLjQxNjY3MDAwLCAxNC45NjY2NzAwMCwgJ2YxN2U1NGYwLWUwNWQtNDNjZC05OGVmLTViZWRlYWE1NTRkMicsICdRNDM4ODUxJywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNjowNycsICcyMDI1LTAzLTI2IDE1OjU2OjUzJywgJycsIDIsICcnLCAnMmMwMzc3YzctZGQzMC00YTY3LWI4YjktN2NlMWFmZjRmZjliJyksDQooNDcsICdIZW50aWVzYmFhaScsIC0yMi4xMTY2NzAwMCwgMTQuMjgzMzMwMDAsICdjMjkzZWQ4My1jNjljLTRiN2YtYTI3MS03ZTUwZWFjZDEzNGInLCAnUTEwMTMzODknLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI2OjAwJywgJzIwMjUtMDMtMjYgMTU6NTY6NTMnLCAnJywgMiwgJycsICcyYzAzNzdjNy1kZDMwLTRhNjctYjhiOS03Y2UxYWZmNGZmOWInKSwNCig0OCwgJ0thcmliaWInLCAtMjEuOTMzMzMwMDAsIDE1LjgzMzMzMDAwLCAnNTNhOWQ0OWItYTBlZi00ZTdlLWFkNjctN2VhMDljNTE3OTgxJywgJ1ExMzQ4MTgxJywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNTo1MScsICcyMDI1LTAzLTI2IDE1OjU2OjUzJywgJycsIDIsICcnLCAnMmMwMzc3YzctZGQzMC00YTY3LWI4YjktN2NlMWFmZjRmZjliJyksDQooNDksICdPbWFydXJ1JywgLTIxLjQzMzMzMDAwLCAxNS45MzMzMzAwMCwgJ2RhOGI0N2IwLTgxN2QtNDQ5MC04N2QzLTQ5NzViYjU0MDQ2OCcsICdRMTg5NjE2MScsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjU6NDEnLCAnMjAyNS0wMy0yNiAxNTo1Njo1MycsICcnLCAyLCAnJywgJzJjMDM3N2M3LWRkMzAtNGE2Ny1iOGI5LTdjZTFhZmY0ZmY5YicpLA0KKDUwLCAnT3RqaW1iaW5nd2UnLCAtMjIuMzUwMDAwMDAsIDE2LjEzMzMzMDAwLCAnYjU5YzQzYzAtNmRhOS00ZDA2LTg1ZTgtY2VkMzM0NDA3OTdlJywgJ1E0NjQwNTAnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI1OjMyJywgJzIwMjUtMDMtMjYgMTU6NTY6NTMnLCAnJywgMiwgJycsICcyYzAzNzdjNy1kZDMwLTRhNjctYjhiOS03Y2UxYWZmNGZmOWInKSwNCig1MSwgJ1N3YWtvcG11bmQnLCAtMjIuNjMxOTkwMDAsIDE0LjYwMTE5MDAwLCAnNGM1MTIzMTYtN2Q1OS00NmE2LWJlZjktYjYwOTVkZTlmZDM0JywgJ1E1OTY5OCcsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjU6MTcnLCAnMjAyNS0wMy0yNiAxNTo1Njo1MycsICcnLCAyLCAnJywgJzJjMDM3N2M3LWRkMzAtNGE2Ny1iOGI5LTdjZTFhZmY0ZmY5YicpLA0KKDUyLCAnU3dha29wbXVuZCBDb25zdGl0dWVuY3knLCAtMjIuNjMxOTkwMDAsIDE0LjYwMTE5MDAwLCAnMjI1ZDUwNjQtMTdkMy00Y2E3LTk5NzAtM2Y5OWE0Y2QwZDU0JywgJ1EzNzExNzEwJywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNToxMCcsICcyMDI1LTAzLTI2IDE1OjU2OjUzJywgJycsIDIsICcnLCAnMmMwMzc3YzctZGQzMC00YTY3LWI4YjktN2NlMWFmZjRmZjliJyksDQooNTMsICdVc2Frb3MnLCAtMjIuMDAwMDAwMDAsIDE1LjYwMDAwMDAwLCAnMzY3MDBmNmMtY2IwYS00MDU4LWE4ZGMtMDZlYmYwOGNiNzc4JywgJ1ExNDU3MjY1JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNTowMicsICcyMDI1LTAzLTI2IDE1OjU2OjUzJywgJycsIDIsICcnLCAnMmMwMzc3YzctZGQzMC00YTY3LWI4YjktN2NlMWFmZjRmZjliJyksDQooNTQsICdXYWx2aXMgQmF5JywgLTIyLjk1NzUwMDAwLCAxNC41MDUyODAwMCwgJzg4ZDg4ZGY5LWJlY2MtNDg4OS05MmYxLTE1ODNiZjU1MjdjYycsICdRMjIwODQzJywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsICcnLCAxLCAnMjAyNS0wMy0yNyAwNjoyNDo1NScsICcyMDI1LTAzLTI2IDE1OjU2OjUzJywgJycsIDIsICcnLCAnMmMwMzc3YzctZGQzMC00YTY3LWI4YjktN2NlMWFmZjRmZjliJyksDQooNTUsICdBcmFub3MnLCAtMjQuMTMzMzMwMDAsIDE5LjExNjY3MDAwLCAnZDZmMjRmNjQtYjI1MS00MGE2LWI3ODgtZmE2MGJlZTE5YWQwJywgJ1E2MjYwNDAnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI0OjQ5JywgJzIwMjUtMDMtMjYgMjA6NDE6MjEnLCAnJywgMiwgJycsICdhNmU3Zjk2My01Mjg4LTQyM2EtYjlmYi02ZTkyYjlmYmEyNDEnKSwNCig1NiwgJ0hvYWNoYW5hcycsIC0yMy45MTY2NzAwMCwgMTguMDUwMDAwMDAsICdkNzM1YjM2OS1lYWFhLTRmNTEtOTQ0My1kNWQzZGJlZmE0MGInLCAnUTE2MjE0OTgnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI0OjQxJywgJzIwMjUtMDMtMjYgMjA6NDE6MjEnLCAnJywgMiwgJycsICdhNmU3Zjk2My01Mjg4LTQyM2EtYjlmYi02ZTkyYjlmYmEyNDEnKSwNCig1NywgJ01hbHRhaMO2aGUnLCAtMjQuODMzMzMwMDAsIDE2Ljk4MzMzMDAwLCAnODBjYTk1ZTUtY2M5Yi00MDZkLTg0YjQtYWFmZGUwMDE4NWNhJywgJ1E2NjYwNzknLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjI0OjM0JywgJzIwMjUtMDMtMjYgMjA6NDE6MjEnLCAnJywgMywgJycsICdhNmU3Zjk2My01Mjg4LTQyM2EtYjlmYi02ZTkyYjlmYmEyNDEnKSwNCig1OCwgJ01hcmllbnRhbCcsIC0yNC42MzMzMzAwMCwgMTcuOTY2NjcwMDAsICc1OTNkMjA3MS0wYThkLTQxMzUtODc2Zi1hYzU3MTA4YWRkNTYnLCAnUTg3NjE2NicsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMDY6MjQ6MjMnLCAnMjAyNS0wMy0yNiAyMDo0MToyMScsICcnLCAyLCAnJywgJ2E2ZTdmOTYzLTUyODgtNDIzYS1iOWZiLTZlOTJiOWZiYTI0MScpLA0KKDU5LCAnUmVob2JvdGgnLCAtMjMuMzE3MDAwMDAsIDE3LjA5MDAwMDAwLCAnZWYwMjY5NjYtZTI1YS00MjM3LWE1ZmMtZmRjZDNiMWU4MDU1JywgJ1E3MDAwNTAnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDA2OjIxOjA2JywgJzIwMjUtMDMtMjYgMjA6NDE6MjEnLCAnJywgNCwgJycsICdhNmU3Zjk2My01Mjg4LTQyM2EtYjlmYi02ZTkyYjlmYmEyNDEnKSwNCigxNjMsICdKb2hhbm5lc2J1cmcnLCAtMjYuMjAyMjcwMDAsIDI4LjA0MzYzMDAwLCAnNDg4MmRlYTAtNWZmNy00ZTdiLWEwZTgtOTBkNWJhYWI1YzA0JywgJ1EzNDY0NycsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjcgMjA6MDQ6MjknLCAnJywgMSwgJycsICc5ZmRjZTg3NS0wNmVkLTQ0OTgtOTY0ZS0wZjcyMzYzMWZlMWYnKSwNCigxNjQsICdCZXRoYW5pZScsIC0yNi40ODMzMzAwMCwgMTcuMTUwMDAwMDAsICc2MzkyN2ExZi01MzFmLTRhMTgtOTAxMy00OGZjODkyYWMwN2UnLCAnUTI1MTY3NycsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NDI6MzcnLCAnJywgMSwgJycsICdjYzA3YzU1Yi1mZmU0LTQzYjMtOTdiNy0yM2I1NzQ2YzA5ZjknKSwNCigxNjUsICdLYXJhc2J1cmcnLCAtMjguMDE2NjcwMDAsIDE4Ljc1MDAwMDAwLCAnMjVkNjdhZDgtZjMzYy00NGUyLWFiMTEtN2FkMDZiNmM2N2E1JywgJ1ExMDAzMzI4JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo0MjozNycsICcnLCAxLCAnJywgJ2NjMDdjNTViLWZmZTQtNDNiMy05N2I3LTIzYjU3NDZjMDlmOScpLA0KKDE2NiwgJ0tlZXRtYW5zaG9vcCcsIC0yNi41ODMzMzAwMCwgMTguMTMzMzMwMDAsICc4MmYzZmM2ZC0wZmE1LTRkMWEtOWEwNi0xNTZhZDMwOGY5MzAnLCAnUTE2MDg4NCcsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NDI6MzcnLCAnJywgMSwgJycsICdjYzA3YzU1Yi1mZmU0LTQzYjMtOTdiNy0yM2I1NzQ2YzA5ZjknKSwNCigxNjcsICdMw7xkZXJpdHonLCAtMjYuNjQ4MDcwMDAsIDE1LjE1MzgzMDAwLCAnZDg5NGUyM2YtZGEyNi00ZWQxLWE0ZjEtNTIzNGEwODRjNWZkJywgJ1ExNTkzMjUnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjQyOjM3JywgJycsIDEsICcnLCAnY2MwN2M1NWItZmZlNC00M2IzLTk3YjctMjNiNTc0NmMwOWY5JyksDQooMTY4LCAnT3JhbmplbXVuZCcsIC0yOC41NTAwMDAwMCwgMTYuNDMzMzMwMDAsICdmYzkzMDllYi1iYTFhLTQyNTItOThjMC00MTM2YWJlYzgyMWInLCAnUTE0MDQ1MTgnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjQyOjM3JywgJycsIDEsICcnLCAnY2MwN2M1NWItZmZlNC00M2IzLTk3YjctMjNiNTc0NmMwOWY5JyksDQooMTY5LCAnVHNlcycsIC0yNS44ODMzMzAwMCwgMTguMDAwMDAwMDAsICczNDkxNzk0MS04YmJmLTQwMzYtYmEzNy1kOWEwMTNmMmE2MTUnLCAnUTE1Mjk0NDQnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjQyOjM3JywgJycsIDEsICcnLCAnY2MwN2M1NWItZmZlNC00M2IzLTk3YjctMjNiNTc0NmMwOWY5JyksDQooMTcwLCAnV2FybWJhZCcsIC0yOC40NTAwMDAwMCwgMTguNzMzMzMwMDAsICdmOTU0OTZjYy02ZTY2LTQzYzQtYTY4OS00OWU0ZWU3YmEzNGYnLCAnUTQ3OTMxMicsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NDI6MzcnLCAnJywgMSwgJycsICdjYzA3YzU1Yi1mZmU0LTQzYjMtOTdiNy0yM2I1NzQ2YzA5ZjknKSwNCigxNzEsICdSdW5kdScsIC0xNy45MzMzMzAwMCwgMTkuNzY2NjcwMDAsICc5YTU0NDU1Ny1lOWQ1LTRiYjktODViYi1kY2ZiMTA2Zjc1YzEnLCAnUTY2MjI5MScsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDg6NDU6MTInLCAnJywgMSwgJycsICdkNTNjZjQxNy04NGJjLTRhNzItOGFjYi0yODM2N2Y0MWJmYmInKSwNCigxNzIsICdDYXBlIFRvd24nLCAtMzMuOTI1ODQwMDAsIDE4LjQyMzIyMDAwLCAnNjYxYWNkYWQtOTRkNC00YjVhLWIxNWYtNWI2ZTdhMTU3OWIxJywgJ1E1NDY1JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo0NjozOCcsICcnLCAxLCAnJywgJ2EyMDE1ZGVkLTBmZWQtNDA2NC04ZTYzLTgzYTQ5NWUxYTA5YicpLA0KKDE3MywgJ0VwdXBhIENvbnN0aXR1ZW5jeScsIC0xNy4wMDM4ODAwMCwgMTMuMjQ4MjUwMDAsICdiMTU2M2Q2Ny1jYzQzLTQzMGMtYjFjNC1mM2MzOGQ3YzE3ZmInLCAnUTEwMjY1MTEnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjUwOjQwJywgJycsIDEsICcnLCAnYTU1ZjhkNWEtZjQxZi00YjBkLWI2YTQtNjk3MjY0NzdmYzUyJyksDQooMTc0LCAnS2hvcml4YXMnLCAtMjAuMzY2NjcwMDAsIDE0Ljk2NjY3MDAwLCAnZDZhMzgxMTUtNzc3Yi00YTM0LTljMWMtMDJiOGNiNTc1NjE1JywgJ1ExNzQwNjgxJywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo1MDo0MCcsICcnLCAxLCAnJywgJ2E1NWY4ZDVhLWY0MWYtNGIwZC1iNmE0LTY5NzI2NDc3ZmM1MicpLA0KKDE3NSwgJ0tob3JpeGFzIENvbnN0aXR1ZW5jeScsIC0yMC4zNjc5MjAwMCwgMTQuOTU5OTYwMDAsICc5NWRhNzMxZS0wNTZjLTRhMGMtOGU4My0yN2Y0Y2U1YWY2MWUnLCAnUTQxMjIzNDAnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjUwOjQwJywgJycsIDEsICcnLCAnYTU1ZjhkNWEtZjQxZi00YjBkLWI2YTQtNjk3MjY0NzdmYzUyJyksDQooMTc2LCAnT3B1d28nLCAtMTguMDYwNjgwMDAsIDEzLjgzOTk4MDAwLCAnZWZiMTg5ZjQtZWMxYS00YzM3LTg3YWItZWY4N2U4ZWIxY2Y0JywgJ1ExMDI0MDg5JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo1MDo0MCcsICcnLCAxLCAnJywgJ2E1NWY4ZDVhLWY0MWYtNGIwZC1iNmE0LTY5NzI2NDc3ZmM1MicpLA0KKDE3NywgJ09wdXdvIENvbnN0aXR1ZW5jeScsIC0yMC4xMTY2NzAwMCwgMTYuMTUwMDAwMDAsICc4ZDdjMzYxZi1lNmZhLTRiMGMtYjA2MS0wMzUxNjA0ZmYxM2EnLCAnUTE3MDQzNDYnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjUxOjU2JywgJycsIDEsICcnLCAnYTU1ZjhkNWEtZjQxZi00YjBkLWI2YTQtNjk3MjY0NzdmYzUyJyksDQooMTc4LCAnU2VzZm9udGVpbiBDb25zdGl0dWVuY3knLCAtMTkuNTYxMDYwMDAsIDEzLjc2NTMwMDAwLCAnNTQ1OGQ2MTUtZjY3NC00NzE0LTlmMGItMWU3YTM3YmMzZWExJywgJ1EzNzExNzA4JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwODo1MTo1NicsICcnLCAxLCAnJywgJ2E1NWY4ZDVhLWY0MWYtNGIwZC1iNmE0LTY5NzI2NDc3ZmM1MicpLA0KKDE3OSwgJ09oYW5nd2VuYScsIC0xNy40MDAwMDAwMCwgMTUuODgzMzMwMDAsICdmNTUyN2Q1OC01ZjIzLTQxY2YtOWZlMC00ZWY5YjkxYmNlY2YnLCAnUTIwMzMzMTknLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjU1OjA4JywgJycsIDEsICcnLCAnM2VlNWIxMGUtNjBkNC00ZWIwLWE1ZWEtYWU5OGRiNDViZWJlJyksDQooMTgwLCAnR29iYWJpcycsIC0yMi40NTAwMDAwMCwgMTguOTY2NjcwMDAsICcwMGM1MDAwYS0zNzQyLTQ1MGMtYTUyYi05YmEzODkxM2U5NDUnLCAnUTEwMDA2MDknLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA4OjU5OjMzJywgJycsIDEsICcnLCAnYWI4ODg0MmYtMGU2Ni00N2NkLTk3MTItNmQ1YWFkM2IxNzliJyksDQooMTgxLCAnT25nYW5kamVyYScsIC0xNy44ODMzMzAwMCwgMTUuMDY2NjcwMDAsICcyZjEzNjgzYS05ODYzLTQ4M2MtYmE4OC0xNzBkNWE3OGI5ZDgnLCAnUTMzNTI3MjEnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA5OjAxOjU4JywgJycsIDEsICcnLCAnZGQwMTVmZTctNTBiOS00YTFlLWJlNjYtMmU1ZGViNmVhMDVlJyksDQooMTgyLCAnT3V0YXBpJywgLTE3LjUwMDAwMDAwLCAxNC45ODMzMzAwMCwgJ2NkMjJlMWU5LWViNmYtNDJlMS05MGQ2LWVhOGFhMDdlMjc1MycsICdRMTc1ODIxNScsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDk6MDE6NTgnLCAnJywgMSwgJycsICdkZDAxNWZlNy01MGI5LTRhMWUtYmU2Ni0yZTVkZWI2ZWEwNWUnKSwNCigxODMsICdPbmRhbmd3YScsIC0xNy45MTY2NzAwMCwgMTUuOTUwMDAwMDAsICc1ODljYmNiYy05ZGM1LTQ4ODAtOTY4ZC1jMzgwZmQ0MzE2ZWYnLCAnUTIwMjM3NzMnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA5OjA1OjUzJywgJycsIDEsICcnLCAnNmYxMTRkMTMtY2U3Zi00NzUxLTgwMjktZmY3NzIzYTkzMmEyJyksDQooMTg0LCAnT25nd2VkaXZhJywgLTE3Ljc4MzMzMDAwLCAxNS43NjY2NzAwMCwgJzZhZTRmMzUxLTU1ZTItNGU2OS1hMzFlLTI5ZTc2YWM3ZjdjNScsICdRODQxNTU3JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwOTowNTo1MycsICcnLCAxLCAnJywgJzZmMTE0ZDEzLWNlN2YtNDc1MS04MDI5LWZmNzcyM2E5MzJhMicpLA0KKDE4NSwgJ09zaGFrYXRpJywgLTE3Ljc4ODMzMDAwLCAxNS43MDQzNjAwMCwgJzVlYmUyMGI1LTI0NjgtNGVmOS1hYjgyLTM3ZTU1NGQzOWQ1ZicsICdROTg1NjIyJywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwOTowNTo1MycsICcnLCAxLCAnJywgJzZmMTE0ZDEzLWNlN2YtNDc1MS04MDI5LWZmNzcyM2E5MzJhMicpLA0KKDE4NiwgJ09tdXRoaXlhJywgLTE4LjM2NDYzMDAwLCAxNi41ODE0NjAwMCwgJ2Q4ODhiNGQyLWFmODYtNGUzNC04YmVlLTQ1NTRlMGIxOTIxMycsICdRMTAwNTU4NCcsICcnLCAnJywgJycsICcnLCAxLCAnJywgJzIwMjUtMDMtMjggMDk6MDk6MjMnLCAnJywgMSwgJycsICdiMDY1MGE2ZC01NmQ4LTQ3NjUtYjU2Ni1mNmI5MzI1NWY3ZjQnKSwNCigxODcsICdUc3VtZWInLCAtMTkuMjMzMzMwMDAsIDE3LjcxNjY3MDAwLCAnOTZiNTE1MDctMWI2Ni00YjVjLWFiMzctOTA5MTU5ZDUzMjYxJywgJ1E2Mzk0NjcnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA5OjA5OjIzJywgJycsIDEsICcnLCAnYjA2NTBhNmQtNTZkOC00NzY1LWI1NjYtZjZiOTMyNTVmN2Y0JyksDQooMTg4LCAnQmFnYW5pJywgLTE4LjExMDY1MDAwLCAyMS42MTY0NTAwMCwgJ2IyODE5OWI4LWMxZDktNDdjNS04MzZhLWZhYjI4MjNhNzI2YicsICdRNzk5ODMwJywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwOToxMzozMScsICcnLCAxLCAnJywgJ2VkYzNhZGQ2LTE5NzctNDQzZS1hZjQwLTM2ZjcwMGFkMzFjMCcpLA0KKDE4OSwgJ0thdGltYSBNdWxpbG8nLCAtMTcuNTAwMDAwMDAsIDI0LjI2NjY3MDAwLCAnYWE3MjAzMDQtYjg5Yi00MTcwLTg1MzktMGY0NzZkNzcwMjg0JywgJ1E4NjQxMDAnLCAnJywgJycsICcnLCAnJywgMSwgJycsICcyMDI1LTAzLTI4IDA5OjEzOjMxJywgJycsIDEsICcnLCAnZWRjM2FkZDYtMTk3Ny00NDNlLWFmNDAtMzZmNzAwYWQzMWMwJyk7', 'Cities', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-24 10:21:08', '2025-07-24 08:29:14', 31, 0, 1, 251), +(298, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 1, '', '', '{}', '', '75061367-79c2-4d5b-a75d-eca6d33507df', '', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Timezones', 'Timezone', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', '', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'Timezones.', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV90aW1lem9uZWANCi0tDQoNCklOU0VSVCBJTlRPIGAjX19bW1tjb21wb25lbnRdXV1fdGltZXpvbmVgIChgaWRgLCBgdGltZXpvbmVfbmFtZWAsIGB0aW1lem9uZV9pZGVudGlmaWVyYCwgYGdtdF9vZmZzZXRfbmFtZWAsIGBndWlkYCwgYGdtdF9vZmZzZXRfc2VjYCwgYGFiYnJldmlhdGlvbmAsIGBtZXRha2V5YCwgYG1ldGFkZXNjYCwgYG1ldGFkYXRhYCwgYG9yZGVyaW5nYCwgYHB1Ymxpc2hlZGAsIGBtb2RpZmllZGAsIGBjcmVhdGVkYCwgYGhpdHNgLCBgdmVyc2lvbmAsIGBwYXJhbXNgLCBgY291bnRyeWApIFZBTFVFUw0KKDEsICdTb3V0aCBBZnJpY2FuIFN0YW5kYXJkIFRpbWUnLCAnQWZyaWNhL0pvaGFubmVzYnVyZycsICdVVEMrMDI6MDAnLCAnZGViN2Q5MzgtYTM4NS00NTRkLWI2YzctZmE1OWQyM2Y5NzZiJywgNzIwMCwgJ1NBU1QnLCAnJywgJycsICd7XCJyb2JvdHNcIjpcIlwiLFwiYXV0aG9yXCI6XCJcIixcInJpZ2h0c1wiOlwiXCJ9JywgJycsIDEsICcyMDI1LTAzLTI3IDEzOjQ5OjExJywgJzIwMjUtMDMtMjYgMTQ6NTg6NTQnLCAnJywgMiwgJycsICcyZmNhOWU3OS1jOGM5LTQ1N2YtYTJhMi05M2JlNzkyMDdlZGUnKSwNCigyLCAnV2VzdCBBZnJpY2EgU3VtbWVyIFRpbWUnLCAnQWZyaWNhL1dpbmRob2VrJywgJ1VUQyswMjowMCcsICczNWJiYzkyZi01MTYxLTRkMTMtYTIwZi01ODRjMjMxMTZiMTInLCA3MjAwLCAnV0FTVCcsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAnJywgMSwgJzIwMjUtMDMtMjcgMTM6NDk6MDInLCAnMjAyNS0wMy0yNiAxNTozMzozOCcsICcnLCAyLCAnJywgJzYyYjUwMzkyLTU0ZTItNDQ5MC1hZDk0LThkZTA3NzM1YTU4NCcpOw==', 'Timezone', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"da82cdf5-15f0-45b2-b5e7-0678780a50f0\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-24 10:48:37', '2025-07-24 08:29:40', 25, 0, 1, 52), +(299, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{\"addtabs0\":{\"name\":\"Details\"},\"addtabs1\":{\"name\":\"States\"}}', '{}', '', 1, '', '', '{}', '', '6acc4069-1c33-4470-85a6-07bc9bb16d10', 'images/vdm/icon/country.png#joomlaImage://local-images/vdm/icon/country.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Countries', 'Country', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'A list of countries.', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5YA0KLS0NCg0KSU5TRVJUIElOVE8gYCNfX1tbW2NvbXBvbmVudF1dXV9jb3VudHJ5YCAoYGlkYCwgYG5hbWVgLCBgc3VicmVnaW9uYCwgYGNhcGl0YWxgLCBgbG9uZ2l0dWRlYCwgYGxhdGl0dWRlYCwgYGVtb2ppdWAsIGBlbW9qaWAsIGB0bGRgLCBgbmF0aW9uYWxpdHlgLCBgbmF0aXZlYCwgYG51bWVyaWNfY29kZWAsIGBwaG9uZWNvZGVgLCBgd2lraWRhdGFpZGAsIGBtZXRha2V5YCwgYG1ldGFkZXNjYCwgYG1ldGFkYXRhYCwgYG9yZGVyaW5nYCwgYHB1Ymxpc2hlZGAsIGBtb2RpZmllZGAsIGBjcmVhdGVkYCwgYGhpdHNgLCBgdmVyc2lvbmAsIGBwYXJhbXNgLCBgY3VycmVuY3lfbmFtZWAsIGBjb2RldGhyZWVgLCBgc3ltYm9sYCwgYGd1aWRgLCBgaXNvMmAsIGBpc28zYCkgVkFMVUVTDQooMSwgJ05hbWliaWEnLCAnYzFjY2U5MzAtNTJhYS00OGZjLWI1ZDQtZmQ1Yzk3MjlhNzM1JywgJ2JiYjBkNTY0LWNlMDYtNDRkMy04YTFmLWQ1ZTU3ZjU2YjExMycsIDE3LjAwMDAwMDAwLCAtMjIuMDAwMDAwMDAsICdVKzFGMUYzIFUrMUYxRTYnLCAn8J+Hs/Cfh6YnLCAnLm5hJywgJ05hbWliaWFuJywgJ05hbWliaWEnLCA1MTYsIDI2NCwgJ1ExMDMwJywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDEsIDEsICcyMDI1LTAzLTI4IDA4OjU1OjExJywgJzIwMjUtMDMtMjUgMTY6MTA6NDMnLCAnJywgMjYsICcnLCAnTmFtaWJpYW4gRG9sbGFyJywgJ05BRCcsICckJywgJzYyYjUwMzkyLTU0ZTItNDQ5MC1hZDk0LThkZTA3NzM1YTU4NCcsICdOQScsICdOQU0nKSwNCigyLCAnU291dGggQWZyaWNhJywgJ2MxY2NlOTMwLTUyYWEtNDhmYy1iNWQ0LWZkNWM5NzI5YTczNScsICc0ODgyZGVhMC01ZmY3LTRlN2ItYTBlOC05MGQ1YmFhYjVjMDQnLCAyNC4wMDAwMDAwMCwgLTI5LjAwMDAwMDAwLCAnVSsxRjFGRiBVKzFGMUU2JywgJ/Cfh7/wn4emJywgJy56YScsICdTb3V0aCBBZnJpY2FuJywgJ1NvdXRoIEFmcmljYScsIDcxMCwgMjcsICdRMjU4JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDIsIDEsICcyMDI1LTAzLTI4IDA4OjQ2OjU4JywgJzIwMjUtMDMtMjYgMTQ6NTg6NTQnLCAnJywgNywgJycsICdTb3V0aCBBZnJpY2FuIHJhbmQnLCAnWkFSJywgJ1InLCAnMmZjYTllNzktYzhjOS00NTdmLWEyYTItOTNiZTc5MjA3ZWRlJywgJ1pBJywgJ1pBRicpOw==', 'Country', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"335866ce-b81b-4329-901d-c20254135c9c\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-24 12:36:05', '2025-07-24 08:28:24', 45, 0, 1, 36), +(301, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 0, '', '', '{}', '', '9eefa86b-6294-4512-8d62-979abf16c00d', 'images/vdm/icon/region.png#joomlaImage://local-images/vdm/icon/region.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Regions', 'Region', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'Regions', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9yZWdpb25gDQotLQ0KDQpJTlNFUlQgSU5UTyBgI19fW1tbY29tcG9uZW50XV1dX3JlZ2lvbmAgKGBpZGAsIGBuYW1lYCwgYHdpa2lkYXRhaWRgLCBgbWV0YWtleWAsIGBtZXRhZGVzY2AsIGBtZXRhZGF0YWAsIGBvcmRlcmluZ2AsIGBwdWJsaXNoZWRgLCBgbW9kaWZpZWRgLCBgY3JlYXRlZGAsIGBoaXRzYCwgYHZlcnNpb25gLCBgcGFyYW1zYCwgYGd1aWRgKSBWQUxVRVMNCigxLCAnQWZyaWNhJywgJ1ExNScsICcnLCAnJywgJ3tcInJvYm90c1wiOlwiXCIsXCJhdXRob3JcIjpcIlwiLFwicmlnaHRzXCI6XCJcIn0nLCAxLCAxLCAnMjAyNS0wMy0yNiAxMzoxMDozMicsICcyMDI1LTAzLTI1IDE1OjM4OjEzJywgJycsIDUsICcnLCAnMmU0ODczNGItOTk3OC00ZmUxLWFlOTAtYjc1ZTNkZTkwNTNkJyksDQooMiwgJ0FzaWEnLCAnUTQ4JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDIsIDEsICcyMDI1LTAzLTI4IDA5OjQ3OjUzJywgJzIwMjUtMDMtMjYgMTM6MjI6MTknLCAnJywgMiwgJycsICdmZWE4NTAzNi04ODIyLTRkOTYtYjhjNy01YmY0NTExNGM0MGEnKTs=', 'Regions', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-25 09:11:11', '2025-07-24 08:27:30', 22, 0, 1, 252), +(302, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, '{}', '{\"addpermissions0\":{\"action\":\"view.edit\",\"implementation\":3},\"addpermissions1\":{\"action\":\"view.edit.own\",\"implementation\":3},\"addpermissions2\":{\"action\":\"view.edit.state\",\"implementation\":3},\"addpermissions3\":{\"action\":\"view.edit.access\",\"implementation\":3},\"addpermissions4\":{\"action\":\"view.edit.created_by\",\"implementation\":3},\"addpermissions5\":{\"action\":\"view.edit.created\",\"implementation\":3},\"addpermissions6\":{\"action\":\"view.create\",\"implementation\":3},\"addpermissions7\":{\"action\":\"view.delete\",\"implementation\":3},\"addpermissions8\":{\"action\":\"view.access\",\"implementation\":3}}', '{}', '{}', '{}', '', 0, '', '', '{}', '', '2e451812-45af-4015-aa0c-f5912702c9af', 'images/vdm/icon/subregion.png#joomlaImage://local-images/vdm/icon/subregion.png?width=128&height=128', '', '', '', '', '', '', 'utf8mb4', 'utf8mb4_unicode_ci', 'InnoDB', 'DYNAMIC', 'Subregions', 'Subregion', '', '', '', '', '', '', '', '', '', '', '', 'W0NVU1RPTUNPREU9c2F2ZUdVSURQb3dlcl0=', 'W0NVU1RPTUNPREU9Zm9ybUNvbnRyb2xsZXJFZGl0XQ==', '', '', 'W0NVU1RPTUNPREU9c2V0R1VJREZvcm1Qb3dlcl0=', '', '', '', '', '', '', '', '', 'Subregions', 2, 'LS0NCi0tIER1bXBpbmcgZGF0YSBmb3IgdGFibGUgYCNfX1tbW2NvbXBvbmVudF1dXV9zdWJyZWdpb25gDQotLQ0KDQpJTlNFUlQgSU5UTyBgI19fW1tbY29tcG9uZW50XV1dX3N1YnJlZ2lvbmAgKGBpZGAsIGBuYW1lYCwgYHJlZ2lvbmAsIGB3aWtpZGF0YWlkYCwgYG1ldGFrZXlgLCBgbWV0YWRlc2NgLCBgbWV0YWRhdGFgLCBgb3JkZXJpbmdgLCBgcHVibGlzaGVkYCwgYG1vZGlmaWVkYCwgYGNyZWF0ZWRgLCBgaGl0c2AsIGB2ZXJzaW9uYCwgYHBhcmFtc2AsIGBndWlkYCkgVkFMVUVTDQooMSwgJ1NvdXRoZXJuIEFmcmljYScsICcyZTQ4NzM0Yi05OTc4LTRmZTEtYWU5MC1iNzVlM2RlOTA1M2QnLCAnUTI3Mzk0JywgJycsICcnLCAne1wicm9ib3RzXCI6XCJcIixcImF1dGhvclwiOlwiXCIsXCJyaWdodHNcIjpcIlwifScsIDEsIDEsICcyMDI1LTAzLTI3IDE0OjEyOjU5JywgJzIwMjUtMDMtMjUgMTU6NDA6MTMnLCAnJywgMjUsICcnLCAnYzFjY2U5MzAtNTJhYS00OGZjLWI1ZDQtZmQ1Yzk3MjlhNzM1JyksDQooMiwgJ0NlbnRyYWwgQXNpYScsICdmZWE4NTAzNi04ODIyLTRkOTYtYjhjNy01YmY0NTExNGM0MGEnLCAnUTI3Mjc1JywgJycsICcnLCAnJywgJycsIDEsICcnLCAnMjAyNS0wMy0yOCAwOTo0Nzo1MycsICcnLCAxLCAnJywgJzJjY2NiMDc4LWEyM2ItNDViMi1iZmE1LWFlZjRlZmU5NWVjNCcpOw==', 'Sub-Regions', 1, '{\"privacy\":{\"activate\":\"0\",\"permissions\":\"1\",\"anonymize\":\"0\",\"anonymize_fields\":[],\"user_link\":\"1\",\"custom_link\":\"$query->where($db->quoteName(\'created_by\') . \' = \' . $db->quote($user->id));\",\"other_user_field\":\"2c74c3f5-2bfc-4916-b105-4f5d5e2bea25\"},\"fieldordering\":{\"add_admin_ordering\":\"0\",\"admin_ordering_fields\":{\"admin_ordering_fields0\":{\"field\":\"\",\"direction\":\"asc\"}},\"add_linked_ordering\":\"0\",\"linked_ordering_fields\":{\"linked_ordering_fields0\":{\"field\":\"0\",\"direction\":\"asc\"}}},\"admin_view_headers\":{\"add_admin_view_model\":\"0\",\"admin_view_model\":\"\",\"power_admin_view_model\":[],\"add_admin_view_html\":\"0\",\"admin_view_html\":\"\",\"power_admin_view_html\":[],\"add_admin_view\":\"0\",\"admin_view\":\"\",\"power_admin_view\":[],\"add_admin_view_controller\":\"0\",\"admin_view_controller\":\"\",\"power_admin_view_controller\":[],\"add_admin_views_model\":\"0\",\"admin_views_model\":\"\",\"power_admin_views_model\":[],\"add_admin_views_html\":\"0\",\"admin_views_html\":\"\",\"power_admin_views_html\":[],\"add_admin_views\":\"0\",\"admin_views\":\"\",\"power_admin_views\":[],\"add_admin_views_controller\":\"0\",\"admin_views_controller\":\"\",\"power_admin_views_controller\":[],\"add_site_admin_view_model\":\"0\",\"site_admin_view_model\":\"\",\"power_site_admin_view_model\":[],\"add_site_admin_view_html\":\"0\",\"site_admin_view_html\":\"\",\"power_site_admin_view_html\":[],\"add_site_admin_view\":\"0\",\"site_admin_view\":\"\",\"power_site_admin_view\":[],\"add_import_custom_controller\":\"0\",\"import_custom_controller\":\"\",\"power_import_custom_controller\":[],\"add_import_custom_model\":\"0\",\"import_custom_model\":\"\",\"power_import_custom_model\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, '2025-03-25 13:19:47', '2025-07-24 08:28:04', 26, 0, 1, 253); -- -- Dumping data for table `#__componentbuilder_custom_admin_view` @@ -2335,7 +2338,7 @@ INSERT INTO `#__componentbuilder_dynamic_get` (`id`, `add_php_after_getitem`, `a (36, 0, 0, 1, 0, 0, '', '', '', '', 'CQkvLyBkbyBhIHF1aWNrIGJ1aWxkIG9mIGFsbCBlZGl0IGxpbmtzIGxpbmtzDQoJCWlmIChpc3NldCgkaXRlbXMpICYmICRpdGVtcykNCgkJew0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRuciA9PiAmJGl0ZW0pDQoJCQl7DQoJCQkJJGNhbkRvID0gW1tbQ29tcG9uZW50XV1dSGVscGVyOjpnZXRBY3Rpb25zKCdsb29rJywkaXRlbSwnbG9va3MnKTsNCgkJCQlpZiAoJGNhbkRvLT5nZXQoJ2xvb2suZWRpdCcpKQ0KCQkJCXsNCgkJCQkJJGl0ZW0tPmVkaXRMaW5rID0gJzxiciAvPjxiciAvPjxhIGNsYXNzPSJ1ay1idXR0b24gdWstYnV0dG9uLXByaW1hcnkgdWstd2lkdGgtMS0xIiBocmVmPSInOw0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgLj0gSm9vbWxhX19fZDRjNzYwOTlfNGMzMl80MDhhXzg3MDFfZDBhNzI0NDg0ZGZkX19fUG93ZXI6Ol8oJ2luZGV4LnBocD9vcHRpb249Y29tX1tbW2NvbXBvbmVudF1dXSZ2aWV3PWxvb2smdGFzaz1sb29rLmVkaXQmaWQ9JyAuICRpdGVtLT5pZCk7DQoJCQkJCSRpdGVtLT5lZGl0TGluayAuPSAnIj48aSBjbGFzcz0idWstaWNvbi1wZW5jaWwiPjwvaT48c3BhbiBjbGFzcz0idWstaGlkZGVuLXNtYWxsIj4nOw0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgLj0gVGV4dDo6XygnRWRpdCBMb29rJyk7DQoJCQkJCSRpdGVtLT5lZGl0TGluayAuPSAnPC9zcGFuPjwvYT4nOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkaXRlbS0+ZWRpdExpbmsgPSAnJzsNCgkJCQl9DQoJCQl9DQoJCX0=', 1, 0, '', '', '{}', '', 2, '{}', '{}', '{}', 1, 'Looks', '{\"order0\":{\"table_key\":\"a.name\",\"direction\":\"ASC\"}}', '', '', 'a.*', 'c1053952-8a84-4398-aef1-41726f7c0043', '{\"where0\":{\"table_key\":\"a.published\",\"operator\":1,\"value_key\":\"1\"}}', '', '{}', '{\"dynamic_get_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_custom_admin_view_model\":\"0\",\"custom_admin_view_model\":\"\",\"power_custom_admin_view_model\":[],\"add_custom_admin_view_html\":\"0\",\"custom_admin_view_html\":\"\",\"power_custom_admin_view_html\":[],\"add_custom_admin_view\":\"0\",\"custom_admin_view\":\"\",\"power_custom_admin_view\":[],\"add_custom_admin_view_controller\":\"0\",\"custom_admin_view_controller\":\"\",\"power_custom_admin_view_controller\":[],\"add_custom_admin_views_model\":\"0\",\"custom_admin_views_model\":\"\",\"power_custom_admin_views_model\":[],\"add_custom_admin_views_html\":\"0\",\"custom_admin_views_html\":\"\",\"power_custom_admin_views_html\":[],\"add_custom_admin_views\":\"0\",\"custom_admin_views\":\"\",\"power_custom_admin_views\":[],\"add_custom_admin_views_controller\":\"0\",\"custom_admin_views_controller\":\"\",\"power_custom_admin_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, 14, 0, 13, '32b3ae7d-8aa8-47f1-ab2e-30076ddaa029'), (39, 0, 0, 0, 0, 0, '', '', '', '', '', 1, 0, '', '', '{\"filter0\":{\"filter_type\":1,\"state_key\":\"id\",\"operator\":1,\"table_key\":\"a.id\"}}', '', 1, '{}', '{}', '{\"join_view_table0\":{\"view_table\":\"595ba2c9-21fa-43a4-9af7-93c9cfb21b82\",\"row_type\":2,\"as\":\"d\",\"type\":1,\"on_field\":\"a.guid\",\"operator\":1,\"join_field\":\"d.entity\",\"selection\":\"d.email AS email\\r\\nd.mobile_phone AS mobile_phone\\r\\nd.dateofbirth AS dateofbirth\\r\\nd.website AS website\"}}', 1, 'Looking', '{}', '', '', 'a.*', 'c1053952-8a84-4398-aef1-41726f7c0043', '{}', '', '{}', '{\"dynamic_get_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_custom_admin_view_model\":\"0\",\"custom_admin_view_model\":\"\",\"power_custom_admin_view_model\":[],\"add_custom_admin_view_html\":\"0\",\"custom_admin_view_html\":\"\",\"power_custom_admin_view_html\":[],\"add_custom_admin_view\":\"0\",\"custom_admin_view\":\"\",\"power_custom_admin_view\":[],\"add_custom_admin_view_controller\":\"0\",\"custom_admin_view_controller\":\"\",\"power_custom_admin_view_controller\":[],\"add_custom_admin_views_model\":\"0\",\"custom_admin_views_model\":\"\",\"power_custom_admin_views_model\":[],\"add_custom_admin_views_html\":\"0\",\"custom_admin_views_html\":\"\",\"power_custom_admin_views_html\":[],\"add_custom_admin_views\":\"0\",\"custom_admin_views\":\"\",\"power_custom_admin_views\":[],\"add_custom_admin_views_controller\":\"0\",\"custom_admin_views_controller\":\"\",\"power_custom_admin_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, 17, 0, 0, '98e6ea56-0911-4d89-b1f4-8f0bb1e4aa5a'), (139, 0, 0, 0, 0, 0, '', '', '', '', '', 1, 0, NULL, '', '{}', '', 1, '{}', '{}', '{}', 3, 'Item Importer', '{}', '', 'CQkJCSRndWlkID0gU3VwZXJfX180N2E2MzcyOF9jZDVkXzRkNTNfOTljZl8yNDA5YmQxYzc0NGNfX19Qb3dlcjo6Z2V0KCdbW1tjb21wb25lbnRdXV1faW1wb3J0ZXJfZ3VpZCcsIFN1cGVyX19fOWM1MTNiYWZfYjI3OV80M2ZkX2FlMjlfYTU4NWM4Y2JjNGYwX19fUG93ZXI6OmdldCgpKTsNCgkJCQkkZmlsZV90eXBlID0gU3VwZXJfX185ZDc2YjhkY18zODgzXzQ3NTVfYjExY18xMzFkMTljYThhNTNfX19Qb3dlcjo6XygnTG9hZCcpLT52YWx1ZShbJ2EuZ3VpZCcgPT4gJ2d1aWQnXSwgWydhJyA9PiAnZmlsZV90eXBlJ10sIFsndGFyZ2V0JyA9PiBbJ3ZhbHVlJyA9PiAnJSJbW1tzdmlld11dXSIlJywgJ29wZXJhdG9yJyA9PiAnTElLRSddXSk7DQoNCgkJCQkkZGF0YSA9IChvYmplY3QpIFsNCgkJCQkJJ2d1aWQnID0+ICRndWlkLA0KCQkJCQknZmlsZV90eXBlJyA9PiAkZmlsZV90eXBlDQoJCQkJXTs=', NULL, '', '{}', NULL, '{}', '{\"dynamic_get_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_custom_admin_view_model\":\"0\",\"custom_admin_view_model\":\"\",\"power_custom_admin_view_model\":[],\"add_custom_admin_view_html\":\"0\",\"custom_admin_view_html\":\"\",\"power_custom_admin_view_html\":[],\"add_custom_admin_view\":\"0\",\"custom_admin_view\":\"\",\"power_custom_admin_view\":[],\"add_custom_admin_view_controller\":\"0\",\"custom_admin_view_controller\":\"\",\"power_custom_admin_view_controller\":[],\"add_custom_admin_views_model\":\"0\",\"custom_admin_views_model\":\"\",\"power_custom_admin_views_model\":[],\"add_custom_admin_views_html\":\"0\",\"custom_admin_views_html\":\"\",\"power_custom_admin_views_html\":[],\"add_custom_admin_views\":\"0\",\"custom_admin_views\":\"\",\"power_custom_admin_views\":[],\"add_custom_admin_views_controller\":\"0\",\"custom_admin_views_controller\":\"\",\"power_custom_admin_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, 3, 0, 58, 'ebfab0ae-d368-4d2a-807b-c9d2d0809a60'), -(140, 0, 0, 0, 0, 0, '', '', '', '', '', 1, 0, NULL, '', '{}', 'getMessages', 3, '{}', '{}', '{}', 1, 'ImportLogMessages', '{}', '', '', 'a.message AS message\r\na.message_status AS message_status', 'ab2bbdfc-c0a0-4ffc-9556-67d5af8bec64', '{\"where0\":{\"table_key\":\"a.published\",\"operator\":1,\"value_key\":\"1\"},\"where1\":{\"table_key\":\"a.entity_type\",\"operator\":1,\"value_key\":\"$entity_type\"},\"where2\":{\"table_key\":\"a.entity\",\"operator\":1,\"value_key\":\"$entity\"}}', NULL, '{}', '{\"dynamic_get_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_custom_admin_view_model\":\"0\",\"custom_admin_view_model\":\"\",\"power_custom_admin_view_model\":[],\"add_custom_admin_view_html\":\"0\",\"custom_admin_view_html\":\"\",\"power_custom_admin_view_html\":[],\"add_custom_admin_view\":\"0\",\"custom_admin_view\":\"\",\"power_custom_admin_view\":[],\"add_custom_admin_view_controller\":\"0\",\"custom_admin_view_controller\":\"\",\"power_custom_admin_view_controller\":[],\"add_custom_admin_views_model\":\"0\",\"custom_admin_views_model\":\"\",\"power_custom_admin_views_model\":[],\"add_custom_admin_views_html\":\"0\",\"custom_admin_views_html\":\"\",\"power_custom_admin_views_html\":[],\"add_custom_admin_views\":\"0\",\"custom_admin_views\":\"\",\"power_custom_admin_views\":[],\"add_custom_admin_views_controller\":\"0\",\"custom_admin_views_controller\":\"\",\"power_custom_admin_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, 1, 0, 59, 'c3542e52-cba1-42de-9ffa-0919c0082285'), +(140, 0, 0, 0, 0, 0, '', '', '', '', '', 1, 0, NULL, '', '{}', 'getMessages', 3, '{}', '{}', '{}', 1, 'ImportLogMessages', '{}', '', '', 'a.message AS message\r\na.message_status AS message_status', 'ab2bbdfc-c0a0-4ffc-9556-67d5af8bec64', '{\"where0\":{\"table_key\":\"a.published\",\"operator\":1,\"value_key\":\"1\"},\"where1\":{\"table_key\":\"a.entity_type\",\"operator\":1,\"value_key\":\"$entity_type\"},\"where2\":{\"table_key\":\"a.entity\",\"operator\":1,\"value_key\":\"$entity\"}}', NULL, '{}', '{\"dynamic_get_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_custom_admin_view_model\":\"0\",\"custom_admin_view_model\":\"\",\"power_custom_admin_view_model\":[],\"add_custom_admin_view_html\":\"0\",\"custom_admin_view_html\":\"\",\"power_custom_admin_view_html\":[],\"add_custom_admin_view\":\"0\",\"custom_admin_view\":\"\",\"power_custom_admin_view\":[],\"add_custom_admin_view_controller\":\"0\",\"custom_admin_view_controller\":\"\",\"power_custom_admin_view_controller\":[],\"add_custom_admin_views_model\":\"0\",\"custom_admin_views_model\":\"\",\"power_custom_admin_views_model\":[],\"add_custom_admin_views_html\":\"0\",\"custom_admin_views_html\":\"\",\"power_custom_admin_views_html\":[],\"add_custom_admin_views\":\"0\",\"custom_admin_views\":\"\",\"power_custom_admin_views\":[],\"add_custom_admin_views_controller\":\"0\",\"custom_admin_views_controller\":\"\",\"power_custom_admin_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, 8, 0, 59, 'c3542e52-cba1-42de-9ffa-0919c0082285'), (141, 1, 0, 1, 0, 0, '', '', '', '', 'CQlpZiAoIWVtcHR5KCRpdGVtcykpDQoJCXsNCgkJCSRtb2RlbCA9IFN1cGVyX19fNjQwYjUzNTJfZmIwOV80MjVmX2EyNmVfY2Q0NGVkYTAzZjE1X19fUG93ZXI6OmdldE1vZGVsKCdpdGVtc19pbXBvcnRfcXVldWUnKTsNCgkJCSRudW1iZXIgPSBjb3VudCgkaXRlbXMpOw0KCQkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQ0KCQkJew0KCQkJCSRpdGVtLT50YXJnZXQgPSAnaXRlbV9pbXBvcnQnOw0KCQkJCSRpdGVtLT5pbXBvcnRfc3RhdHVzID0gVGV4dDo6XygkbW9kZWwtPnNlbGVjdGlvblRyYW5zbGF0aW9uKCRpdGVtLT5pbXBvcnRfc3RhdHVzLCAnaW1wb3J0X3N0YXR1cycpKTsNCgkJCQkkaXRlbS0+Y3JlYXRlZCA9IFN1cGVyX19fOTkzZmU5MTNfOGUzNl80ODAwX2E1ZjdfNTQ0YWE3MjhlZTQ4X19fUG93ZXI6OmZhbmN5RGF0ZSgkaXRlbS0+Y3JlYXRlZCk7DQoJCQkJJGl0ZW0tPm51bWJlciA9ICRudW1iZXI7DQoJCQkJJG51bWJlci0tOw0KCQkJfQ0KCQl9', 1, 0, NULL, '', '{\"filter0\":{\"filter_type\":2,\"state_key\":\"$this->user->id\",\"operator\":1,\"table_key\":\"a.created_by\"}}', 'getQueue', 4, '{}', '{}', '{\"join_view_table0\":{\"view_table\":\"224eb9c7-8b40-48cf-bf77-2afa291fd54a\",\"row_type\":1,\"as\":\"f\",\"type\":1,\"on_field\":\"a.file\",\"operator\":1,\"join_field\":\"f.guid\",\"selection\":\"f.name AS file_name\"}}', 1, 'Item Import Queue', '{\"order0\":{\"table_key\":\"a.id\",\"direction\":\"DESC\"}}', '', '', 'a.import_status AS import_status\r\na.created AS created\r\na.guid AS guid', 'a9f19a16-fadb-44ea-a9b6-41130aad05ec', '{\"where0\":{\"table_key\":\"a.published\",\"operator\":1,\"value_key\":\"1\"}}', NULL, '{}', '{\"dynamic_get_headers\":{\"add_site_view_model\":\"0\",\"site_view_model\":\"\",\"power_site_view_model\":[],\"add_site_view_html\":\"0\",\"site_view_html\":\"\",\"power_site_view_html\":[],\"add_site_view\":\"0\",\"site_view\":\"\",\"power_site_view\":[],\"add_site_view_controller\":\"0\",\"site_view_controller\":\"\",\"power_site_view_controller\":[],\"add_site_views_model\":\"0\",\"site_views_model\":\"\",\"power_site_views_model\":[],\"add_site_views_html\":\"0\",\"site_views_html\":\"\",\"power_site_views_html\":[],\"add_site_views\":\"0\",\"site_views\":\"\",\"power_site_views\":[],\"add_site_views_controller\":\"0\",\"site_views_controller\":\"\",\"power_site_views_controller\":[],\"add_custom_admin_view_model\":\"0\",\"custom_admin_view_model\":\"\",\"power_custom_admin_view_model\":[],\"add_custom_admin_view_html\":\"0\",\"custom_admin_view_html\":\"\",\"power_custom_admin_view_html\":[],\"add_custom_admin_view\":\"0\",\"custom_admin_view\":\"\",\"power_custom_admin_view\":[],\"add_custom_admin_view_controller\":\"0\",\"custom_admin_view_controller\":\"\",\"power_custom_admin_view_controller\":[],\"add_custom_admin_views_model\":\"0\",\"custom_admin_views_model\":\"\",\"power_custom_admin_views_model\":[],\"add_custom_admin_views_html\":\"0\",\"custom_admin_views_html\":\"\",\"power_custom_admin_views_html\":[],\"add_custom_admin_views\":\"0\",\"custom_admin_views\":\"\",\"power_custom_admin_views\":[],\"add_custom_admin_views_controller\":\"0\",\"custom_admin_views_controller\":\"\",\"power_custom_admin_views_controller\":[],\"add_ajax_model\":\"0\",\"ajax_model\":\"\",\"power_ajax_model\":[]}}', 1, 8, 0, 60, '0ac7277b-8f9f-4119-b22b-26f8c22e988b'); -- @@ -2778,12 +2781,17 @@ INSERT INTO `#__componentbuilder_field` (`id`, `add_css_view`, `add_css_views`, (3064, 0, 0, 0, 0, '', '', '', '', 10, '', 'VARCHAR', 0, '', '', 'Today Text Colour', 'NOT NULL', 0, '7f60f198-53e7-4fe9-813f-d1b6c553680e', '\"\"', 1, '2022-09-21 05:12:36', '2023-08-11 06:51:05', 4, 0, 1027, 'a2e37110-c69f-41b3-b05b-f5f51d0d9ab4', '', '', '', '', ''), (3065, 0, 0, 0, 0, '', '', '', '', 10, '', 'VARCHAR', 0, '', '', 'Years Line Colour', 'NOT NULL', 0, '7f60f198-53e7-4fe9-813f-d1b6c553680e', '\"\"', 1, '2022-09-21 05:13:57', '2023-08-11 06:51:23', 3, 0, 1027, '9e2dcfc2-ea21-4caf-88aa-f0706d5878e5', '', '', '', '', ''), (3066, 0, 0, 0, 0, '', '', '', '', 10, '', 'VARCHAR', 0, '', '', 'Years Text Colour', 'NOT NULL', 0, '7f60f198-53e7-4fe9-813f-d1b6c553680e', '\"\"', 1, '2022-09-21 05:15:04', '2023-08-11 06:51:32', 2, 0, 1027, '0a6ee559-822b-4cd1-a049-d956ba2ff80b', '', '', '', '', ''), +(3067, 0, 0, 0, 0, '', '', '', '', 10, '', 'VARCHAR', 0, '', '', 'Background Color', 'NOT NULL', 0, '7f60f198-53e7-4fe9-813f-d1b6c553680e', '\"\"', 1, '2022-09-21 05:17:44', '2023-08-11 06:21:55', 3, 0, 1027, '3f854e95-d6e8-485a-946e-08df90597d72', '', '', '', '', ''), +(3068, 0, 0, 0, 0, '', '', '', '', 255, '', 'VARCHAR', 0, '', '', 'Label', 'NULL', 0, '201327fe-3067-4316-a155-3fe2a52e05c0', '\"\"', 1, '2022-09-21 05:21:50', '2024-10-10 22:04:24', 8, 0, 155, '8d89dcfa-21fe-43cf-98dc-93f05d1a39c8', '', '', '', '', ''), +(3069, 0, 0, 0, 0, '', '', 'Other', '0000-00-00 00:00:00', '', '', 'DATETIME', 0, '', '', 'End Date', 'NOT NULL', 0, '6cf5a33f-cb25-4a58-bfec-7e1511896402', '\"\"', 1, '2022-09-21 05:22:03', '2022-09-21 08:34:39', 2, 0, 155, '88d322b4-d400-4832-8203-8acad5ba790f', '', '', '', '', ''), +(3070, 0, 0, 0, 0, '', '', 'Other', '0000-00-00 00:00:00', '', '', 'DATETIME', 0, '', '', 'Start Date', 'NOT NULL', 0, '6cf5a33f-cb25-4a58-bfec-7e1511896402', '\"\"', 1, '2022-09-21 05:22:18', '2022-09-21 08:34:30', 4, 0, 155, '7780516e-24ad-4556-804f-7644c45ef3b6', '', '', '', '', ''), (3071, 0, 0, 0, 0, 'LnN1YmZvcm0tdGFibGUtbGF5b3V0IGlucHV0IHsNCgltYXgtd2lkdGg6IDkwJTsNCn0=', '', '', '', '', '', 'TEXT', 0, '', '', 'Versions', 'NOT NULL', 0, '7139f2c8-a70a-46a6-bbe3-4eefe54ca515', '\"\"', 1, '2022-09-21 05:24:55', '2023-08-11 06:20:08', 7, 0, 1028, '801520d9-b7b3-47c5-a2a9-2581199ead0b', '', '', '', '', ''), (3333, 0, 0, 0, 0, '', '', 0, '', 1, '', 'TINYINT', 0, '', '', 'Show Legend', 'NOT NULL', 0, 'b868ed59-4208-4206-8504-95a35a74a11c', '\"\"', 1, '2023-08-10 15:24:54', '2023-08-10 15:25:08', 2, 0, 1052, 'dc416a4a-a19f-4ef5-a703-e2334df42efd', '', '', '', '', ''), (3334, 0, 0, 0, 0, '', '', '', '', 10, '', 'VARCHAR', 0, '', '', 'Legend Background Colour', 'NOT NULL', 0, '7f60f198-53e7-4fe9-813f-d1b6c553680e', '\"\"', 1, '2023-08-10 15:26:17', '2023-08-10 15:26:28', 2, 0, 1027, '8f1c9c1f-9d64-4f6c-9066-777665c7dcac', '', '', '', '', ''), (3335, 0, 0, 0, 0, '', '', '', '', 10, '', 'VARCHAR', 0, '', '', 'Legend Text Colour', 'NOT NULL', 0, '7f60f198-53e7-4fe9-813f-d1b6c553680e', '\"\"', 1, '2023-08-10 15:26:44', '2023-08-10 15:27:14', 2, 0, 1027, '11bf8b86-99ad-4003-82eb-c55c16d0a041', '', '', '', '', ''), (3336, 0, 0, 0, 0, 'LnN1YmZvcm0tdGFibGUtbGF5b3V0IGlucHV0IHsNCgltYXgtd2lkdGg6IDkwJTsNCn0=', '', '', '', '', '', 'TEXT', 0, '', '', 'Version Dates', 'NOT NULL', 0, '7139f2c8-a70a-46a6-bbe3-4eefe54ca515', '\"\"', 1, '2023-08-11 06:18:36', '2023-08-11 09:53:16', 8, 0, 1028, '7bb0cce1-9a1d-4f38-9f94-4585eaabcdcd', '', '', '', '', ''), (3337, 0, 0, 0, 0, '', '', '', '', 10, '', 'VARCHAR', 0, '', '', 'Future Text Colour', 'NOT NULL', 0, '7f60f198-53e7-4fe9-813f-d1b6c553680e', '\"\"', 1, '2023-08-11 06:48:59', '2023-08-11 06:49:21', 2, 0, 1027, '1805a9da-75bf-41d6-b120-4c021fd93d8d', '', '', '', '', ''), +(3338, 0, 0, 0, 0, '', '', '', '', '', '', 'TEXT', 0, '', '', 'Description', 'NULL', 0, '201327fe-3067-4316-a155-3fe2a52e05c0', '\"\"', 1, '2023-08-11 09:48:31', '2024-10-10 21:58:27', 4, 0, 155, '450075e1-bb88-44ab-b14c-ac619e20fab8', '', '', '', '', ''), (3395, 0, 0, 0, 0, '', '', '', '', 1, '', 'TINYINT', 2, '', '', 'Allowed Type', 'NULL', 0, 'a51dfc06-1b9b-4d0a-86ba-f705bcd40d4d', '\"\"', 1, '2020-09-08 21:44:48', '2024-09-15 23:02:52', 6, 0, 1060, '9f6f776f-9741-4aec-a3ff-fb9880fdcb5c', '', '', '', '', NULL), (3396, 0, 0, 0, 0, '', '', '', '', '', '', 'TEXT', 0, '', '', 'Storage Folder', 'NULL', 0, '201327fe-3067-4316-a155-3fe2a52e05c0', '\"\"', 1, '2020-09-08 21:51:10', '2024-09-16 00:53:48', 7, 0, 1061, '523f91f8-ca60-44f7-9de0-645549967095', '', '', '', '', NULL), (3397, 0, 0, 0, 0, '', '', '', '', 255, '', 'VARCHAR', 2, '', '', 'File Naming Convention', 'NULL', 0, 'a51dfc06-1b9b-4d0a-86ba-f705bcd40d4d', '\"\"', 1, '2020-09-08 21:55:51', '2024-09-09 01:36:33', 8, 0, 1062, '56518d20-a341-44f5-b8ba-f5a1ce5a5d0a', '', '', '', '', NULL), @@ -2886,7 +2894,7 @@ INSERT INTO `#__componentbuilder_fieldtype` (`id`, `description`, `name`, `prope (26, 'The timezone form field type provides a dropdown list of available time zones for selection. If a saved value exists, it is displayed when the page is first loaded; otherwise, the default value (if specified) is shown. This field is useful for allowing users to set or adjust time zone preferences.', 'Timezone', '{\"properties0\":{\"name\":\"type\",\"example\":\"timezone\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be timezone.\"},\"properties1\":{\"name\":\"name\",\"example\":\"timezone\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Timezone\",\"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 time zone. For example, use \'-10\' for \'(UTC -10:00) Hawaii\'.\"},\"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\":\"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\"}}', 'Dropdown list of time zones.', '', 1, 5, 0, 0, 'ed8d8cf4-cb05-49cc-95ef-4ef275f539f9'), (27, 'The URL field type is a text input specifically intended for entering web addresses. It functions like a standard text field but uses the url input type to enable browser-level validation. If a fully qualified URL (one with a scheme and domain, such as http://example.com) includes internationalized domain names (IDNs) with non-ASCII characters (e.g., ê or Ψ), it will be automatically converted to a valid ASCII-compatible format (Punycode) for proper handling and storage.', 'URL', '{\"properties0\":{\"name\":\"type\",\"example\":\"url\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be url.\"},\"properties1\":{\"name\":\"name\",\"example\":\"website\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Website\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"size\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties4\":{\"name\":\"maxlength\",\"example\":\"50\",\"adjustable\":\"1\",\"description\":\"(optional) limits the number of characters that may be entered.\"},\"properties5\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties6\":{\"name\":\"description\",\"example\":\"Enter website address\",\"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.\"},\"properties7\":{\"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\'.\"},\"properties8\":{\"name\":\"readonly\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value - it will also not submit\"},\"properties10\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties11\":{\"name\":\"relative\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) set to true for relative URLs\"},\"properties12\":{\"name\":\"filter\",\"example\":\"url\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties13\":{\"name\":\"validated\",\"example\":\"url\",\"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.\"},\"properties14\":{\"name\":\"scheme\",\"example\":\"http,https,mailto\",\"adjustable\":\"1\",\"description\":\"(optional) Validates that the value is a URL with a valid scheme (which can be restricted by the optional comma-separated field \'scheme\'), and passes a basic syntax check.\"},\"properties15\":{\"name\":\"message\",\"example\":\"Error! Please add website here.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties16\":{\"name\":\"hint\",\"example\":\"Your Website Here\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The placeholder to display inside the text box.\"},\"properties17\":{\"name\":\"autocomplete\",\"example\":\"on\",\"adjustable\":\"1\",\"description\":\"(optional) The autocomplete state for the form field. If \'off\' element will not be automatically completed by browser.\"},\"properties18\":{\"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\"},\"properties19\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'Text input for a valid URL.', '', 1, 11, 0, 0, '8df6e07e-2b16-43ed-a18d-2059fa44cdf1'), (28, 'The user form field type provides a modal-based selection interface for choosing a Joomla user. It allows administrators to browse and select users from the system through a searchable pop-up dialog.', 'User', '{\"properties0\":{\"name\":\"type\",\"example\":\"user\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be user.\"},\"properties1\":{\"name\":\"name\",\"example\":\"user\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field. This must match the name of the query results column that contains the values that will be shown to the user in the drop-down list, unless a different name is specified in the value_field attribute.\"},\"properties2\":{\"name\":\"label\",\"example\":\"User\",\"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\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties5\":{\"name\":\"size\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties6\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties7\":{\"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\"}}', 'Modal selector for Joomla users.', '', 1, 5, 0, 0, 'b0641980-5e78-42f6-972f-86aa607db23e'), -(29, 'The usergrouplist form field type provides a dropdown list of all available Joomla user groups. It allows selection of a single group from the site\'s access control system for use in configuration or assignment settings.', 'Usergrouplist', '{\"properties0\":{\"name\":\"type\",\"example\":\"usergrouplist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be usergrouplist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"usergroup\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field. This must match the name of the query results column that contains the values that will be shown to the user in the drop-down list, unless a different name is specified in the value_field attribute.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Group\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Select a group\",\"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\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties5\":{\"name\":\"layout\",\"example\":\"joomla.form.field.list-fancy-select\",\"adjustable\":\"1\",\"description\":\"(optional) (translatable) is the layout, for example joomla.form.field.list-fancy-select.\"},\"properties6\":{\"name\":\"size\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties7\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the field required true if yes.\"},\"properties8\":{\"name\":\"checksuperusergroup\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) is boolean to omit Super User groups. Values 1 or 0.\"},\"properties9\":{\"name\":\"multiple\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) If set to multiple then allows more than one usergroup to be selected.\"},\"properties10\":{\"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\"}}', 'Dropdown list of Joomla user groups.', '', 1, 8, 0, 0, 'e2f31181-fbb3-4c3a-859d-72b6b0cff308'), +(29, 'The usergrouplist form field type provides a dropdown list of all available Joomla user groups. It allows selection of a single group from the site\'s access control system for use in configuration or assignment settings.', 'Usergrouplist', '{\"properties0\":{\"name\":\"type\",\"example\":\"usergrouplist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be usergrouplist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"usergroup\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field. This must match the name of the query results column that contains the values that will be shown to the user in the drop-down list, unless a different name is specified in the value_field attribute.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Group\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties11\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the usergroup id of the default selection in the dropdown list.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Select a group\",\"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\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties5\":{\"name\":\"layout\",\"example\":\"joomla.form.field.list-fancy-select\",\"adjustable\":\"1\",\"description\":\"(optional) (translatable) is the layout, for example joomla.form.field.list-fancy-select.\"},\"properties6\":{\"name\":\"size\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the text box in characters. If omitted the width is determined by the browser. The value of size does not limit the number of characters that may be entered.\"},\"properties7\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the field required true if yes.\"},\"properties8\":{\"name\":\"checksuperusergroup\",\"example\":\"1\",\"adjustable\":\"1\",\"description\":\"(optional) is boolean to omit Super User groups. Values 1 or 0.\"},\"properties9\":{\"name\":\"multiple\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) If set to multiple then allows more than one usergroup to be selected.\"},\"properties10\":{\"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\"}}', 'Dropdown list of Joomla user groups.', '', 1, 8, 0, 0, 'e2f31181-fbb3-4c3a-859d-72b6b0cff308'), (30, 'The Filelist form field type provides a drop down list of files from a specified directory. 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.', 'Filelist', '{\"properties0\":{\"name\":\"type\",\"example\":\"filelist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be filelist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myfile\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select a file\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"directory\",\"example\":\"images\\/stories\",\"adjustable\":\"1\",\"description\":\"(optional) is the filesystem path to the directory containing the files to be listed. If omitted the directory given by JPATH_ROOT is assumed.\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default file name.\"},\"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\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to filter the list of files selected for inclusion in the drop-down list. If omitted, all files in the directory are included. The filter argument expression is applied before the exclude argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties7\":{\"name\":\"exclude\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to exclude files from the list. The exclude argument expression is applied after the filter argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties8\":{\"name\":\"stripext\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true then file name extensions will be stripped from the file names listed. Also note that the file name will be saved without the extension too.\"},\"properties9\":{\"name\":\"hide_none\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Do not use -\' item is omitted from the drop-down list.\"},\"properties10\":{\"name\":\"hide_default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Use default -\' item is omitted from the drop-down list.\"},\"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\"}}', 'File dropdown from directory.', '', 1, 7, 0, 1, '0c80df15-52c6-4647-983b-4bb4888a2edf'), (31, 'The Folderlist form field type provides a drop down list of folders from a specified directory. 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.', 'Folderlist', '{\"properties0\":{\"name\":\"type\",\"example\":\"folderlist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be folderlist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myfolder\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select a folder\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"directory\",\"example\":\"images\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the filesystem path to the directory containing the folders to be listed.\"},\"properties4\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default folder name.\"},\"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\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to filter the list of folders selected for inclusion in the drop-down list. If omitted, all folders in the directory are included. The filter argument expression is applied before the exclude argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties7\":{\"name\":\"exclude\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to exclude folders from the list. The exclude argument expression is applied after the filter argument expression. For information on constructing regular expressions see Regular expressions in parameter arguments.\"},\"properties8\":{\"name\":\"hide_none\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Do not use -\' item is omitted from the drop-down list.\"},\"properties9\":{\"name\":\"hide_default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a Boolean argument. If true, the \'- Use default -\' item is omitted from the drop-down list.\"},\"properties10\":{\"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\"}}', 'Folder dropdown from directory.', '', 1, 6, 0, 2, 'd3ab2ae4-9370-4497-ae6d-dee2e0b74b7a'), (32, 'Note: When using the file input type you should always add the attribute enctype=\"multipart/form-data\" to your form tag. Otherwise, the uploaded files will not be attached correctly.\r\n\r\nNote 2: You can put a soft limit file size by adding a hidden field with name=\"MAX_FILE_SIZE\" and value the maximum allowed bytes which is handled by php, but you must also handle it in your code with or without it.', 'File', '{\"properties0\":{\"name\":\"type\",\"example\":\"file\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be file.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myfilevalue\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Enter some text\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Choose an image from your computer with maximum 100KB\",\"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\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value, but doesn\'t mean much for a file.\"},\"properties5\":{\"name\":\"size\",\"example\":\"10\",\"adjustable\":\"1\",\"description\":\"(optional) is the width of the file box in characters.\"},\"properties6\":{\"name\":\"accept\",\"example\":\"image\\/*\",\"adjustable\":\"1\",\"description\":\"(optional) Tells the browser what MIME types your form will allow to be uploaded.\"},\"properties7\":{\"name\":\"class\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field.\"},\"properties8\":{\"name\":\"labelclass\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) adds a CSS class for form field\'s label; for Joomla 2.5.4+\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute\"},\"properties10\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"},\"properties11\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) For Joomla form validating it to be filled in\"},\"properties12\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) Whether to Joomla validate the field according to rules\"},\"properties13\":{\"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\"}}', 'Input field for files', '', 1, 10, 0, 3, '6da71c1e-119c-4e0d-a309-f3e52ecfa1d1'), @@ -3002,9 +3010,9 @@ INSERT INTO `#__componentbuilder_repository` (`id`, `system_name`, `organisation (17, 'Openai (codeberg - mirror)', 'joomla', 'openai', 1, 1, 'https://codeberg.org', 'c625381a-7795-4b9f-8b4e-997c9291e3fc', 'master', 1, 17, 1, '2025-06-17 21:47:49', '2024-06-10 11:03:19', NULL, '{}'), (18, 'Joomla Powers (codeberg - mirror)', 'joomla', 'joomla-powers', 2, 1, 'https://codeberg.org', '8ac595d4-0b1d-4877-ba3e-2b815c1c7e3c', 'master', 1, 18, 1, '2025-06-17 21:47:22', '2024-07-08 14:07:31', NULL, '{}'), (19, 'Joomla Field Types (codeberg - mirror)', 'joomla', 'joomla-fieldtypes', 3, 1, 'https://codeberg.org', 'bf4a1d77-e3a4-4aa8-a07f-2b01872bf7e9', 'master', 1, 19, 1, '2025-06-17 21:48:25', '2024-08-23 16:21:35', NULL, '{}'), -(20, 'Packages (github - mirror)', 'joomengine', 'packages', 4, 2, 'https://api.github.com', '562624ab-48bf-4979-9a14-6b10cf3635de', 'master', 1, 23, 1, '2025-07-14 08:44:46', '2025-05-31 08:47:01', NULL, '{}'), -(21, 'Snippets (github - mirror)', 'joomengine', 'snippets', 5, 2, 'https://api.github.com', '70e85588-bc28-4459-9b29-858f68faae8f', 'master', 1, 24, 1, '2025-06-24 15:11:19', '2025-06-18 10:35:14', NULL, '{}'), -(22, 'Repositories (github - mirror)', 'joomengine', 'repoindex', 6, 2, 'https://api.github.com', '8f156882-f299-4be2-ad13-fdb2c40bb207', 'master', 1, 25, 1, '2025-06-25 09:26:32', '2025-06-18 18:43:05', NULL, '{}'), +(20, 'Packages (github - mirror)', 'joomengine', 'packages_test', 4, 2, 'https://github.com/', '562624ab-48bf-4979-9a14-6b10cf3635de', 'main', 1, 23, 1, '2025-08-31 13:20:24', '2025-05-31 08:47:01', NULL, '{}'), +(21, 'Snippets (github - mirror)', 'joomengine', 'snippets', 5, 2, 'https://github.com/', '70e85588-bc28-4459-9b29-858f68faae8f', 'master', 1, 24, 1, '2025-08-30 16:01:18', '2025-06-18 10:35:14', NULL, '{}'), +(22, 'Repositories (github - mirror)', 'joomengine', 'repoindex', 6, 2, 'https://github.com/', '8f156882-f299-4be2-ad13-fdb2c40bb207', 'master', 1, 25, 1, '2025-08-30 16:01:15', '2025-06-18 18:43:05', NULL, '{}'), (23, 'Packages (codeberg - mirror)', 'joomla', 'packages', 4, 1, 'https://codeberg.org', '11298fc6-11a4-4075-bdcb-622ef4f3054d', 'master', 1, 26, 1, '2025-07-14 08:44:46', '2025-06-18 18:43:47', NULL, '{}'), (24, 'Snippets (codeberg - mirror)', 'joomla', 'snippets', 5, 1, 'https://codeberg.org', '70a9b44b-0802-4b94-9132-e5f360d0215e', 'master', 1, 27, 1, '2025-06-24 19:09:14', '2025-06-24 15:10:05', NULL, '{}'), (25, 'Repositories (codeberg - mirror)', 'joomla', 'repoindex', 6, 1, 'https://codeberg.org', 'a8701724-b77c-4e5a-9efc-61701341e8e5', 'master', 1, 21, 1, '2025-06-24 19:09:09', '2025-06-24 15:10:09', NULL, '{}'); @@ -3048,7 +3056,7 @@ INSERT INTO `#__componentbuilder_admin_fields` (`id`, `addfields`, `admin_view`, -- Dumping data for table `#__componentbuilder_component_admin_views` -- INSERT INTO `#__componentbuilder_component_admin_views` (`id`, `addadmin_views`, `joomla_component`, `published`, `created`, `modified`, `version`, `hits`, `ordering`, `params`) VALUES -(27, '{\"addadmin_views0\":{\"adminview\":\"c1053952-8a84-4398-aef1-41726f7c0043\",\"icomoon\":\"eye-open\",\"mainmenu\":\"1\",\"dashboard_add\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"joomla_fields\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"2\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"1\"},\"addadmin_views1\":{\"adminview\":\"595ba2c9-21fa-43a4-9af7-93c9cfb21b82\",\"icomoon\":\"plus\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"2\"},\"addadmin_views2\":{\"adminview\":\"9eefa86b-6294-4512-8d62-979abf16c00d\",\"icomoon\":\"shield\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"3\"},\"addadmin_views3\":{\"adminview\":\"2e451812-45af-4015-aa0c-f5912702c9af\",\"icomoon\":\"pie\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"4\"},\"addadmin_views4\":{\"adminview\":\"6acc4069-1c33-4470-85a6-07bc9bb16d10\",\"icomoon\":\"camera\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"5\"},\"addadmin_views5\":{\"adminview\":\"6c6345a1-e3e4-4840-8918-831034e95b19\",\"icomoon\":\"pin\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"6\"},\"addadmin_views6\":{\"adminview\":\"3dbb581b-619a-4fb0-a6f6-e4a136ea31e2\",\"icomoon\":\"cart\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"7\"},\"addadmin_views7\":{\"adminview\":\"224eb9c7-8b40-48cf-bf77-2afa291fd54a\",\"icomoon\":\"file\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"8\"},\"addadmin_views12\":{\"adminview\":\"75061367-79c2-4d5b-a75d-eca6d33507df\",\"icomoon\":\"clock\",\"mainmenu\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"9\"},\"addadmin_views8\":{\"adminview\":\"19a973ea-cdfa-4c79-bbbd-1b8a37286b27\",\"icomoon\":\"file-check\",\"mainmenu\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"10\"},\"addadmin_views9\":{\"adminview\":\"60b7b30d-9229-4ce2-b055-9efbb7ac4cea\",\"icomoon\":\"users\",\"mainmenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"11\"},\"addadmin_views10\":{\"adminview\":\"a9f19a16-fadb-44ea-a9b6-41130aad05ec\",\"icomoon\":\"upload\",\"mainmenu\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"12\"},\"addadmin_views11\":{\"adminview\":\"ab2bbdfc-c0a0-4ffc-9556-67d5af8bec64\",\"icomoon\":\"envelope\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"13\"}}', 'efde995e-60aa-4b39-b644-44349dfb660d', 1, '2017-10-28 03:56:26', '2025-03-26 12:21:46', 20, 0, 0, ''); +(27, '{\"addadmin_views0\":{\"adminview\":\"c1053952-8a84-4398-aef1-41726f7c0043\",\"icomoon\":\"eye-open\",\"mainmenu\":\"1\",\"dashboard_add\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"joomla_fields\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"2\",\"filter\":\"2\",\"edit_create_site_view\":\"1\",\"order\":\"1\"},\"addadmin_views1\":{\"adminview\":\"595ba2c9-21fa-43a4-9af7-93c9cfb21b82\",\"icomoon\":\"plus\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"2\"},\"addadmin_views2\":{\"adminview\":\"9eefa86b-6294-4512-8d62-979abf16c00d\",\"icomoon\":\"shield\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"3\"},\"addadmin_views3\":{\"adminview\":\"2e451812-45af-4015-aa0c-f5912702c9af\",\"icomoon\":\"pie\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"4\"},\"addadmin_views4\":{\"adminview\":\"6acc4069-1c33-4470-85a6-07bc9bb16d10\",\"icomoon\":\"camera\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"5\"},\"addadmin_views5\":{\"adminview\":\"6c6345a1-e3e4-4840-8918-831034e95b19\",\"icomoon\":\"pin\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"6\"},\"addadmin_views6\":{\"adminview\":\"3dbb581b-619a-4fb0-a6f6-e4a136ea31e2\",\"icomoon\":\"cart\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"7\"},\"addadmin_views7\":{\"adminview\":\"224eb9c7-8b40-48cf-bf77-2afa291fd54a\",\"icomoon\":\"file\",\"mainmenu\":\"1\",\"dashboard_list\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"8\"},\"addadmin_views8\":{\"adminview\":\"75061367-79c2-4d5b-a75d-eca6d33507df\",\"icomoon\":\"clock\",\"mainmenu\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"9\"},\"addadmin_views9\":{\"adminview\":\"19a973ea-cdfa-4c79-bbbd-1b8a37286b27\",\"icomoon\":\"file-check\",\"mainmenu\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"10\"},\"addadmin_views10\":{\"adminview\":\"60b7b30d-9229-4ce2-b055-9efbb7ac4cea\",\"icomoon\":\"users\",\"mainmenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"metadata\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"11\"},\"addadmin_views11\":{\"adminview\":\"a9f19a16-fadb-44ea-a9b6-41130aad05ec\",\"icomoon\":\"upload\",\"mainmenu\":\"1\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"12\"},\"addadmin_views12\":{\"adminview\":\"ab2bbdfc-c0a0-4ffc-9556-67d5af8bec64\",\"icomoon\":\"envelope\",\"submenu\":\"1\",\"checkin\":\"1\",\"history\":\"1\",\"access\":\"1\",\"add_api\":\"0\",\"filter\":\"2\",\"edit_create_site_view\":\"\",\"order\":\"13\"}}', 'efde995e-60aa-4b39-b644-44349dfb660d', 1, '2017-10-28 03:56:26', '2025-07-24 08:30:16', 21, 0, 0, ''); -- -- Dumping data for table `#__componentbuilder_component_site_views` diff --git a/admin/sql/updates/mysql/5_1_2-alpha.sql b/admin/sql/updates/mysql/5_1_2-alpha.sql new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/admin/sql/updates/mysql/5_1_2-alpha.sql @@ -0,0 +1 @@ + diff --git a/admin/src/Field/AdminviewsfilteraddcustombuttonField.php b/admin/src/Field/AdminviewsfilteraddcustombuttonField.php index c7364d836..95e5f3649 100644 --- a/admin/src/Field/AdminviewsfilteraddcustombuttonField.php +++ b/admin/src/Field/AdminviewsfilteraddcustombuttonField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class AdminviewsfilteraddcustombuttonField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/AdminviewsfilteraddfadeinField.php b/admin/src/Field/AdminviewsfilteraddfadeinField.php index 1f27ceb87..abf98720f 100644 --- a/admin/src/Field/AdminviewsfilteraddfadeinField.php +++ b/admin/src/Field/AdminviewsfilteraddfadeinField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class AdminviewsfilteraddfadeinField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/AdminviewsfilteraddphpajaxField.php b/admin/src/Field/AdminviewsfilteraddphpajaxField.php index c3056b7dd..f4c3e1be3 100644 --- a/admin/src/Field/AdminviewsfilteraddphpajaxField.php +++ b/admin/src/Field/AdminviewsfilteraddphpajaxField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class AdminviewsfilteraddphpajaxField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/AdminviewsfiltertypeField.php b/admin/src/Field/AdminviewsfiltertypeField.php index de896330c..5cac6890b 100644 --- a/admin/src/Field/AdminviewsfiltertypeField.php +++ b/admin/src/Field/AdminviewsfiltertypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class AdminviewsfiltertypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ClassextendingsfilterextensiontypeField.php b/admin/src/Field/ClassextendingsfilterextensiontypeField.php index 7b4fc91ca..41541826a 100644 --- a/admin/src/Field/ClassextendingsfilterextensiontypeField.php +++ b/admin/src/Field/ClassextendingsfilterextensiontypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ClassextendingsfilterextensiontypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ClassmethodsfilterextensiontypeField.php b/admin/src/Field/ClassmethodsfilterextensiontypeField.php index 45d55574a..acc4156b1 100644 --- a/admin/src/Field/ClassmethodsfilterextensiontypeField.php +++ b/admin/src/Field/ClassmethodsfilterextensiontypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ClassmethodsfilterextensiontypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ClassmethodsfiltervisibilityField.php b/admin/src/Field/ClassmethodsfiltervisibilityField.php index 2be91ef07..bc5ce5158 100644 --- a/admin/src/Field/ClassmethodsfiltervisibilityField.php +++ b/admin/src/Field/ClassmethodsfiltervisibilityField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ClassmethodsfiltervisibilityField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ClasspropertiesfilterextensiontypeField.php b/admin/src/Field/ClasspropertiesfilterextensiontypeField.php index 986ac4b81..e8c1abb40 100644 --- a/admin/src/Field/ClasspropertiesfilterextensiontypeField.php +++ b/admin/src/Field/ClasspropertiesfilterextensiontypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ClasspropertiesfilterextensiontypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ClasspropertiesfiltervisibilityField.php b/admin/src/Field/ClasspropertiesfiltervisibilityField.php index f06fb61f6..579a93792 100644 --- a/admin/src/Field/ClasspropertiesfiltervisibilityField.php +++ b/admin/src/Field/ClasspropertiesfiltervisibilityField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ClasspropertiesfiltervisibilityField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ComponentsroutersfiltermodeconstructorafterparentField.php b/admin/src/Field/ComponentsroutersfiltermodeconstructorafterparentField.php index 06456b89e..05358ec8e 100644 --- a/admin/src/Field/ComponentsroutersfiltermodeconstructorafterparentField.php +++ b/admin/src/Field/ComponentsroutersfiltermodeconstructorafterparentField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ComponentsroutersfiltermodeconstructorafterparentField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ComponentsroutersfiltermodeconstructorbeforeparentField.php b/admin/src/Field/ComponentsroutersfiltermodeconstructorbeforeparentField.php index 8a813625d..a5aca8ded 100644 --- a/admin/src/Field/ComponentsroutersfiltermodeconstructorbeforeparentField.php +++ b/admin/src/Field/ComponentsroutersfiltermodeconstructorbeforeparentField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ComponentsroutersfiltermodeconstructorbeforeparentField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ComponentsroutersfiltermodemethodsField.php b/admin/src/Field/ComponentsroutersfiltermodemethodsField.php index 2346ab127..0a04cf50b 100644 --- a/admin/src/Field/ComponentsroutersfiltermodemethodsField.php +++ b/admin/src/Field/ComponentsroutersfiltermodemethodsField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ComponentsroutersfiltermodemethodsField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/Cron_serversField.php b/admin/src/Field/Cron_serversField.php deleted file mode 100644 index 5eb99a945..000000000 --- a/admin/src/Field/Cron_serversField.php +++ /dev/null @@ -1,178 +0,0 @@ - - * @git Joomla Component Builder - * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. - * @license GNU General Public License version 2 or later; see LICENSE.txt - */ -namespace VDM\Component\Componentbuilder\Administrator\Field; - -use Joomla\CMS\Factory; -use Joomla\CMS\Form\Field\ListField; -use Joomla\CMS\Language\Text; -use Joomla\CMS\HTML\HTMLHelper as Html; -use Joomla\CMS\Component\ComponentHelper; -use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; -use Joomla\CMS\Uri\Uri; - -// No direct access to this file -\defined('_JEXEC') or die; - -/** - * Cron_servers Form Field class for the Componentbuilder component - * - * @since 1.6 - */ -class Cron_serversField extends ListField -{ - /** - * The cron_servers field type. - * - * @var string - */ - public $type = 'Cron_servers'; - - /** - * Override to add new button - * - * @return string The field input markup. - * - * @since 3.2 - */ - protected function getInput() - { - // see if we should add buttons - $set_button = $this->getAttribute('button'); - // get html - $html = parent::getInput(); - // if true set button - if ($set_button === 'true') - { - $button = array(); - $script = array(); - $button_code_name = $this->getAttribute('name'); - // get the input from url - $app = Factory::getApplication(); - $jinput = $app->input; - // get the view name & id - $values = $jinput->getArray(array( - 'id' => 'int', - 'view' => 'word' - )); - // check if new item - $ref = ''; - $refJ = ''; - if (!is_null($values['id']) && strlen($values['view'])) - { - // only load referral if not new item. - $ref = '&ref=' . $values['view'] . '&refid=' . $values['id']; - $refJ = '&ref=' . $values['view'] . '&refid=' . $values['id']; - // get the return value. - $_uri = (string) Uri::getInstance(); - $_return = urlencode(base64_encode($_uri)); - // load return value. - $ref .= '&return=' . $_return; - $refJ .= '&return=' . $_return; - } - // get button label - $button_label = trim($button_code_name); - $button_label = preg_replace('/_+/', ' ', $button_label); - $button_label = preg_replace('/\s+/', ' ', $button_label); - $button_label = preg_replace("/[^A-Za-z ]/", '', $button_label); - $button_label = ucfirst(strtolower($button_label)); - // get user object - $user = Factory::getApplication()->getIdentity(); - // only add if user allowed to create server - if ($user->authorise('server.create', 'com_componentbuilder') && $app->isClient('administrator')) // TODO for now only in admin area. - { - // build Create button - $button[] = ' - '; - } - // only add if user allowed to edit server - if ($user->authorise('server.edit', 'com_componentbuilder') && $app->isClient('administrator')) // TODO for now only in admin area. - { - // build edit button - $button[] = ''; - // build script - $script[] = " - document.addEventListener('DOMContentLoaded', function() { - let ".$button_code_name."Field = document.getElementById('jform_".$button_code_name."'); - if (!".$button_code_name."Field) { return; } - ".$button_code_name."Field.addEventListener('change', function(e) { - e.preventDefault(); - let ".$button_code_name."Value = this.value; - ".$button_code_name."Button(".$button_code_name."Value); - }); - let ".$button_code_name."Value = ".$button_code_name."Field.value; - ".$button_code_name."Button(".$button_code_name."Value); - }); - function ".$button_code_name."Button(value) { - var createButton = document.getElementById('".$button_code_name."Create'); - var editButton = document.getElementById('".$button_code_name."Edit'); - if (value > 0) { - // hide the create button - createButton.style.display = 'none'; - // show edit button - editButton.style.display = 'block'; - let url = 'index.php?option=com_componentbuilder&view=servers&task=server.edit&id='+value+'".$refJ."'; - editButton.setAttribute('href', url); - } else { - // show the create button - createButton.style.display = 'block'; - // hide edit button - editButton.style.display = 'none'; - } - }"; - } - // check if button was created for server field. - if (is_array($button) && count($button) > 0) - { - // Load the needed script. - $document = Factory::getApplication()->getDocument(); - $document->addScriptDeclaration(implode(' ',$script)); - // return the button attached to input field. - return '
' .$html . implode('',$button).'
'; - } - } - return $html; - } - - /** - * Method to get a list of options for a list input. - * - * @return array An array of Html options. - * @since 1.6 - */ - protected function getOptions() - { - // Get the databse object. - $db = Factory::getDBO(); - $query = $db->getQuery(true); - $query->select($db->quoteName(array('a.id','a.name','a.protocol'),array('id','cronjob_backup_server_name', 'protocol'))); - $query->from($db->quoteName('#__componentbuilder_server', 'a')); - $query->where($db->quoteName('a.published') . ' >= 1'); - $query->order('a.name ASC'); - $db->setQuery((string)$query); - $items = $db->loadObjectList(); - $options = []; - if ($items) - { - if ($this->multiple === false) - { - $options[] = Html::_('select.option', '', Text::_('COM_COMPONENTBUILDER_SELECT_AN_OPTION')); - } - foreach($items as $item) - { - $item->protocol = ($item->protocol == 2) ? Text::_('SFTP') : Text::_('FTP'); - $options[] = Html::_('select.option', $item->id, $item->cronjob_backup_server_name .' ['.$item->protocol.']'); - } - } - return $options; - } -} diff --git a/admin/src/Field/CustomadminviewsfilteraddcustombuttonField.php b/admin/src/Field/CustomadminviewsfilteraddcustombuttonField.php index 031bfa7c7..bf737af03 100644 --- a/admin/src/Field/CustomadminviewsfilteraddcustombuttonField.php +++ b/admin/src/Field/CustomadminviewsfilteraddcustombuttonField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class CustomadminviewsfilteraddcustombuttonField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/CustomadminviewsfilteraddphpajaxField.php b/admin/src/Field/CustomadminviewsfilteraddphpajaxField.php index a1e8d04bd..3045ca7bd 100644 --- a/admin/src/Field/CustomadminviewsfilteraddphpajaxField.php +++ b/admin/src/Field/CustomadminviewsfilteraddphpajaxField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class CustomadminviewsfilteraddphpajaxField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/CustomcodesfiltercommenttypeField.php b/admin/src/Field/CustomcodesfiltercommenttypeField.php index 2225857bc..90a2ac5ec 100644 --- a/admin/src/Field/CustomcodesfiltercommenttypeField.php +++ b/admin/src/Field/CustomcodesfiltercommenttypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class CustomcodesfiltercommenttypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/CustomcodesfiltertargetField.php b/admin/src/Field/CustomcodesfiltertargetField.php index 014bcc58e..68388d5f1 100644 --- a/admin/src/Field/CustomcodesfiltertargetField.php +++ b/admin/src/Field/CustomcodesfiltertargetField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class CustomcodesfiltertargetField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/CustomcodesfiltertypeField.php b/admin/src/Field/CustomcodesfiltertypeField.php index 7156cf562..2d512a54b 100644 --- a/admin/src/Field/CustomcodesfiltertypeField.php +++ b/admin/src/Field/CustomcodesfiltertypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class CustomcodesfiltertypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/DynamicgetsfiltergettypeField.php b/admin/src/Field/DynamicgetsfiltergettypeField.php index d552dac4b..2570795d5 100644 --- a/admin/src/Field/DynamicgetsfiltergettypeField.php +++ b/admin/src/Field/DynamicgetsfiltergettypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class DynamicgetsfiltergettypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/DynamicgetsfiltermainsourceField.php b/admin/src/Field/DynamicgetsfiltermainsourceField.php index 44f882e78..5d121800d 100644 --- a/admin/src/Field/DynamicgetsfiltermainsourceField.php +++ b/admin/src/Field/DynamicgetsfiltermainsourceField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class DynamicgetsfiltermainsourceField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/FieldsfilterdatatypeField.php b/admin/src/Field/FieldsfilterdatatypeField.php index 3b58915c4..82a24d4c5 100644 --- a/admin/src/Field/FieldsfilterdatatypeField.php +++ b/admin/src/Field/FieldsfilterdatatypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class FieldsfilterdatatypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/FieldsfilterindexesField.php b/admin/src/Field/FieldsfilterindexesField.php index 7baec9343..bfaf73105 100644 --- a/admin/src/Field/FieldsfilterindexesField.php +++ b/admin/src/Field/FieldsfilterindexesField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class FieldsfilterindexesField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/FieldsfilternullswitchField.php b/admin/src/Field/FieldsfilternullswitchField.php index 01afaf496..f4e309802 100644 --- a/admin/src/Field/FieldsfilternullswitchField.php +++ b/admin/src/Field/FieldsfilternullswitchField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class FieldsfilternullswitchField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/FieldsfilterstoreField.php b/admin/src/Field/FieldsfilterstoreField.php index 7482f6890..61e6d44ba 100644 --- a/admin/src/Field/FieldsfilterstoreField.php +++ b/admin/src/Field/FieldsfilterstoreField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class FieldsfilterstoreField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/HelpdocumentsfilterlocationField.php b/admin/src/Field/HelpdocumentsfilterlocationField.php index ba2e8c937..a920d1f1d 100644 --- a/admin/src/Field/HelpdocumentsfilterlocationField.php +++ b/admin/src/Field/HelpdocumentsfilterlocationField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class HelpdocumentsfilterlocationField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/HelpdocumentsfiltertypeField.php b/admin/src/Field/HelpdocumentsfiltertypeField.php index a4cea67b6..e7a0e11ce 100644 --- a/admin/src/Field/HelpdocumentsfiltertypeField.php +++ b/admin/src/Field/HelpdocumentsfiltertypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class HelpdocumentsfiltertypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/JoomlacomponentsfilterauthorField.php b/admin/src/Field/JoomlacomponentsfilterauthorField.php index a276e46d0..0843607e5 100644 --- a/admin/src/Field/JoomlacomponentsfilterauthorField.php +++ b/admin/src/Field/JoomlacomponentsfilterauthorField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class JoomlacomponentsfilterauthorField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/JoomlacomponentsfiltercompanynameField.php b/admin/src/Field/JoomlacomponentsfiltercompanynameField.php index c13ca3a57..02d0cf310 100644 --- a/admin/src/Field/JoomlacomponentsfiltercompanynameField.php +++ b/admin/src/Field/JoomlacomponentsfiltercompanynameField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class JoomlacomponentsfiltercompanynameField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/JoomlamodulesfiltertargetField.php b/admin/src/Field/JoomlamodulesfiltertargetField.php index 7aac03a63..59879b446 100644 --- a/admin/src/Field/JoomlamodulesfiltertargetField.php +++ b/admin/src/Field/JoomlamodulesfiltertargetField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class JoomlamodulesfiltertargetField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/LayoutsfilteraddphpviewField.php b/admin/src/Field/LayoutsfilteraddphpviewField.php index 21b259ff1..e56fe97cc 100644 --- a/admin/src/Field/LayoutsfilteraddphpviewField.php +++ b/admin/src/Field/LayoutsfilteraddphpviewField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class LayoutsfilteraddphpviewField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/LibrariesfiltertargetField.php b/admin/src/Field/LibrariesfiltertargetField.php index 318207c9a..3517496c4 100644 --- a/admin/src/Field/LibrariesfiltertargetField.php +++ b/admin/src/Field/LibrariesfiltertargetField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class LibrariesfiltertargetField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/LibrariesfiltertypeField.php b/admin/src/Field/LibrariesfiltertypeField.php index afb8c1b47..b083d807d 100644 --- a/admin/src/Field/LibrariesfiltertypeField.php +++ b/admin/src/Field/LibrariesfiltertypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class LibrariesfiltertypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/PowersfilterapprovedField.php b/admin/src/Field/PowersfilterapprovedField.php index 5a6281bfa..fe93e62cd 100644 --- a/admin/src/Field/PowersfilterapprovedField.php +++ b/admin/src/Field/PowersfilterapprovedField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class PowersfilterapprovedField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/PowersfiltertypeField.php b/admin/src/Field/PowersfiltertypeField.php index 683e0338a..bcb3afd63 100644 --- a/admin/src/Field/PowersfiltertypeField.php +++ b/admin/src/Field/PowersfiltertypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class PowersfiltertypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/RepositoriesfilterbaseField.php b/admin/src/Field/RepositoriesfilterbaseField.php index a1406769e..64172c47b 100644 --- a/admin/src/Field/RepositoriesfilterbaseField.php +++ b/admin/src/Field/RepositoriesfilterbaseField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class RepositoriesfilterbaseField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/RepositoriesfilterorganisationField.php b/admin/src/Field/RepositoriesfilterorganisationField.php index 1afdf8ca6..d3af588ea 100644 --- a/admin/src/Field/RepositoriesfilterorganisationField.php +++ b/admin/src/Field/RepositoriesfilterorganisationField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class RepositoriesfilterorganisationField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/RepositoriesfilterrepositoryField.php b/admin/src/Field/RepositoriesfilterrepositoryField.php index b08ffc813..028eca3f0 100644 --- a/admin/src/Field/RepositoriesfilterrepositoryField.php +++ b/admin/src/Field/RepositoriesfilterrepositoryField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class RepositoriesfilterrepositoryField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/RepositoriesfiltertargetField.php b/admin/src/Field/RepositoriesfiltertargetField.php index d23c6e916..55080b8cd 100644 --- a/admin/src/Field/RepositoriesfiltertargetField.php +++ b/admin/src/Field/RepositoriesfiltertargetField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class RepositoriesfiltertargetField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/RepositoriesfiltertypeField.php b/admin/src/Field/RepositoriesfiltertypeField.php index c0d34ede9..9df4d05a1 100644 --- a/admin/src/Field/RepositoriesfiltertypeField.php +++ b/admin/src/Field/RepositoriesfiltertypeField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class RepositoriesfiltertypeField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ServersfilternameField.php b/admin/src/Field/ServersfilternameField.php index 69f44e6ee..739d7c673 100644 --- a/admin/src/Field/ServersfilternameField.php +++ b/admin/src/Field/ServersfilternameField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ServersfilternameField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/ServersfilterprotocolField.php b/admin/src/Field/ServersfilterprotocolField.php index 95c19e0e4..2e45951cb 100644 --- a/admin/src/Field/ServersfilterprotocolField.php +++ b/admin/src/Field/ServersfilterprotocolField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class ServersfilterprotocolField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/SiteviewsfilteraddcustombuttonField.php b/admin/src/Field/SiteviewsfilteraddcustombuttonField.php index eb1fec3aa..ce57ee55f 100644 --- a/admin/src/Field/SiteviewsfilteraddcustombuttonField.php +++ b/admin/src/Field/SiteviewsfilteraddcustombuttonField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class SiteviewsfilteraddcustombuttonField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/SiteviewsfilteraddphpajaxField.php b/admin/src/Field/SiteviewsfilteraddphpajaxField.php index 90586d704..73d31d5a3 100644 --- a/admin/src/Field/SiteviewsfilteraddphpajaxField.php +++ b/admin/src/Field/SiteviewsfilteraddphpajaxField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class SiteviewsfilteraddphpajaxField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Field/TemplatesfilteraddphpviewField.php b/admin/src/Field/TemplatesfilteraddphpviewField.php index 140fbc45b..552a1526b 100644 --- a/admin/src/Field/TemplatesfilteraddphpviewField.php +++ b/admin/src/Field/TemplatesfilteraddphpviewField.php @@ -16,6 +16,7 @@ use Joomla\CMS\Language\Text; use Joomla\CMS\HTML\HTMLHelper as Html; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; +use Joomla\Database\DatabaseInterface; // No direct access to this file \defined('_JEXEC') or die; @@ -43,7 +44,7 @@ class TemplatesfilteraddphpviewField extends ListField protected function getOptions() { // Get a db connection. - $db = Factory::getContainer()->get(\Joomla\Database\DatabaseInterface::class); + $db = Factory::getContainer()->get(DatabaseInterface::class); // Create a new query object. $query = $db->getQuery(true); diff --git a/admin/src/Model/Admin_viewsModel.php b/admin/src/Model/Admin_viewsModel.php index 4c8cfb2c4..fe63a1bbc 100644 --- a/admin/src/Model/Admin_viewsModel.php +++ b/admin/src/Model/Admin_viewsModel.php @@ -649,12 +649,13 @@ class Admin_viewsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -668,37 +669,35 @@ class Admin_viewsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_admin_view')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_admin_view'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Admins_custom_tabsModel.php b/admin/src/Model/Admins_custom_tabsModel.php index 4c9cc156a..909f322d6 100644 --- a/admin/src/Model/Admins_custom_tabsModel.php +++ b/admin/src/Model/Admins_custom_tabsModel.php @@ -330,12 +330,13 @@ class Admins_custom_tabsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Admins_custom_tabsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_admin_custom_tabs')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_admin_custom_tabs'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Admins_fieldsModel.php b/admin/src/Model/Admins_fieldsModel.php index 848dcd792..342afdb6b 100644 --- a/admin/src/Model/Admins_fieldsModel.php +++ b/admin/src/Model/Admins_fieldsModel.php @@ -330,12 +330,13 @@ class Admins_fieldsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Admins_fieldsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_admin_fields')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_admin_fields'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Admins_fields_conditionsModel.php b/admin/src/Model/Admins_fields_conditionsModel.php index e7e07f8ba..6dc539250 100644 --- a/admin/src/Model/Admins_fields_conditionsModel.php +++ b/admin/src/Model/Admins_fields_conditionsModel.php @@ -330,12 +330,13 @@ class Admins_fields_conditionsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Admins_fields_conditionsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_admin_fields_conditions')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_admin_fields_conditions'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Admins_fields_relationsModel.php b/admin/src/Model/Admins_fields_relationsModel.php index 766411984..c2b947bec 100644 --- a/admin/src/Model/Admins_fields_relationsModel.php +++ b/admin/src/Model/Admins_fields_relationsModel.php @@ -330,12 +330,13 @@ class Admins_fields_relationsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Admins_fields_relationsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_admin_fields_relations')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_admin_fields_relations'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Class_extendingsModel.php b/admin/src/Model/Class_extendingsModel.php index 8fc575070..487eef80f 100644 --- a/admin/src/Model/Class_extendingsModel.php +++ b/admin/src/Model/Class_extendingsModel.php @@ -413,12 +413,13 @@ class Class_extendingsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -432,37 +433,35 @@ class Class_extendingsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_class_extends')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_class_extends'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Class_methodsModel.php b/admin/src/Model/Class_methodsModel.php index a3f57bb67..311687b2e 100644 --- a/admin/src/Model/Class_methodsModel.php +++ b/admin/src/Model/Class_methodsModel.php @@ -464,12 +464,13 @@ class Class_methodsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -483,37 +484,35 @@ class Class_methodsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_class_method')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_class_method'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Class_propertiesModel.php b/admin/src/Model/Class_propertiesModel.php index 2963d4d38..7772b3073 100644 --- a/admin/src/Model/Class_propertiesModel.php +++ b/admin/src/Model/Class_propertiesModel.php @@ -458,12 +458,13 @@ class Class_propertiesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -477,37 +478,35 @@ class Class_propertiesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_class_property')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_class_property'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/CompilerModel.php b/admin/src/Model/CompilerModel.php index 95e1aa227..4e653cbf9 100644 --- a/admin/src/Model/CompilerModel.php +++ b/admin/src/Model/CompilerModel.php @@ -223,7 +223,7 @@ class CompilerModel extends ListModel $_copyright->text =& $item->copyright; // value must be in text // Since all values are now in text (Joomla Limitation), we also add the field name (copyright) to context $this->_dispatcher->triggerEvent("onContentPrepare", array('com_componentbuilder.compiler.copyright', &$_copyright, &$params, 0)); - // Checking if copyright has uikit components that must be loaded. + // Checking if copyright has UIKit components that must be loaded. $this->uikitComp = ComponentbuilderHelper::getUikitComp($item->copyright,$this->uikitComp); } } diff --git a/admin/src/Model/Components_admin_viewsModel.php b/admin/src/Model/Components_admin_viewsModel.php index 4f155a63d..b66ea50ef 100644 --- a/admin/src/Model/Components_admin_viewsModel.php +++ b/admin/src/Model/Components_admin_viewsModel.php @@ -330,12 +330,13 @@ class Components_admin_viewsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_admin_viewsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_admin_views')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_admin_views'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_configModel.php b/admin/src/Model/Components_configModel.php index 1bfaf1438..fe62bb952 100644 --- a/admin/src/Model/Components_configModel.php +++ b/admin/src/Model/Components_configModel.php @@ -330,12 +330,13 @@ class Components_configModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_configModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_config')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_config'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_custom_admin_menusModel.php b/admin/src/Model/Components_custom_admin_menusModel.php index dd7bbce60..6c23b9118 100644 --- a/admin/src/Model/Components_custom_admin_menusModel.php +++ b/admin/src/Model/Components_custom_admin_menusModel.php @@ -330,12 +330,13 @@ class Components_custom_admin_menusModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_custom_admin_menusModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_custom_admin_menus')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_custom_admin_menus'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_custom_admin_viewsModel.php b/admin/src/Model/Components_custom_admin_viewsModel.php index 2c8e6023e..f123da109 100644 --- a/admin/src/Model/Components_custom_admin_viewsModel.php +++ b/admin/src/Model/Components_custom_admin_viewsModel.php @@ -330,12 +330,13 @@ class Components_custom_admin_viewsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_custom_admin_viewsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_custom_admin_views')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_custom_admin_views'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_dashboardModel.php b/admin/src/Model/Components_dashboardModel.php index 0a6095bff..c8e589476 100644 --- a/admin/src/Model/Components_dashboardModel.php +++ b/admin/src/Model/Components_dashboardModel.php @@ -330,12 +330,13 @@ class Components_dashboardModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_dashboardModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_dashboard')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_dashboard'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_files_foldersModel.php b/admin/src/Model/Components_files_foldersModel.php index 8b2cedb99..dbcbf7677 100644 --- a/admin/src/Model/Components_files_foldersModel.php +++ b/admin/src/Model/Components_files_foldersModel.php @@ -330,12 +330,13 @@ class Components_files_foldersModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_files_foldersModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_files_folders')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_files_folders'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_modulesModel.php b/admin/src/Model/Components_modulesModel.php index a37b5235f..4eeb280fc 100644 --- a/admin/src/Model/Components_modulesModel.php +++ b/admin/src/Model/Components_modulesModel.php @@ -330,12 +330,13 @@ class Components_modulesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_modulesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_modules')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_modules'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_mysql_tweaksModel.php b/admin/src/Model/Components_mysql_tweaksModel.php index 2cd645ce7..78f03d7b6 100644 --- a/admin/src/Model/Components_mysql_tweaksModel.php +++ b/admin/src/Model/Components_mysql_tweaksModel.php @@ -330,12 +330,13 @@ class Components_mysql_tweaksModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_mysql_tweaksModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_mysql_tweaks')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_mysql_tweaks'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_placeholdersModel.php b/admin/src/Model/Components_placeholdersModel.php index ca603e74a..b982911fd 100644 --- a/admin/src/Model/Components_placeholdersModel.php +++ b/admin/src/Model/Components_placeholdersModel.php @@ -330,12 +330,13 @@ class Components_placeholdersModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_placeholdersModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_placeholders')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_placeholders'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_pluginsModel.php b/admin/src/Model/Components_pluginsModel.php index 5e10841a0..c6cadca2d 100644 --- a/admin/src/Model/Components_pluginsModel.php +++ b/admin/src/Model/Components_pluginsModel.php @@ -330,12 +330,13 @@ class Components_pluginsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_pluginsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_plugins')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_plugins'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_routersModel.php b/admin/src/Model/Components_routersModel.php index 5cf55842d..b24122a82 100644 --- a/admin/src/Model/Components_routersModel.php +++ b/admin/src/Model/Components_routersModel.php @@ -474,12 +474,13 @@ class Components_routersModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -493,37 +494,35 @@ class Components_routersModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_router')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_router'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_site_viewsModel.php b/admin/src/Model/Components_site_viewsModel.php index 1adc2aafb..dba2d0a52 100644 --- a/admin/src/Model/Components_site_viewsModel.php +++ b/admin/src/Model/Components_site_viewsModel.php @@ -330,12 +330,13 @@ class Components_site_viewsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_site_viewsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_site_views')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_site_views'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Components_updatesModel.php b/admin/src/Model/Components_updatesModel.php index 9b7d1eb24..5c47ace45 100644 --- a/admin/src/Model/Components_updatesModel.php +++ b/admin/src/Model/Components_updatesModel.php @@ -330,12 +330,13 @@ class Components_updatesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Components_updatesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_component_updates')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_component_updates'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Custom_admin_viewsModel.php b/admin/src/Model/Custom_admin_viewsModel.php index 53cba2ccb..3f8c2e623 100644 --- a/admin/src/Model/Custom_admin_viewsModel.php +++ b/admin/src/Model/Custom_admin_viewsModel.php @@ -545,12 +545,13 @@ class Custom_admin_viewsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -564,37 +565,35 @@ class Custom_admin_viewsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_custom_admin_view')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_custom_admin_view'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Custom_codesModel.php b/admin/src/Model/Custom_codesModel.php index bb91182a7..ab54bb018 100644 --- a/admin/src/Model/Custom_codesModel.php +++ b/admin/src/Model/Custom_codesModel.php @@ -528,12 +528,13 @@ class Custom_codesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -547,37 +548,35 @@ class Custom_codesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_custom_code')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_custom_code'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Dynamic_getsModel.php b/admin/src/Model/Dynamic_getsModel.php index ca837aec0..5ca690834 100644 --- a/admin/src/Model/Dynamic_getsModel.php +++ b/admin/src/Model/Dynamic_getsModel.php @@ -544,12 +544,13 @@ class Dynamic_getsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -563,37 +564,35 @@ class Dynamic_getsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_dynamic_get')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_dynamic_get'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/FieldsModel.php b/admin/src/Model/FieldsModel.php index 25d33b844..76a436baf 100644 --- a/admin/src/Model/FieldsModel.php +++ b/admin/src/Model/FieldsModel.php @@ -763,12 +763,13 @@ class FieldsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -782,37 +783,35 @@ class FieldsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_field')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_field'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/FieldtypesModel.php b/admin/src/Model/FieldtypesModel.php index 70489b86c..d12b36d60 100644 --- a/admin/src/Model/FieldtypesModel.php +++ b/admin/src/Model/FieldtypesModel.php @@ -435,12 +435,13 @@ class FieldtypesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -454,37 +455,35 @@ class FieldtypesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_fieldtype')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_fieldtype'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Help_documentsModel.php b/admin/src/Model/Help_documentsModel.php index 1bd26e67f..48bff2130 100644 --- a/admin/src/Model/Help_documentsModel.php +++ b/admin/src/Model/Help_documentsModel.php @@ -480,12 +480,13 @@ class Help_documentsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -499,37 +500,35 @@ class Help_documentsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_help_document')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_help_document'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Initialization_selectionModel.php b/admin/src/Model/Initialization_selectionModel.php index 7a0ee45fb..59a8b6b4e 100644 --- a/admin/src/Model/Initialization_selectionModel.php +++ b/admin/src/Model/Initialization_selectionModel.php @@ -224,7 +224,7 @@ class Initialization_selectionModel extends ItemModel $query = $db->getQuery(true); // Get data - $data = $this->getPaths(); + $data = $this->getTagetAreaDetails(); if (empty($data)) { @@ -329,13 +329,13 @@ class Initialization_selectionModel extends ItemModel } /** - * Method to get the paths (repos) of this area. + * Method to get the target area details. * * @return array|null * @throws \Exception * @since 5.1.1 */ - protected function getPaths(): ?array + protected function getTagetAreaDetails(): ?array { if (($Power = $this->getTargetAreaPower()) !== null) { @@ -346,7 +346,7 @@ class Initialization_selectionModel extends ItemModel { return null; } - return ['repos' => $class->paths(), 'area_class' => $Power['area'], 'headers' => $class->getIndexHeader(), 'area_name' => $class->getArea()]; + return ['repos' => $class->paths(), 'area_class' => $Power['area'], 'headers' => $class->getIndexHeader(), 'area_name' => $class->getArea(), 'list_view' => $class->getListViewCodeName()]; } catch (\Exception $e) { diff --git a/admin/src/Model/Joomla_componentsModel.php b/admin/src/Model/Joomla_componentsModel.php index 06f678f2a..79a729871 100644 --- a/admin/src/Model/Joomla_componentsModel.php +++ b/admin/src/Model/Joomla_componentsModel.php @@ -685,12 +685,13 @@ class Joomla_componentsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -704,37 +705,35 @@ class Joomla_componentsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_component')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_component'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Joomla_moduleModel.php b/admin/src/Model/Joomla_moduleModel.php index 89c2a15dd..cd463d5a0 100644 --- a/admin/src/Model/Joomla_moduleModel.php +++ b/admin/src/Model/Joomla_moduleModel.php @@ -63,7 +63,8 @@ class Joomla_moduleModel extends AdminModel 'description', 'libraries', 'note_libraries_options', - 'note_add_php_language_string' + 'note_add_php_language_string', + 'add_default_header' ), 'right' => array( 'snippet', @@ -71,6 +72,7 @@ class Joomla_moduleModel extends AdminModel 'note_snippet_usage' ), 'fullwidth' => array( + 'default_header', 'default', 'note_linked_to_notice', 'not_required' @@ -99,6 +101,19 @@ class Joomla_moduleModel extends AdminModel 'php_method_uninstall' ) ), + 'dynamic_integration' => array( + 'left' => array( + 'add_update_server', + 'update_server_url', + 'update_server_target', + 'note_update_server_note_ftp', + 'note_update_server_note_zip', + 'note_update_server_note_other', + 'update_server', + 'add_sales_server', + 'sales_server' + ) + ), 'readme' => array( 'left' => array( 'addreadme', @@ -113,27 +128,14 @@ class Joomla_moduleModel extends AdminModel 'sql_uninstall' ) ), - 'dynamic_integration' => array( - 'left' => array( - 'add_update_server', - 'update_server_url', - 'update_server_target', - 'note_update_server_note_ftp', - 'note_update_server_note_zip', - 'note_update_server_note_other', - 'update_server', - 'add_sales_server', - 'sales_server' - ) - ), 'code' => array( 'left' => array( - 'custom_get' + 'note_layout_data', + 'layout_data' ), 'right' => array( - 'note_mod_file_options' - ), - 'fullwidth' => array( + 'custom_get', + 'note_mod_file_options', 'mod_code' ) ), @@ -299,24 +301,36 @@ class Joomla_moduleModel extends AdminModel $item->default = base64_decode($item->default); } + if (!empty($item->default_header)) + { + // base64 Decode default_header. + $item->default_header = base64_decode($item->default_header); + } + + if (!empty($item->php_preflight_install)) + { + // base64 Decode php_preflight_install. + $item->php_preflight_install = base64_decode($item->php_preflight_install); + } + if (!empty($item->php_preflight_update)) { // base64 Decode php_preflight_update. $item->php_preflight_update = base64_decode($item->php_preflight_update); } + if (!empty($item->layout_data)) + { + // base64 Decode layout_data. + $item->layout_data = base64_decode($item->layout_data); + } + if (!empty($item->php_preflight_uninstall)) { // base64 Decode php_preflight_uninstall. $item->php_preflight_uninstall = base64_decode($item->php_preflight_uninstall); } - if (!empty($item->mod_code)) - { - // base64 Decode mod_code. - $item->mod_code = base64_decode($item->mod_code); - } - if (!empty($item->php_postflight_install)) { // base64 Decode php_postflight_install. @@ -329,54 +343,54 @@ class Joomla_moduleModel extends AdminModel $item->php_postflight_update = base64_decode($item->php_postflight_update); } + if (!empty($item->mod_code)) + { + // base64 Decode mod_code. + $item->mod_code = base64_decode($item->mod_code); + } + if (!empty($item->php_method_uninstall)) { // base64 Decode php_method_uninstall. $item->php_method_uninstall = base64_decode($item->php_method_uninstall); } - if (!empty($item->class_helper_header)) - { - // base64 Decode class_helper_header. - $item->class_helper_header = base64_decode($item->class_helper_header); - } - if (!empty($item->sql)) { // base64 Decode sql. $item->sql = base64_decode($item->sql); } - if (!empty($item->class_helper_code)) - { - // base64 Decode class_helper_code. - $item->class_helper_code = base64_decode($item->class_helper_code); - } - if (!empty($item->sql_uninstall)) { // base64 Decode sql_uninstall. $item->sql_uninstall = base64_decode($item->sql_uninstall); } + if (!empty($item->class_helper_header)) + { + // base64 Decode class_helper_header. + $item->class_helper_header = base64_decode($item->class_helper_header); + } + if (!empty($item->readme)) { // base64 Decode readme. $item->readme = base64_decode($item->readme); } + if (!empty($item->class_helper_code)) + { + // base64 Decode class_helper_code. + $item->class_helper_code = base64_decode($item->class_helper_code); + } + if (!empty($item->php_script_construct)) { // base64 Decode php_script_construct. $item->php_script_construct = base64_decode($item->php_script_construct); } - if (!empty($item->php_preflight_install)) - { - // base64 Decode php_preflight_install. - $item->php_preflight_install = base64_decode($item->php_preflight_install); - } - if (!empty($item->libraries)) { // Convert the libraries field to an array. @@ -1342,24 +1356,36 @@ class Joomla_moduleModel extends AdminModel $data['default'] = base64_encode($data['default']); } + // Set the default_header string to base64 string. + if (isset($data['default_header'])) + { + $data['default_header'] = base64_encode($data['default_header']); + } + + // Set the php_preflight_install string to base64 string. + if (isset($data['php_preflight_install'])) + { + $data['php_preflight_install'] = base64_encode($data['php_preflight_install']); + } + // Set the php_preflight_update string to base64 string. if (isset($data['php_preflight_update'])) { $data['php_preflight_update'] = base64_encode($data['php_preflight_update']); } + // Set the layout_data string to base64 string. + if (isset($data['layout_data'])) + { + $data['layout_data'] = base64_encode($data['layout_data']); + } + // Set the php_preflight_uninstall string to base64 string. if (isset($data['php_preflight_uninstall'])) { $data['php_preflight_uninstall'] = base64_encode($data['php_preflight_uninstall']); } - // Set the mod_code string to base64 string. - if (isset($data['mod_code'])) - { - $data['mod_code'] = base64_encode($data['mod_code']); - } - // Set the php_postflight_install string to base64 string. if (isset($data['php_postflight_install'])) { @@ -1372,54 +1398,54 @@ class Joomla_moduleModel extends AdminModel $data['php_postflight_update'] = base64_encode($data['php_postflight_update']); } + // Set the mod_code string to base64 string. + if (isset($data['mod_code'])) + { + $data['mod_code'] = base64_encode($data['mod_code']); + } + // Set the php_method_uninstall string to base64 string. if (isset($data['php_method_uninstall'])) { $data['php_method_uninstall'] = base64_encode($data['php_method_uninstall']); } - // Set the class_helper_header string to base64 string. - if (isset($data['class_helper_header'])) - { - $data['class_helper_header'] = base64_encode($data['class_helper_header']); - } - // Set the sql string to base64 string. if (isset($data['sql'])) { $data['sql'] = base64_encode($data['sql']); } - // Set the class_helper_code string to base64 string. - if (isset($data['class_helper_code'])) - { - $data['class_helper_code'] = base64_encode($data['class_helper_code']); - } - // Set the sql_uninstall string to base64 string. if (isset($data['sql_uninstall'])) { $data['sql_uninstall'] = base64_encode($data['sql_uninstall']); } + // Set the class_helper_header string to base64 string. + if (isset($data['class_helper_header'])) + { + $data['class_helper_header'] = base64_encode($data['class_helper_header']); + } + // Set the readme string to base64 string. if (isset($data['readme'])) { $data['readme'] = base64_encode($data['readme']); } + // Set the class_helper_code string to base64 string. + if (isset($data['class_helper_code'])) + { + $data['class_helper_code'] = base64_encode($data['class_helper_code']); + } + // Set the php_script_construct string to base64 string. if (isset($data['php_script_construct'])) { $data['php_script_construct'] = base64_encode($data['php_script_construct']); } - // Set the php_preflight_install string to base64 string. - if (isset($data['php_preflight_install'])) - { - $data['php_preflight_install'] = base64_encode($data['php_preflight_install']); - } - // Set the Params Items to data if (isset($data['params']) && is_array($data['params'])) { diff --git a/admin/src/Model/Joomla_modulesModel.php b/admin/src/Model/Joomla_modulesModel.php index 81c176d74..7180ff5c9 100644 --- a/admin/src/Model/Joomla_modulesModel.php +++ b/admin/src/Model/Joomla_modulesModel.php @@ -419,12 +419,13 @@ class Joomla_modulesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -438,37 +439,35 @@ class Joomla_modulesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_module')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_module'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Joomla_modules_files_folders_urlsModel.php b/admin/src/Model/Joomla_modules_files_folders_urlsModel.php index 102c47133..404f5fd99 100644 --- a/admin/src/Model/Joomla_modules_files_folders_urlsModel.php +++ b/admin/src/Model/Joomla_modules_files_folders_urlsModel.php @@ -330,12 +330,13 @@ class Joomla_modules_files_folders_urlsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Joomla_modules_files_folders_urlsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_module_files_folders_urls')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_module_files_folders_urls'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Joomla_modules_updatesModel.php b/admin/src/Model/Joomla_modules_updatesModel.php index 4c16d7e56..569fa8c1b 100644 --- a/admin/src/Model/Joomla_modules_updatesModel.php +++ b/admin/src/Model/Joomla_modules_updatesModel.php @@ -330,12 +330,13 @@ class Joomla_modules_updatesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Joomla_modules_updatesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_module_updates')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_module_updates'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Joomla_plugin_groupsModel.php b/admin/src/Model/Joomla_plugin_groupsModel.php index b3947e549..f6564b3fd 100644 --- a/admin/src/Model/Joomla_plugin_groupsModel.php +++ b/admin/src/Model/Joomla_plugin_groupsModel.php @@ -358,12 +358,13 @@ class Joomla_plugin_groupsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -377,37 +378,35 @@ class Joomla_plugin_groupsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_plugin_group')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_plugin_group'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Joomla_pluginsModel.php b/admin/src/Model/Joomla_pluginsModel.php index 973a6dc3e..70cf371b5 100644 --- a/admin/src/Model/Joomla_pluginsModel.php +++ b/admin/src/Model/Joomla_pluginsModel.php @@ -410,12 +410,13 @@ class Joomla_pluginsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -429,37 +430,35 @@ class Joomla_pluginsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_plugin')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_plugin'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Joomla_plugins_files_folders_urlsModel.php b/admin/src/Model/Joomla_plugins_files_folders_urlsModel.php index 3d2a241e2..e37dc30e3 100644 --- a/admin/src/Model/Joomla_plugins_files_folders_urlsModel.php +++ b/admin/src/Model/Joomla_plugins_files_folders_urlsModel.php @@ -330,12 +330,13 @@ class Joomla_plugins_files_folders_urlsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Joomla_plugins_files_folders_urlsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_plugin_files_folders_urls')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_plugin_files_folders_urls'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Joomla_plugins_updatesModel.php b/admin/src/Model/Joomla_plugins_updatesModel.php index 2a52b5a28..db4817687 100644 --- a/admin/src/Model/Joomla_plugins_updatesModel.php +++ b/admin/src/Model/Joomla_plugins_updatesModel.php @@ -330,12 +330,13 @@ class Joomla_plugins_updatesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Joomla_plugins_updatesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_plugin_updates')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_plugin_updates'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Joomla_powersModel.php b/admin/src/Model/Joomla_powersModel.php index 3910dc1a1..c999aca0f 100644 --- a/admin/src/Model/Joomla_powersModel.php +++ b/admin/src/Model/Joomla_powersModel.php @@ -352,12 +352,13 @@ class Joomla_powersModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -371,37 +372,35 @@ class Joomla_powersModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_joomla_power')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_joomla_power'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Language_translationsModel.php b/admin/src/Model/Language_translationsModel.php index 0899bf2ef..3e68fd568 100644 --- a/admin/src/Model/Language_translationsModel.php +++ b/admin/src/Model/Language_translationsModel.php @@ -662,12 +662,13 @@ class Language_translationsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -681,37 +682,35 @@ class Language_translationsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_language_translation')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_language_translation'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/LanguagesModel.php b/admin/src/Model/LanguagesModel.php index 77ee88fdc..5f30e6fff 100644 --- a/admin/src/Model/LanguagesModel.php +++ b/admin/src/Model/LanguagesModel.php @@ -484,12 +484,13 @@ class LanguagesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -503,37 +504,35 @@ class LanguagesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_language')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_language'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/LayoutsModel.php b/admin/src/Model/LayoutsModel.php index 74389324e..4548b79f8 100644 --- a/admin/src/Model/LayoutsModel.php +++ b/admin/src/Model/LayoutsModel.php @@ -449,12 +449,13 @@ class LayoutsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -468,37 +469,35 @@ class LayoutsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_layout')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_layout'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/LibrariesModel.php b/admin/src/Model/LibrariesModel.php index b950b178b..30f58eed4 100644 --- a/admin/src/Model/LibrariesModel.php +++ b/admin/src/Model/LibrariesModel.php @@ -486,12 +486,13 @@ class LibrariesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -505,37 +506,35 @@ class LibrariesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_library')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_library'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Libraries_configModel.php b/admin/src/Model/Libraries_configModel.php index b7136e9ea..c97711233 100644 --- a/admin/src/Model/Libraries_configModel.php +++ b/admin/src/Model/Libraries_configModel.php @@ -330,12 +330,13 @@ class Libraries_configModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Libraries_configModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_library_config')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_library_config'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Libraries_files_folders_urlsModel.php b/admin/src/Model/Libraries_files_folders_urlsModel.php index 99d79895c..79918181d 100644 --- a/admin/src/Model/Libraries_files_folders_urlsModel.php +++ b/admin/src/Model/Libraries_files_folders_urlsModel.php @@ -330,12 +330,13 @@ class Libraries_files_folders_urlsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -349,37 +350,35 @@ class Libraries_files_folders_urlsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_library_files_folders_urls')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_library_files_folders_urls'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/PlaceholdersModel.php b/admin/src/Model/PlaceholdersModel.php index a670a8ac3..9ff22a1f7 100644 --- a/admin/src/Model/PlaceholdersModel.php +++ b/admin/src/Model/PlaceholdersModel.php @@ -361,12 +361,13 @@ class PlaceholdersModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -380,37 +381,35 @@ class PlaceholdersModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_placeholder')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_placeholder'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/PowersModel.php b/admin/src/Model/PowersModel.php index 34ba0ed74..02365633e 100644 --- a/admin/src/Model/PowersModel.php +++ b/admin/src/Model/PowersModel.php @@ -640,12 +640,13 @@ class PowersModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -659,37 +660,35 @@ class PowersModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_power')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_power'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/RepositoriesModel.php b/admin/src/Model/RepositoriesModel.php index d476116d1..012cf3efb 100644 --- a/admin/src/Model/RepositoriesModel.php +++ b/admin/src/Model/RepositoriesModel.php @@ -615,12 +615,13 @@ class RepositoriesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -634,37 +635,35 @@ class RepositoriesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_repository')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_repository'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/RepositoryModel.php b/admin/src/Model/RepositoryModel.php index e9d9f3105..6fa5d15e5 100644 --- a/admin/src/Model/RepositoryModel.php +++ b/admin/src/Model/RepositoryModel.php @@ -907,6 +907,14 @@ class RepositoryModel extends AdminModel $data['metadata'] = (string) $metadata; } + // Set the GitHub URL + if (!empty($data['type']) && $data['type'] == 2) + { + // set GitHub URL + // Just for users to see github URL in the list view, in the code we have hardcoded the api url for github. + // so this is not what is used in the repository package API + $data['base'] = 'https://github.com/'; + } // Set the GUID if empty or not valid if (empty($data['guid']) && $data['id'] > 0) diff --git a/admin/src/Model/ServersModel.php b/admin/src/Model/ServersModel.php index 3ba3f9194..d9b01ffa9 100644 --- a/admin/src/Model/ServersModel.php +++ b/admin/src/Model/ServersModel.php @@ -428,12 +428,13 @@ class ServersModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -447,37 +448,35 @@ class ServersModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_server')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_server'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Site_viewsModel.php b/admin/src/Model/Site_viewsModel.php index 34e959e30..94cffa12c 100644 --- a/admin/src/Model/Site_viewsModel.php +++ b/admin/src/Model/Site_viewsModel.php @@ -554,12 +554,13 @@ class Site_viewsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -573,37 +574,35 @@ class Site_viewsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_site_view')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_site_view'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Snippet_typesModel.php b/admin/src/Model/Snippet_typesModel.php index 38d35371d..8925cefbf 100644 --- a/admin/src/Model/Snippet_typesModel.php +++ b/admin/src/Model/Snippet_typesModel.php @@ -359,12 +359,13 @@ class Snippet_typesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -378,37 +379,35 @@ class Snippet_typesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_snippet_type')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_snippet_type'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/SnippetsModel.php b/admin/src/Model/SnippetsModel.php index 52f4ebb66..a25ca4a4d 100644 --- a/admin/src/Model/SnippetsModel.php +++ b/admin/src/Model/SnippetsModel.php @@ -428,12 +428,13 @@ class SnippetsModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -447,37 +448,35 @@ class SnippetsModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_snippet')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_snippet'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/TemplatesModel.php b/admin/src/Model/TemplatesModel.php index d22b857f0..b292ea01e 100644 --- a/admin/src/Model/TemplatesModel.php +++ b/admin/src/Model/TemplatesModel.php @@ -449,12 +449,13 @@ class TemplatesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -468,37 +469,35 @@ class TemplatesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_template')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_template'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/Model/Validation_rulesModel.php b/admin/src/Model/Validation_rulesModel.php index 019318b12..d688d1a61 100644 --- a/admin/src/Model/Validation_rulesModel.php +++ b/admin/src/Model/Validation_rulesModel.php @@ -359,12 +359,13 @@ class Validation_rulesModel extends ListModel } /** - * Build an SQL query to checkin all items left checked out longer then a set time. + * Build an SQL query to check in all items left checked out longer then a set time. * - * @return bool + * @return void + * @throws \DateMalformedStringException * @since 3.2.0 */ - protected function checkInNow(): bool + protected function checkInNow(): void { // Get set check in time $time = ComponentHelper::getParams('com_componentbuilder')->get('check_in'); @@ -378,37 +379,35 @@ class Validation_rulesModel extends ListModel $query->select('*'); $query->from($db->quoteName('#__componentbuilder_validation_rule')); // Only select items that are checked out. - $query->where($db->quoteName('checked_out') . '!=0'); + $query->where(('checked_out') . ' >= 0'); $db->setQuery($query, 0, 1); $db->execute(); if ($db->getNumRows()) { - // Get Yesterdays date. + // Get target date in the past. $date = Factory::getDate()->modify($time)->toSql(); // Reset query. $query = $db->getQuery(true); // Fields to update. - $fields = array( - $db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'', - $db->quoteName('checked_out') . '=0' - ); + $fields = [ + $db->quoteName('checked_out_time') . ' = NULL', + $db->quoteName('checked_out') . ' = NULL' + ]; // Conditions for which records should be updated. - $conditions = array( - $db->quoteName('checked_out') . '!=0', - $db->quoteName('checked_out_time') . '<\''.$date.'\'' - ); + $conditions = [ + $db->quoteName('checked_out') . ' = 0 OR ' . $db->quoteName('checked_out') . ' > 0', + $db->quoteName('checked_out_time') . ' < ' . $db->quote($date) + ]; // Check table. $query->update($db->quoteName('#__componentbuilder_validation_rule'))->set($fields)->where($conditions); $db->setQuery($query); - return $db->execute(); + $db->execute(); } } - - return false; } } diff --git a/admin/src/View/Compiler/HtmlView.php b/admin/src/View/Compiler/HtmlView.php index 4b1e01223..71c21b414 100644 --- a/admin/src/View/Compiler/HtmlView.php +++ b/admin/src/View/Compiler/HtmlView.php @@ -590,7 +590,7 @@ class HtmlView extends BaseHtmlView $HeaderCheck = new HeaderCheck(); // Add View JavaScript File - Html::_('script', "administrator/components/com_componentbuilder/assets/js/compiler.js", ['version' => 'auto']); + Html::_('script', 'administrator/components/com_componentbuilder/assets/js/compiler.js', ['version' => 'auto']); // Load uikit options. $uikit = $this->params->get('uikit_load'); diff --git a/admin/src/View/Initialization_selection/HtmlView.php b/admin/src/View/Initialization_selection/HtmlView.php index 0daaf76af..3ba992d17 100644 --- a/admin/src/View/Initialization_selection/HtmlView.php +++ b/admin/src/View/Initialization_selection/HtmlView.php @@ -97,19 +97,19 @@ class HtmlView extends BaseHtmlView $HeaderCheck = new HeaderCheck(); // always load these files. - Html::_('stylesheet', "media/com_componentbuilder/uikit-v3/css/uikit.min.css", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/uikit-v3/js/uikit.min.js", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/uikit-v3/js/uikit-icons.min.js", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/uikit-v3/js/Uploader.min.js", ['version' => 'auto']); + Html::_('stylesheet', 'media/com_componentbuilder/uikit-v3/css/uikit.min.css', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/uikit-v3/js/uikit.min.js', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/uikit-v3/js/uikit-icons.min.js', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/uikit-v3/js/Uploader.min.js', ['version' => 'auto']); // always load these files. - Html::_('stylesheet', "media/com_componentbuilder/datatable-bootstrap5/css/datatables.min.css", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/datatable-bootstrap5/js/pdfmake.min.js", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/datatable-bootstrap5/js/vfs_fonts.js", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/datatable-bootstrap5/js/datatables.min.js", ['version' => 'auto']); + Html::_('stylesheet', 'media/com_componentbuilder/datatable-bootstrap5/css/datatables.min.css', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/datatable-bootstrap5/js/pdfmake.min.js', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/datatable-bootstrap5/js/vfs_fonts.js', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/datatable-bootstrap5/js/datatables.min.js', ['version' => 'auto']); // Add View JavaScript File - Html::_('script', "administrator/components/com_componentbuilder/assets/js/initialization_selection.js", ['version' => 'auto']); + Html::_('script', 'administrator/components/com_componentbuilder/assets/js/initialization_selection.js', ['version' => 'auto']); // Load uikit options. $uikit = $this->params->get('uikit_load'); diff --git a/admin/src/View/Search/HtmlView.php b/admin/src/View/Search/HtmlView.php index de9b1f677..25b0ecbfe 100644 --- a/admin/src/View/Search/HtmlView.php +++ b/admin/src/View/Search/HtmlView.php @@ -342,13 +342,13 @@ class HtmlView extends BaseHtmlView $HeaderCheck = new HeaderCheck(); // always load these files. - Html::_('stylesheet', "media/com_componentbuilder/datatable/css/datatables.min.css", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/datatable/js/pdfmake.min.js", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/datatable/js/vfs_fonts.js", ['version' => 'auto']); - Html::_('script', "media/com_componentbuilder/datatable/js/datatables.min.js", ['version' => 'auto']); + Html::_('stylesheet', 'media/com_componentbuilder/datatable/css/datatables.min.css', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/datatable/js/pdfmake.min.js', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/datatable/js/vfs_fonts.js', ['version' => 'auto']); + Html::_('script', 'media/com_componentbuilder/datatable/js/datatables.min.js', ['version' => 'auto']); // Add View JavaScript File - Html::_('script', "administrator/components/com_componentbuilder/assets/js/search.js", ['version' => 'auto']); + Html::_('script', 'administrator/components/com_componentbuilder/assets/js/search.js', ['version' => 'auto']); // Load uikit options. $uikit = $this->params->get('uikit_load'); diff --git a/admin/tmpl/compiler/default.php b/admin/tmpl/compiler/default.php index 49363d0de..2bfa5a167 100644 --- a/admin/tmpl/compiler/default.php +++ b/admin/tmpl/compiler/default.php @@ -194,7 +194,7 @@ document.addEventListener('DOMContentLoaded', function() { ' . PHP_EOL + ); + + // return the default content for the model default area + return $this->placeholder->update( + $default, + $this->contentone->allActive() + ); + } + + /** + * Get the updated placeholder default header template content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return string The updated placeholder content. + * @since 5.1.2 + */ + public function header(object $module): string + { + // first add the header + $add_default_header = (int) ($module->add_default_header ?? 0); + $default = $add_default_header === 1 ? trim((string) ($module->default_header ?? '')) : ''; + + if (empty($default)) + { + return ''; + } + + // return the header for the model default area + return PHP_EOL . PHP_EOL . $this->placeholder->update($default, $this->contentone->allActive()); + } + + /** + * Get the updated placeholder extra template content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return void + * @since 5.1.2 + */ + public function extra(object $module): void + { + // Build the data key and fetch template data once + $data = $this->templatedata->get($module->key . '.' . $module->code_name); + + // Nothing to do if there's no data + if (!is_array($data) || $data === []) + { + return; + } + + // Cache these to avoid repeated calls + $activePlaceholders = $this->contentone->allActive(); + + // --- HEADER (text) --- + $header = (string) ($this->header->get('module.extra.template.header', $module->class_name) ?? ''); + if ($header !== '') + { + $header = PHP_EOL . PHP_EOL . $this->placeholder->update($header, $activePlaceholders); + } + + foreach ($data as $template => $item) + { + $target = StringHelper::safe("MODDEFAULT_HEADER_{$template}", 'U'); + $key = $module->key . '|' . $target; + $this->contentmulti->set($key, $header); + + // --- HEADER CODE (php_view) --- + $phpView = trim((string) ($item['php_view'] ?? '')); + $headerCode = ($phpView === '') + ? '' + : PHP_EOL . $this->placeholder->update($phpView, $activePlaceholders); + + $target = StringHelper::safe("MODDEFAULT_HEADER_CODE_{$template}", 'U'); + $key = $module->key . '|' . $target; + $this->contentmulti->set($key, $headerCode); + + // --- BODY (html) --- + $html = (string) ($item['html'] ?? ''); + $body = ($html === '') + ? PHP_EOL + : PHP_EOL . $this->placeholder->update($html, $activePlaceholders); + + $target = StringHelper::safe("MODDEFAULT_{$template}", 'U'); + $key = $module->key . '|' . $target; + $this->contentmulti->set($key, $body); + } + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Module/index.html similarity index 100% rename from libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/index.html rename to libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Module/index.html diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Plugin/MainXML.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Plugin/MainXML.php index d6eb00919..a045e5574 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Plugin/MainXML.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFive/Plugin/MainXML.php @@ -435,8 +435,9 @@ final class MainXML implements MainXMLInterface if ($addComponentPath) { - $xml .= PHP_EOL . Indent::_(3) . 'addruleprefix="' . $this->config->namespace_prefix . '\Component\\' . $this->contentone->get('ComponentNamespace') . '\Administrator\Rule"'; - $xml .= PHP_EOL . Indent::_(3) . 'addfieldprefix="' . $this->config->namespace_prefix . '\Component\\' . $this->contentone->get('ComponentNamespace') . '\Administrator\Field">'; + $namespace = $this->config->namespace_prefix . '\\Component\\' . $this->contentone->get('ComponentNamespace') . '\\Administrator'; + $xml .= PHP_EOL . Indent::_(3) . "addruleprefix=\"{$namespace}\\Rule\""; + $xml .= PHP_EOL . Indent::_(3) . "addfieldprefix=\"{$namespace}\\Field\">"; $xml .= PHP_EOL . Indent::_(1) . '>'; } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Model/CheckInNow.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Model/CheckInNow.php new file mode 100644 index 000000000..9ad76ef01 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Model/CheckInNow.php @@ -0,0 +1,109 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Model; + + +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model\CheckInNowInterface; + + +/** + * Check In Now Method for Joomla 4 + * + * @since 5.1.2 + */ +final class CheckInNow implements CheckInNowInterface +{ + /** + * Get the generated call snippet that invokes the check-in method. + * + * @return string The code that calls the generated method. + * @since 5.1.2 + */ + public function getCall(): string + { + $call = PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Check in items"; + $call .= PHP_EOL . Indent::_(2) . "\$this->checkInNow();" . PHP_EOL; + + return $call; + } + + /** + * Build the full `checkInNow()` method code for the given view/table. + * + * @param string $view The view/table suffix (e.g. 'items'). + * @param string $component The component name (without 'com_'). + * + * @return string The full method code as a string. + * @since 5.1.2 + */ + public function getMethod($view, $component): string + { + $checkin = PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; + $checkin .= PHP_EOL . Indent::_(1) . " * Build an SQL query to check in all items left checked out longer then a set time."; + $checkin .= PHP_EOL . Indent::_(1) . " *"; + $checkin .= PHP_EOL . Indent::_(1) . " * @return void"; + $checkin .= PHP_EOL . Indent::_(1) . " * @throws \DateMalformedStringException"; + $checkin .= PHP_EOL . Indent::_(1) . " * @since 3.2.0"; + $checkin .= PHP_EOL . Indent::_(1) . " */"; + $checkin .= PHP_EOL . Indent::_(1) . "protected function checkInNow(): void"; + $checkin .= PHP_EOL . Indent::_(1) . "{"; + $checkin .= PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Get set check in time"; + $checkin .= PHP_EOL . Indent::_(2) . "\$time = Joomla__"."_aeb8e463_291f_4445_9ac4_34b637c12dbd___Power::getParams('com_" . $component . "')->get('check_in');"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(2) . "if (\$time)"; + $checkin .= PHP_EOL . Indent::_(2) . "{"; + $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_(__LINE__,__CLASS__) . " Get a db connection."; + $checkin .= PHP_EOL . Indent::_(3) . "\$db = \$this->getDatabase();"; + $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_(__Line__, __Class__) . " Reset query."; + $checkin .= PHP_EOL . Indent::_(3) . "\$query = \$db->getQuery(true);"; + $checkin .= PHP_EOL . Indent::_(3) . "\$query->select('*');"; + $checkin .= PHP_EOL . Indent::_(3) . "\$query->from(\$db->quoteName('#__" . $component . "_" . $view . "'));"; + $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_(__Line__, __Class__) . " Only select items that are checked out."; + + $checkin .= PHP_EOL . Indent::_(3) . "\$query->where($db->quoteName('checked_out') . ' >= 0');"; + + Indent::_(3) . "//" . Line::_(__Line__, __Class__) . " Query only to see if we have a rows"; + $checkin .= PHP_EOL . Indent::_(3) . "\$db->setQuery(\$query, 0, 1);"; + $checkin .= PHP_EOL . Indent::_(3) . "\$db->execute();"; + $checkin .= PHP_EOL . Indent::_(3) . "if (\$db->getNumRows())"; + $checkin .= PHP_EOL . Indent::_(3) . "{"; + $checkin .= PHP_EOL . Indent::_(4) . "//" . Line::_(__Line__, __Class__) . " Get target date in the past."; + $checkin .= PHP_EOL . Indent::_(4) . "\$date = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDate()->modify(\$time)->toSql();"; + $checkin .= PHP_EOL . Indent::_(4) . "//" . Line::_(__Line__, __Class__) . " Reset query."; + $checkin .= PHP_EOL . Indent::_(4) . "\$query = \$db->getQuery(true);"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_(__LINE__,__CLASS__) . " Fields to update."; + $checkin .= PHP_EOL . Indent::_(4) . "\$fields = ["; + + $checkin .= PHP_EOL . Indent::_(5) . "\$db->quoteName('checked_out_time') . ' = NULL',"; + $checkin .= PHP_EOL . Indent::_(5) . "\$db->quoteName('checked_out') . ' = NULL'"; + + $checkin .= PHP_EOL . Indent::_(4) . "];"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_(__LINE__,__CLASS__) . " Conditions for which records should be updated."; + $checkin .= PHP_EOL . Indent::_(4) . "\$conditions = ["; + + $checkin .= PHP_EOL . Indent::_(5) . "\$db->quoteName('checked_out') . ' = 0 OR ' . \$db->quoteName('checked_out') . ' > 0',"; + + $checkin .= PHP_EOL . Indent::_(5) . "\$db->quoteName('checked_out_time') . ' < ' . \$db->quote(\$date)"; + $checkin .= PHP_EOL . Indent::_(4) . "];"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_(__LINE__,__CLASS__) . " Check table."; + $checkin .= PHP_EOL . Indent::_(4) . "\$query->update(\$db->quoteName('#__" . $component . "_" . $view . "'))->set(\$fields)->where(\$conditions); "; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "\$db->setQuery(\$query);"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "\$db->execute();"; + $checkin .= PHP_EOL . Indent::_(3) . "}"; + $checkin .= PHP_EOL . Indent::_(2) . "}"; + $checkin .= PHP_EOL . Indent::_(1) . "}"; + + return $checkin; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Dispatcher.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Dispatcher.php new file mode 100644 index 000000000..314f644ef --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Dispatcher.php @@ -0,0 +1,170 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne as Builder; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\LibraryInterface as Library; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\DispatcherInterface; + + +/** + * Module Dispatcher Class for Joomla 4 + * + * @since 5.1.2 + */ +final class Dispatcher implements DispatcherInterface +{ + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var Builder + * @since 5.1.2 + */ + protected Builder $builder; + + /** + * The Library Class. + * + * @var Library + * @since 5.1.2 + */ + protected Library $library; + + /** + * The Namespace Prefix + * + * @var string + * @since 5.0.0 + */ + protected string $NamespacePrefix; + + /** + * Constructor. + * + * @param Placeholder $placeholder The Placeholder Class. + * @param Builder $builder The ContentOne Class. + * @param Library $library The Library Class. + * + * @since 5.1.2 + */ + public function __construct(Placeholder $placeholder, Builder $builder, Library $library) + { + $this->placeholder = $placeholder; + $this->builder = $builder; + $this->library = $library; + + // set some global values + $this->NamespacePrefix = $this->placeholder->get('NamespacePrefix'); + } + + /** + * Get the updated placeholder content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return string The updated placeholder content. + * @since 5.1.2 + */ + public function get(object $module): string + { + $dispatcher = []; + $dispatcher[] = "/**"; + $dispatcher[] = " *" . Line::_(__LINE__, __CLASS__) . " Dispatcher class for {$module->official_name}"; + $dispatcher[] = " *"; + $dispatcher[] = " * @since 5.3.0"; + $dispatcher[] = " */"; + + $library = $this->library->get($module); + + if (empty($module->layout_data) && empty($module->add_class_helper) && empty($module->custom_get) && empty($library)) + { + $dispatcher[] = "class Dispatcher extends AbstractModuleDispatcher {}"; + return implode(PHP_EOL, $dispatcher). PHP_EOL; + } + + if ($module->add_class_helper == 1 || $module->custom_get) + { + $dispatcher[] = "class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareInterface"; + $dispatcher[] = "{"; + $dispatcher[] = Indent::_(1) . "use HelperFactoryAwareTrait;"; + } + else + { + $dispatcher[] = "class Dispatcher extends AbstractModuleDispatcher"; + $dispatcher[] = "{"; + } + + $dispatcher[] = ""; + $dispatcher[] = Indent::_(1) . "/**"; + $dispatcher[] = Indent::_(1) . " *" . Line::_(__LINE__, __CLASS__) . " Returns the layout data."; + $dispatcher[] = Indent::_(1) . " *"; + $dispatcher[] = Indent::_(1) . " * @return array"; + $dispatcher[] = Indent::_(1) . " *"; + $dispatcher[] = Indent::_(1) . " * @since 5.3.0"; + $dispatcher[] = Indent::_(1) . " */"; + $dispatcher[] = Indent::_(1) . "protected function getLayoutData(): array"; + $dispatcher[] = Indent::_(1) . "{"; + $dispatcher[] = Indent::_(2) . "\$data = parent::getLayoutData();"; + $dispatcher[] = ""; + + if ($module->add_class_helper == 1) + { + $dispatcher[] = Indent::_(2) . "\$data['helper'] = \$this->getHelperFactory()->getHelper('{$module->class_helper_name}', \$data);"; + } + elseif ($module->add_class_helper == 2) + { + $dispatcher[] = Indent::_(2) . "\$data['helper'] = \\{$this->NamespacePrefix}\\Module\\{$module->namespace}\\{$module->target_client_namespace}\\Helper\\{$module->class_helper_name}::class;"; + } + + if ($module->custom_get) + { + $dispatcher[] = Indent::_(2) . "\$data['data'] = \$this->getHelperFactory()->getHelper('{$module->class_data_name}', \$data);"; + } + + // load the libraries + if (!empty($library)) + { + $dispatcher[] = ""; + $dispatcher[] = Indent::_(2) . $library; + } + + // load the custom code here + if (!empty($module->layout_data)) + { + $dispatcher[] = ""; + $dispatcher[] = $module->layout_data; + } + + $dispatcher[] = ""; + $dispatcher[] = Indent::_(2) . "return \$data;"; + $dispatcher[] = Indent::_(1) . "}"; + $dispatcher[] = "}"; + + return $this->placeholder->update( + implode(PHP_EOL, $dispatcher). PHP_EOL, + $this->builder->allActive() + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Helper.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Helper.php new file mode 100644 index 000000000..b7526e04e --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Helper.php @@ -0,0 +1,150 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\HelperInterface; + + +/** + * Module Helper Code Joomla 4 + * + * @since 5.1.2 + */ +final class Helper implements HelperInterface +{ + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * Constructor. + * + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentOne $contentone The ContentOne Class. + * + * @since 5.1.2 + */ + public function __construct(Placeholder $placeholder, ContentOne $contentone) + { + $this->placeholder = $placeholder; + $this->contentone = $contentone; + } + + /** + * Get Module Helper Class code + * + * @param object $module The module object + * + * @return string The helper class code + * @since 5.1.2 + */ + public function get(object $module): string + { + $type = trim((string) ($module->class_helper_type ?? 'class')); + $name = trim((string) ($module->class_helper_name ?? 'Helper')); + $body = (string) ($module->class_helper_code ?? ''); + $implements = ''; + + if ($this->usesDatabaseFeatures($body)) + { + $implements = ' implements DatabaseAwareInterface'; + + if (!str_contains($body, 'use DatabaseAwareTrait;')) + { + $body = Indent::_(1) . 'use DatabaseAwareTrait;' . PHP_EOL . PHP_EOL . $body; + } + } + + $code = PHP_EOL . $type . ' ' . $name . $implements . PHP_EOL . '{' . PHP_EOL . $body . PHP_EOL . '}' . PHP_EOL; + + return $this->placeholder->update($code, $this->contentone->allActive()); + } + + /** + * Get Module Helper Header code + * + * @param object $module The module object + * + * @return string The helper header code + * @since 5.1.2 + */ + public function header(object $module): string + { + $code = (string) trim($module->class_helper_header ?? ''); + $body = trim((string) ($module->class_helper_code ?? '')); + + if ($this->usesDatabaseFeatures($body)) + { + if ($code === '') + { + $code = 'use Joomla\\Database\\DatabaseAwareInterface;' . + PHP_EOL . 'use Joomla\\Database\\DatabaseAwareTrait;'; + } + else + { + if (!str_contains($code, '\\DatabaseAwareInterface;')) + { + $code .= PHP_EOL . 'use Joomla\\Database\\DatabaseAwareInterface;'; + } + + if (!str_contains($code, '\\DatabaseAwareTrait;')) + { + $code .= PHP_EOL . 'use Joomla\\Database\\DatabaseAwareTrait;'; + } + } + } + + if ($code === '') + { + return ''; + } + + return $this->placeholder->update( + PHP_EOL . $code, $this->contentone->allActive() + ); + } + + /** + * Determine if the helper body uses database features. + * + * @param string $body The helper class body. + * + * @return bool + * @since 5.1.2 + */ + protected function usesDatabaseFeatures(string $body): bool + { + if ($body === '') + { + return false; + } + + return str_contains($body, '$this->getDatabase(') + || str_contains($body, 'use DatabaseAwareTrait;'); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Library.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Library.php new file mode 100644 index 000000000..b1f8e52ae --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Library.php @@ -0,0 +1,154 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Builder\LibraryManager; +use VDM\Joomla\Componentbuilder\Compiler\Library\Document; +use VDM\Joomla\Componentbuilder\Compiler\Registry; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\LibraryInterface; + + +/** + * Module Library Joomla 4 + * + * @since 5.1.2 + */ +final class Library implements LibraryInterface +{ + /** + * The LibraryManager Class. + * + * @var LibraryManager + * @since 5.1.2 + */ + protected LibraryManager $librarymanager; + + /** + * The Document Class. + * + * @var Document + * @since 5.1.2 + */ + protected Document $document; + + /** + * The Registry Class. + * + * @var Registry + * @since 5.1.2 + */ + protected Registry $registry; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * Constructor. + * + * @param LibraryManager $librarymanager The LibraryManager Class. + * @param Document $document The Document Class. + * @param Registry $registry The Registry Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentOne $contentone The ContentOne Class. + * + * @since 5.1.2 + */ + public function __construct(LibraryManager $librarymanager, Document $document, + Registry $registry, Placeholder $placeholder, + ContentOne $contentone) + { + $this->librarymanager = $librarymanager; + $this->document = $document; + $this->registry = $registry; + $this->placeholder = $placeholder; + $this->contentone = $contentone; + } + + /** + * Get the module's library loading code. + * + * @param object $module The module object + * + * @return string The generated code to load libraries into the document. + * @since 5.1.2 + */ + public function get(object $module): string + { + $data = $this->librarymanager->get($module->key . '.' . $module->code_name); + + if ($data === null) + { + return ''; + } + + $code = '// ' . Line::_(__LINE__, __CLASS__) . ' get the document object' . PHP_EOL; + $code .= '$document = $this->app->getDocument();'; + + $found = false; + + foreach ($data as $id => $item) + { + $library = $this->registry->get("builder.libraries.{$id}"); + + if (!is_object($library)) + { + continue; + } + + if (!empty($library->document) && StringHelper::check($library->document)) + { + $code .= PHP_EOL . $library->document; + $found = true; + } + elseif (isset($library->how)) + { + $code .= $this->document->get($id); + $found = true; + } + } + + if (!$found) + { + return ''; + } + + // Normalize and inject placeholders + $lines = explode(PHP_EOL, $code); + $trimmed = array_map('trim', $lines); + $normalized = str_replace('$this->document->', '$document->', implode(PHP_EOL . Indent::_(2), $trimmed)); + + return $this->placeholder->update( + $this->placeholder->update_($normalized), + $this->contentone->allActive() + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/MainXML.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/MainXML.php new file mode 100644 index 000000000..a99bb7979 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/MainXML.php @@ -0,0 +1,570 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module; + + +use Joomla\Filesystem\Folder; +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Language; +use VDM\Joomla\Componentbuilder\Compiler\Language\Set; +use VDM\Joomla\Componentbuilder\Compiler\Language\Purge; +use VDM\Joomla\Componentbuilder\Compiler\Language\Translation; +use VDM\Joomla\Componentbuilder\Compiler\Language\Multilingual; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; +use VDM\Joomla\Componentbuilder\Compiler\Creator\FieldsetExtension; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\Languages; +use VDM\Joomla\Componentbuilder\Compiler\Builder\Multilingual as BuilderMultilingual; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Counter; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\File; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Interfaces\Architecture\Module\MainXMLInterface; + + +/** + * Joomla 4 Module Main XML Class + * + * @since 5.1.2 + */ +final class MainXML implements MainXMLInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Language Class. + * + * @var Language + * @since 5.1.2 + */ + protected Language $language; + + /** + * The Set Class. + * + * @var Set + * @since 5.1.2 + */ + protected Set $set; + + /** + * The Purge Class. + * + * @var Purge + * @since 5.1.2 + */ + protected Purge $purge; + + /** + * The Translation Class. + * + * @var Translation + * @since 5.1.2 + */ + protected Translation $translation; + + /** + * The Multilingual Class. + * + * @var Multilingual + * @since 5.1.2 + */ + protected Multilingual $multilingual; + + /** + * The EventInterface Class. + * + * @var Event + * @since 5.1.2 + */ + protected Event $event; + + /** + * The FieldsetExtension Class. + * + * @var FieldsetExtension + * @since 5.1.2 + */ + protected FieldsetExtension $fieldsetextension; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The Languages Class. + * + * @var Languages + * @since 5.1.2 + */ + protected Languages $languages; + + /** + * The Multilingual Class. + * + * @var BuilderMultilingual + * @since 5.1.2 + */ + protected BuilderMultilingual $buildermultilingual; + + /** + * The Counter Class. + * + * @var Counter + * @since 5.1.2 + */ + protected Counter $counter; + + /** + * The File Class. + * + * @var File + * @since 5.1.2 + */ + protected File $file; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Language $language The Language Class. + * @param Set $set The Set Class. + * @param Purge $purge The Purge Class. + * @param Translation $translation The Translation Class. + * @param Multilingual $multilingual The Multilingual Class. + * @param Event $event The EventInterface Class. + * @param FieldsetExtension $fieldsetextension The FieldsetExtension Class. + * @param ContentOne $contentone The ContentOne Class. + * @param Languages $languages The Languages Class. + * @param BuilderMultilingual $buildermultilingual The Multilingual Class. + * @param Counter $counter The Counter Class. + * @param File $file The File Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Language $language, Set $set, Purge $purge, + Translation $translation, Multilingual $multilingual, + Event $event, FieldsetExtension $fieldsetextension, + ContentOne $contentone, Languages $languages, + BuilderMultilingual $buildermultilingual, + Counter $counter, File $file) + { + $this->config = $config; + $this->language = $language; + $this->set = $set; + $this->purge = $purge; + $this->translation = $translation; + $this->multilingual = $multilingual; + $this->event = $event; + $this->fieldsetextension = $fieldsetextension; + $this->contentone = $contentone; + $this->languages = $languages; + $this->buildermultilingual = $buildermultilingual; + $this->counter = $counter; + $this->file = $file; + } + + /** + * Generates the main XML for the module. + * + * @param object $module The module object. + * + * @return string The generated XML. + * @since 5.1.2 + */ + public function get(object $module): string + { + $config_fields = $this->buildConfigFields($module); + $add_component_path = $this->shouldAddComponentPath($module); + $language_files = $this->generateLanguageFiles($module); + + $xml = $this->generateScriptAndSqlXml($module); + $xml .= $this->generateLanguageXml($module, $language_files); + $xml .= $this->generateFileXml($module, $language_files); + $xml .= $this->generateConfigXml($module, $config_fields, $add_component_path); + $xml .= $this->generateUpdateServerXml($module); + + return $xml; + } + + /** + * Build configuration fields XML. + * + * @param object $module The module object. + * + * @return array The configuration fields. + * @since 5.1.2 + */ + protected function buildConfigFields(object $module): array + { + $configFields = []; + if (!isset($module->config_fields) || !ArrayHelper::check($module->config_fields)) + { + return $configFields; + } + + $dbKey = 'yyy'; + $addScriptsField = true; + + foreach ($module->config_fields as $fieldName => $fieldsets) + { + foreach ($fieldsets as $fieldset => $fields) + { + $xmlFields = $this->fieldsetextension->get($module, $fields, $dbKey); + + if ($addScriptsField && $module->add_scripts_field) + { + $xmlFields .= PHP_EOL . Indent::_(2) . ''; + $addScriptsField = false; + } + + if (isset($xmlFields) && StringHelper::check($xmlFields)) + { + $configFields["{$fieldName}{$fieldset}"] = $xmlFields; + } + $dbKey++; + } + } + + return $configFields; + } + + /** + * Determine if the component path should be added. + * + * @param object $module The module object. + * + * @return bool True if the component path should be added, false otherwise. + * @since 5.1.2 + */ + protected function shouldAddComponentPath(object $module): bool + { + if (!isset($module->config_fields) || !ArrayHelper::check($module->config_fields) || + !isset($module->fieldsets_paths) || !ArrayHelper::check($module->fieldsets_paths)) + { + return false; + } + + foreach ($module->config_fields as $fieldName => $fieldsets) + { + foreach ($fieldsets as $fieldset => $fields) + { + if (isset($module->fieldsets_paths["{$fieldName}{$fieldset}"]) && + $module->fieldsets_paths["{$fieldName}{$fieldset}"] == 1) + { + return true; + } + } + } + + return false; + } + + /** + * Generate XML for script and SQL files. + * + * @param object $module The module object. + * + * @return string The XML for script and SQL files. + * @since 5.1.2 + */ + protected function generateScriptAndSqlXml(object $module): string + { + $xml = ''; + + if ($module->add_install_script) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . 'script.php'; + } + + if ($module->add_sql) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(2) . ''; + $xml .= PHP_EOL . Indent::_(3) . 'sql/mysql/install.sql'; + $xml .= PHP_EOL . Indent::_(2) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + if ($module->add_sql_uninstall) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(2) . ''; + $xml .= PHP_EOL . Indent::_(3) . 'sql/mysql/uninstall.sql'; + $xml .= PHP_EOL . Indent::_(2) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + return $xml; + } + + /** + * Generate XML for language files. + * + * @param object $module The module object. + * @param array $languageFiles The language files. + * + * @return string The XML for language files. + * @since 5.1.2 + */ + protected function generateLanguageXml(object $module, array $languageFiles): string + { + $xml = ''; + + if (ArrayHelper::check($languageFiles)) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + + foreach ($languageFiles as $tag) + { + $xml .= PHP_EOL . Indent::_(2) . "{$tag}/{$module->file_name}.ini"; + $xml .= PHP_EOL . Indent::_(2) . "{$tag}/{$module->file_name}.sys.ini"; + } + + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + return $xml; + } + + /** + * Generate the XML for the files. + * + * @param object $module The module object. + * @param array $languageFiles The language files. + * + * @return string The XML for the files. + * @since 5.1.2 + */ + protected function generateFileXml(object $module, array $languageFiles): string + { + $files = Folder::files($module->folder_path); + $folders = Folder::folders($module->folder_path); + $ignore = ['services', 'sql', 'language', 'script.php', "{$module->file_name}.xml", "{$module->file_name}.php"]; + + $xml = PHP_EOL . PHP_EOL . Indent::_(1) . ''; + + $xml .= PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(2) . "file_name}\">services"; + + foreach ($files as $file) + { + if (!in_array($file, $ignore)) + { + $xml .= PHP_EOL . Indent::_(2) . "{$file}"; + } + } + + if (!empty($languageFiles)) + { + $xml .= PHP_EOL . Indent::_(2) . 'language'; + } + + if ($module->add_sql || $module->add_sql_uninstall) + { + $xml .= PHP_EOL . Indent::_(2) . 'sql'; + } + + foreach ($folders as $folder) + { + if (!in_array($folder, $ignore)) + { + $xml .= PHP_EOL . Indent::_(2) . "{$folder}"; + } + } + + $xml .= PHP_EOL . Indent::_(1) . ''; + + return $xml; + } + + /** + * Generate XML for configuration fields. + * + * @param object $module The module object. + * @param array $configFields The configuration fields. + * @param bool $addComponentPath Whether to add the component path. + * + * @return string The XML for configuration fields. + * @since 5.1.2 + */ + protected function generateConfigXml(object $module, array $configFields, bool $addComponentPath): string + { + if (!isset($module->config_fields) || !ArrayHelper::check($configFields)) + { + return ''; + } + + $xml = PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= $addComponentPath ? PHP_EOL . Indent::_(1) . ''; + + if ($addComponentPath) + { + $namespace = $this->config->namespace_prefix . '\\Component\\' . $this->contentone->get('ComponentNamespace') . '\\Administrator'; + $xml .= PHP_EOL . Indent::_(3) . "addruleprefix=\"{$namespace}\\Rule\""; + $xml .= PHP_EOL . Indent::_(3) . "addfieldprefix=\"{$namespace}\\Field\">"; + $xml .= PHP_EOL . Indent::_(1) . '>'; + } + + foreach ($module->config_fields as $fieldName => $fieldsets) + { + $xml .= PHP_EOL . Indent::_(1) . ""; + + foreach ($fieldsets as $fieldset => $fields) + { + $label = $module->fieldsets_label["{$fieldName}{$fieldset}"] ?? $fieldset; + + $xml .= PHP_EOL . Indent::_(1) . "
"; + + if (isset($configFields["{$fieldName}{$fieldset}"])) + { + $xml .= $configFields["{$fieldName}{$fieldset}"]; + } + + $xml .= PHP_EOL . Indent::_(1) . '
'; + } + + $xml .= PHP_EOL . Indent::_(1) . '
'; + } + + $xml .= PHP_EOL . Indent::_(1) . ''; + + return $xml; + } + + /** + * Generate XML for update servers. + * + * @param object $module The module object. + * + * @return string The XML for update servers. + * @since 5.1.2 + */ + protected function generateUpdateServerXml(object $module): string + { + $xml = ''; + + if ($module->add_update_server) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(2) . "official_name}\">{$module->update_server_url}"; + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + return $xml; + } + + /** + * Generate language files. + * + * @param object $module The module object. + * + * @return array The language files. + * @since 5.1.2 + */ + protected function generateLanguageFiles(object $module): array + { + $languageFiles = []; + + if (!$this->language->exist($module->key)) + { + return $languageFiles; + } + + $langContent = $this->language->getTarget($module->key); + $this->event->trigger('jcb_ce_onBeforeBuildModuleLang', [&$module, &$langContent]); + + $values = array_unique($langContent); + $this->buildermultilingual->set('modules', $this->multilingual->get($values)); + + $langTag = $this->config->get('lang_tag', 'en-GB'); + $this->languages->set("modules.{$langTag}.all", $langContent); + $this->language->setTarget($module->key, null); + + $this->set->execute($values, $module->guid, 'modules'); + $this->purge->execute($values, $module->guid, 'modules'); + + $this->event->trigger('jcb_ce_onBeforeBuildModuleLangFiles', [&$module]); + + if ($this->languages->IsArray('modules')) + { + foreach ($this->languages->get('modules') as $tag => $areas) + { + $tag = trim($tag); + foreach ($areas as $area => $languageStrings) + { + $fileName = "{$module->file_name}.ini"; + $fileSysName = "{$module->file_name}.sys.ini"; + $total = count($values); + if ($this->translation->check($tag, $languageStrings, $total, $fileName)) + { + $lang = array_map( + fn($langString, $placeholder) => "{$placeholder}=\"{$langString}\"", + array_values($languageStrings), + array_keys($languageStrings) + ); + + $path = "{$module->folder_path}/language/{$tag}/"; + + if (!is_dir($path)) + { + Folder::create($path); + $this->counter->folder++; + } + + $this->file->write($path . $fileName, implode(PHP_EOL, $lang)); + $this->file->write($path . $fileSysName, implode(PHP_EOL, $lang)); + + $this->counter->line += count($lang); + unset($lang); + + $languageFiles[$tag] = $tag; + } + } + } + } + + return $languageFiles; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Provider.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Provider.php new file mode 100644 index 000000000..df3f87b03 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Provider.php @@ -0,0 +1,114 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne as Builder; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\ProviderInterface; + + +/** + * Module Provider Class for Joomla 4 + * + * @since 5.1.2 + */ +final class Provider implements ProviderInterface +{ + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var Builder + * @since 5.1.2 + */ + protected Builder $builder; + + /** + * The Namespace Prefix + * + * @var string + * @since 5.1.2 + */ + protected string $NamespacePrefix; + + /** + * Constructor. + * + * @param Placeholder $placeholder The Placeholder Class. + * @param Builder $builder The Content One Class. + * + * @since 5.1.2 + */ + public function __construct(Placeholder $placeholder, Builder $builder) + { + $this->placeholder = $placeholder; + $this->builder = $builder; + + // set some global values + $this->NamespacePrefix = $this->placeholder->get('NamespacePrefix'); + } + + /** + * Get the updated provider for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return string The provider content. + * + * @since 5.1.2 + */ + public function get(object $module): string + { + $provider = []; + $provider[] = "/**"; + $provider[] = " *" . Line::_(__Line__, __Class__) . " The {$module->official_name} module service provider"; + $provider[] = " *"; + $provider[] = " * @since 5.4.0"; + $provider[] = " */"; + $provider[] = "return new class () implements ServiceProviderInterface {"; + $provider[] = Indent::_(1) . "/**"; + $provider[] = Indent::_(1) . " *" . Line::_(__Line__, __Class__) . " Registers the service provider with a DI container."; + $provider[] = Indent::_(1) . " *"; + $provider[] = Indent::_(1) . " * @param Container \$container The DI container."; + $provider[] = Indent::_(1) . " *"; + $provider[] = Indent::_(1) . " * @return void"; + $provider[] = Indent::_(1) . " * @since 5.4.0"; + $provider[] = Indent::_(1) . " */"; + $provider[] = Indent::_(1) . "public function register(Container \$container)"; + $provider[] = Indent::_(1) . "{"; + $provider[] = Indent::_(2) . "\$container->registerServiceProvider(new ModuleDispatcherFactory('\\{$this->NamespacePrefix}\\Module\\{$module->namespace}'));"; + if ($module->add_class_helper == 1 || $module->custom_get) + { + $provider[] = Indent::_(2) . "\$container->registerServiceProvider(new HelperFactory('\\{$this->NamespacePrefix}\\Module\\{$module->namespace}\\{$module->target_client_namespace}\\Helper'));"; + } + $provider[] = ''; + $provider[] = Indent::_(2) . "\$container->registerServiceProvider(new Module());"; + $provider[] = Indent::_(1) . "}"; + $provider[] = "};"; + + return $this->placeholder->update( + implode(PHP_EOL, $provider). PHP_EOL, + $this->builder->allActive() + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Template.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Template.php new file mode 100644 index 000000000..38a999be5 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/Template.php @@ -0,0 +1,242 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HeaderInterface as Header; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Customcode\DispenserInterface as Dispenser; +use VDM\Joomla\Componentbuilder\Compiler\Builder\TemplateData; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\TemplateInterface; + + +/** + * Module Template Joomla 4 + * + * @since 5.1.2 + */ +final class Template implements TemplateInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Header Class. + * + * @var Header + * @since 5.1.2 + */ + protected Header $header; + + /** + * The Dispenser Class. + * + * @var Dispenser + * @since 5.1.2 + */ + protected Dispenser $dispenser; + + /** + * The TemplateData Class. + * + * @var TemplateData + * @since 5.1.2 + */ + protected TemplateData $templatedata; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.2 + */ + protected ContentMulti $contentmulti; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Header $header The Header Class. + * @param Dispenser $dispenser The Dispenser Class. + * @param TemplateData $templatedata The TemplateData Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentOne $contentone The ContentOne Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Header $header, Dispenser $dispenser, + TemplateData $templatedata, Placeholder $placeholder, + ContentOne $contentone, ContentMulti $contentmulti) + { + $this->config = $config; + $this->header = $header; + $this->dispenser = $dispenser; + $this->templatedata = $templatedata; + $this->placeholder = $placeholder; + $this->contentone = $contentone; + $this->contentmulti = $contentmulti; + } + + /** + * Get the updated placeholder default template content for the given module. + * + * @param object $module The module object containing the necessary data. + * @param string $key The dispenser key for this given module. + * + * @return string The updated placeholder content. + * @since 5.1.2 + */ + public function default(object $module, string $key): string + { + // add any css from the fields + $default = $this->dispenser->get( + 'css_views', + $key, + PHP_EOL . '' . PHP_EOL + ); + + // now add the body + $body = trim((string) ($module->default ?? '')); + if (!empty($body)) + { + $default .= PHP_EOL . $body . PHP_EOL; + } + + // add any JavaScript from the fields + $default .= $this->dispenser->get( + 'views_footer', + $key, + PHP_EOL . '' . PHP_EOL + ); + + // return the default content for the model default area + return $this->placeholder->update( + $default, + $this->contentone->allActive() + ); + } + + /** + * Get the updated placeholder default header template content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return string The updated placeholder content. + * @since 5.1.2 + */ + public function header(object $module): string + { + // first add the header + $add_default_header = (int) ($module->add_default_header ?? 0); + $default = $add_default_header === 1 ? trim((string) ($module->default_header ?? '')) : ''; + + if (empty($default)) + { + return ''; + } + + // return the header for the model default area + return PHP_EOL . PHP_EOL . $this->placeholder->update($default, $this->contentone->allActive()); + } + + /** + * Get the updated placeholder extra template content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return void + * @since 5.1.2 + */ + public function extra(object $module): void + { + // Build the data key and fetch template data once + $data = $this->templatedata->get($module->key . '.' . $module->code_name); + + // Nothing to do if there's no data + if (!is_array($data) || $data === []) + { + return; + } + + // Cache these to avoid repeated calls + $activePlaceholders = $this->contentone->allActive(); + + // --- HEADER (text) --- + $header = (string) ($this->header->get('module.extra.template.header', $module->class_name) ?? ''); + if ($header !== '') + { + $header = PHP_EOL . PHP_EOL . $this->placeholder->update($header, $activePlaceholders); + } + + foreach ($data as $template => $item) + { + $target = StringHelper::safe("MODDEFAULT_HEADER_{$template}", 'U'); + $key = $module->key . '|' . $target; + $this->contentmulti->set($key, $header); + + // --- HEADER CODE (php_view) --- + $phpView = trim((string) ($item['php_view'] ?? '')); + $headerCode = ($phpView === '') + ? '' + : PHP_EOL . $this->placeholder->update($phpView, $activePlaceholders); + + $target = StringHelper::safe("MODDEFAULT_HEADER_CODE_{$template}", 'U'); + $key = $module->key . '|' . $target; + $this->contentmulti->set($key, $headerCode); + + // --- BODY (html) --- + $html = (string) ($item['html'] ?? ''); + $body = ($html === '') + ? PHP_EOL + : PHP_EOL . $this->placeholder->update($html, $activePlaceholders); + + $target = StringHelper::safe("MODDEFAULT_{$template}", 'U'); + $key = $module->key . '|' . $target; + $this->contentmulti->set($key, $body); + } + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Module/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Plugin/MainXML.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Plugin/MainXML.php index 03d6f84bf..d8351729b 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Plugin/MainXML.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaFour/Plugin/MainXML.php @@ -435,8 +435,9 @@ final class MainXML implements MainXMLInterface if ($addComponentPath) { - $xml .= PHP_EOL . Indent::_(3) . 'addruleprefix="' . $this->config->namespace_prefix . '\Component\\' . $this->contentone->get('ComponentNamespace') . '\Administrator\Rule"'; - $xml .= PHP_EOL . Indent::_(3) . 'addfieldprefix="' . $this->config->namespace_prefix . '\Component\\' . $this->contentone->get('ComponentNamespace') . '\Administrator\Field">'; + $namespace = $this->config->namespace_prefix . '\\Component\\' . $this->contentone->get('ComponentNamespace') . '\\Administrator'; + $xml .= PHP_EOL . Indent::_(3) . "addruleprefix=\"{$namespace}\\Rule\""; + $xml .= PHP_EOL . Indent::_(3) . "addfieldprefix=\"{$namespace}\\Field\">"; $xml .= PHP_EOL . Indent::_(1) . '>'; } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Model/CheckInNow.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Model/CheckInNow.php new file mode 100644 index 000000000..fbbd758bf --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Model/CheckInNow.php @@ -0,0 +1,108 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Model; + + +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model\CheckInNowInterface; + + +/** + * Check In Now Method for Joomla 3 + * + * @since 5.1.2 + */ +final class CheckInNow implements CheckInNowInterface +{ + /** + * Get the generated call snippet that invokes the check-in method. + * + * @return string The code that calls the generated method. + * @since 5.1.2 + */ + public function getCall(): string + { + $call = PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Check in items"; + $call .= PHP_EOL . Indent::_(2) . "\$this->checkInNow();" . PHP_EOL; + + return $call; + } + + /** + * Build the full `checkInNow()` method code for the given view/table. + * + * @param string $view The view/table suffix (e.g. 'items'). + * @param string $component The component name (without 'com_'). + * + * @return string The full method code as a string. + * @since 5.1.2 + */ + public function getMethod($view, $component): string + { + $checkin = PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; + $checkin .= PHP_EOL . Indent::_(1) . " * Build an SQL query to check in all items left checked out longer then a set time."; + $checkin .= PHP_EOL . Indent::_(1) . " *"; + $checkin .= PHP_EOL . Indent::_(1) . " * @return void"; + $checkin .= PHP_EOL . Indent::_(1) . " * @since 3.2.0"; + $checkin .= PHP_EOL . Indent::_(1) . " */"; + $checkin .= PHP_EOL . Indent::_(1) . "protected function checkInNow(): void"; + $checkin .= PHP_EOL . Indent::_(1) . "{"; + $checkin .= PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Get set check in time"; + $checkin .= PHP_EOL . Indent::_(2) . "\$time = Joomla__"."_aeb8e463_291f_4445_9ac4_34b637c12dbd___Power::getParams('com_" . $component . "')->get('check_in');"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(2) . "if (\$time)"; + $checkin .= PHP_EOL . Indent::_(2) . "{"; + $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_(__LINE__,__CLASS__) . " Get a db connection."; + $checkin .= PHP_EOL . Indent::_(3) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDbo();"; + $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_(__Line__, __Class__) . " Reset query."; + $checkin .= PHP_EOL . Indent::_(3) . "\$query = \$db->getQuery(true);"; + $checkin .= PHP_EOL . Indent::_(3) . "\$query->select('*');"; + $checkin .= PHP_EOL . Indent::_(3) . "\$query->from(\$db->quoteName('#__" . $component . "_" . $view . "'));"; + $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_(__Line__, __Class__) . " Only select items that are checked out."; + + $checkin .= PHP_EOL . Indent::_(3) . "\$query->where(\$db->quoteName('checked_out') . ' != 0');"; + + Indent::_(3) . "//" . Line::_(__Line__, __Class__) . " Query only to see if we have a rows"; + $checkin .= PHP_EOL . Indent::_(3) . "\$db->setQuery(\$query, 0, 1);"; + $checkin .= PHP_EOL . Indent::_(3) . "\$db->execute();"; + $checkin .= PHP_EOL . Indent::_(3) . "if (\$db->getNumRows())"; + $checkin .= PHP_EOL . Indent::_(3) . "{"; + $checkin .= PHP_EOL . Indent::_(4) . "//" . Line::_(__Line__, __Class__) . " Get target date in the past."; + $checkin .= PHP_EOL . Indent::_(4) . "\$date = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDate()->modify(\$time)->toSql();"; + $checkin .= PHP_EOL . Indent::_(4) . "//" . Line::_(__Line__, __Class__) . " Reset query."; + $checkin .= PHP_EOL . Indent::_(4) . "\$query = \$db->getQuery(true);"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_(__LINE__,__CLASS__) . " Fields to update."; + $checkin .= PHP_EOL . Indent::_(4) . "\$fields = ["; + + $checkin .= PHP_EOL . Indent::_(5) . "\$db->quoteName('checked_out_time') . ' = ' . \$db->quote('0000-00-00 00:00:00'),"; + $checkin .= PHP_EOL . Indent::_(5) . "\$db->quoteName('checked_out') . ' = 0'"; + + $checkin .= PHP_EOL . Indent::_(4) . "];"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_(__LINE__,__CLASS__) . " Conditions for which records should be updated."; + $checkin .= PHP_EOL . Indent::_(4) . "\$conditions = ["; + + $checkin .= PHP_EOL . Indent::_(5) . "\$db->quoteName('checked_out') . ' != 0', "; + + $checkin .= PHP_EOL . Indent::_(5) . "\$db->quoteName('checked_out_time') . ' < ' . \$db->quote(\$date)"; + $checkin .= PHP_EOL . Indent::_(4) . "];"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_(__LINE__,__CLASS__) . " Check table."; + $checkin .= PHP_EOL . Indent::_(4) . "\$query->update(\$db->quoteName('#__" . $component . "_" . $view . "'))->set(\$fields)->where(\$conditions); "; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "\$db->setQuery(\$query);"; + $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "\$db->execute();"; + $checkin .= PHP_EOL . Indent::_(3) . "}"; + $checkin .= PHP_EOL . Indent::_(2) . "}"; + $checkin .= PHP_EOL . Indent::_(1) . "}"; + + return $checkin; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Dispatcher.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Dispatcher.php new file mode 100644 index 000000000..5b7743d7c --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Dispatcher.php @@ -0,0 +1,108 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne as Builder; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\LibraryInterface as Library; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\DispatcherInterface; + + +/** + * Module Dispatcher Class for Joomla 3 + * + * @since 5.1.2 + */ +final class Dispatcher implements DispatcherInterface +{ + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var Builder + * @since 5.1.2 + */ + protected Builder $builder; + + /** + * The Library Class. + * + * @var Library + * @since 5.1.2 + */ + protected Library $library; + + /** + * Constructor. + * + * @param Placeholder $placeholder The Placeholder Class. + * @param Builder $builder The ContentOne Class. + * @param Library $library The Library Class. + * + * @since 5.1.2 + */ + public function __construct(Placeholder $placeholder, Builder $builder, + Library $library) + { + $this->placeholder = $placeholder; + $this->builder = $builder; + $this->library = $library; + } + + /** + * Get the updated placeholder content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return string The updated placeholder content. + * @since 5.1.2 + */ + public function get(object $module): string + { + $Helper = $this->builder->get('Component') . 'Helper'; + $component = $this->builder->get('component'); + $_helper = ''; + + $libraries = [Placefix::_('MOD_LIBRARIES') => $this->library->get($module)]; + $code = $this->placeholder->update($module->mod_code, $libraries); + + if (strpos((string) $code, $Helper . '::') !== false + && strpos( + (string) $code, + "/components/com_" . $component . "/helpers/" . $component + . ".php" + ) === false) + { + $_helper = '//' . Line::_(__Line__, __Class__) + . ' Include the component helper functions only once'; + $_helper .= PHP_EOL . "JLoader::register('" . $Helper + . "', JPATH_ADMINISTRATOR . '/components/com_" . $component + . "/helpers/" . $component . ".php');"; + } + + return $this->placeholder->update( + $_helper . PHP_EOL . $code . PHP_EOL, + $this->builder->allActive() + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Helper.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Helper.php new file mode 100644 index 000000000..c41d57c0a --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Helper.php @@ -0,0 +1,98 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\HelperInterface; + + +/** + * Module Helper Code Joomla 3 + * + * @since 5.1.2 + */ +final class Helper implements HelperInterface +{ + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * Constructor. + * + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentOne $contentone The ContentOne Class. + * + * @since 5.1.2 + */ + public function __construct(Placeholder $placeholder, ContentOne $contentone) + { + $this->placeholder = $placeholder; + $this->contentone = $contentone; + } + + /** + * Get Module Helper Class code + * + * @param object $module The module object + * + * @return string The helper class code + * @since 5.1.2 + */ + public function get(object $module): string + { + $type = trim((string) ($module->class_helper_type ?? 'class')); + $name = trim((string) ($module->class_helper_name ?? 'Helper')); + $body = (string) ($module->class_helper_code ?? ''); + + $code = PHP_EOL . $type . ' ' . $name . PHP_EOL . '{' . PHP_EOL . $body . PHP_EOL . '}' . PHP_EOL; + + return $this->placeholder->update($code, $this->contentone->allActive()); + } + + /** + * Get Module Helper Header code + * + * @param object $module The module object + * + * @return string The helper header code + * @since 5.1.2 + */ + public function header(object $module): string + { + $code = (string) trim($module->class_helper_header ?? ''); + + if ($code === '') + { + return ''; + } + + return $this->placeholder->update( + PHP_EOL . $code, $this->contentone->allActive() + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Library.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Library.php new file mode 100644 index 000000000..dc6550624 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Library.php @@ -0,0 +1,153 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Builder\LibraryManager; +use VDM\Joomla\Componentbuilder\Compiler\Library\Document; +use VDM\Joomla\Componentbuilder\Compiler\Registry; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\LibraryInterface; + + +/** + * Module Library Joomla 3 + * + * @since 5.1.2 + */ +final class Library implements LibraryInterface +{ + /** + * The LibraryManager Class. + * + * @var LibraryManager + * @since 5.1.2 + */ + protected LibraryManager $librarymanager; + + /** + * The Document Class. + * + * @var Document + * @since 5.1.2 + */ + protected Document $document; + + /** + * The Registry Class. + * + * @var Registry + * @since 5.1.2 + */ + protected Registry $registry; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * Constructor. + * + * @param LibraryManager $librarymanager The LibraryManager Class. + * @param Document $document The Document Class. + * @param Registry $registry The Registry Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentOne $contentone The ContentOne Class. + * + * @since 5.1.2 + */ + public function __construct(LibraryManager $librarymanager, Document $document, + Registry $registry, Placeholder $placeholder, + ContentOne $contentone) + { + $this->librarymanager = $librarymanager; + $this->document = $document; + $this->registry = $registry; + $this->placeholder = $placeholder; + $this->contentone = $contentone; + } + + /** + * Get the module's library loading code. + * + * @param object $module The module object + * + * @return string The generated code to load libraries into the document. + * @since 5.1.2 + */ + public function get(object $module): string + { + $data = $this->librarymanager->get($module->key . '.' . $module->code_name); + + if ($data === null) + { + return ''; + } + + $code = '// ' . Line::_(__LINE__, __CLASS__) . ' get the document object' . PHP_EOL; + $code .= '$document = Joomla__' . '_39403062_84fb_46e0_bac4_0023f766e827___Power::getDocument();'; + + $found = false; + + foreach ($data as $id => $item) + { + $library = $this->registry->get("builder.libraries.{$id}"); + + if (!is_object($library)) + { + continue; + } + + if (!empty($library->document) && StringHelper::check($library->document)) + { + $code .= PHP_EOL . $library->document; + $found = true; + } + elseif (isset($library->how)) + { + $code .= $this->document->get($id); + $found = true; + } + } + + if (!$found) + { + return ''; + } + + // Normalize and inject placeholders + $lines = explode(PHP_EOL, $code); + $trimmed = array_map('trim', $lines); + $normalized = str_replace('$this->document->', '$document->', implode(PHP_EOL, $trimmed)); + + return $this->placeholder->update( + $this->placeholder->update_($normalized), + $this->contentone->allActive() + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/MainXML.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/MainXML.php new file mode 100644 index 000000000..28c9a3877 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/MainXML.php @@ -0,0 +1,612 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module; + + +use Joomla\Filesystem\Folder; +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Language; +use VDM\Joomla\Componentbuilder\Compiler\Language\Set; +use VDM\Joomla\Componentbuilder\Compiler\Language\Purge; +use VDM\Joomla\Componentbuilder\Compiler\Language\Translation; +use VDM\Joomla\Componentbuilder\Compiler\Language\Multilingual; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; +use VDM\Joomla\Componentbuilder\Compiler\Creator\FieldsetExtension; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\Languages; +use VDM\Joomla\Componentbuilder\Compiler\Builder\Multilingual as BuilderMultilingual; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Counter; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\File; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Interfaces\Architecture\Module\MainXMLInterface; + + +/** + * Joomla 3 Module Main XML Class + * + * @since 5.1.2 + */ +final class MainXML implements MainXMLInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Language Class. + * + * @var Language + * @since 5.1.2 + */ + protected Language $language; + + /** + * The Set Class. + * + * @var Set + * @since 5.1.2 + */ + protected Set $set; + + /** + * The Purge Class. + * + * @var Purge + * @since 5.1.2 + */ + protected Purge $purge; + + /** + * The Translation Class. + * + * @var Translation + * @since 5.1.2 + */ + protected Translation $translation; + + /** + * The Multilingual Class. + * + * @var Multilingual + * @since 5.1.2 + */ + protected Multilingual $multilingual; + + /** + * The EventInterface Class. + * + * @var Event + * @since 5.1.2 + */ + protected Event $event; + + /** + * The FieldsetExtension Class. + * + * @var FieldsetExtension + * @since 5.1.2 + */ + protected FieldsetExtension $fieldsetextension; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The Languages Class. + * + * @var Languages + * @since 5.1.2 + */ + protected Languages $languages; + + /** + * The Multilingual Class. + * + * @var BuilderMultilingual + * @since 5.1.2 + */ + protected BuilderMultilingual $buildermultilingual; + + /** + * The Counter Class. + * + * @var Counter + * @since 5.1.2 + */ + protected Counter $counter; + + /** + * The File Class. + * + * @var File + * @since 5.1.2 + */ + protected File $file; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Language $language The Language Class. + * @param Set $set The Set Class. + * @param Purge $purge The Purge Class. + * @param Translation $translation The Translation Class. + * @param Multilingual $multilingual The Multilingual Class. + * @param Event $event The EventInterface Class. + * @param FieldsetExtension $fieldsetextension The FieldsetExtension Class. + * @param ContentOne $contentone The ContentOne Class. + * @param Languages $languages The Languages Class. + * @param BuilderMultilingual $buildermultilingual The Multilingual Class. + * @param Counter $counter The Counter Class. + * @param File $file The File Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Language $language, Set $set, Purge $purge, + Translation $translation, Multilingual $multilingual, + Event $event, FieldsetExtension $fieldsetextension, + ContentOne $contentone, Languages $languages, + BuilderMultilingual $buildermultilingual, + Counter $counter, File $file) + { + $this->config = $config; + $this->language = $language; + $this->set = $set; + $this->purge = $purge; + $this->translation = $translation; + $this->multilingual = $multilingual; + $this->event = $event; + $this->fieldsetextension = $fieldsetextension; + $this->contentone = $contentone; + $this->languages = $languages; + $this->buildermultilingual = $buildermultilingual; + $this->counter = $counter; + $this->file = $file; + } + + /** + * Generates the main XML for the module. + * + * @param object $module The module object. + * + * @return string The generated XML. + * @since 5.1.2 + */ + public function get(object $module): string + { + $config_fields = $this->buildConfigFields($module); + $add_component_path = $this->shouldAddComponentPath($module); + $language_files = $this->generateLanguageFiles($module); + + $xml = $this->generateScriptAndSqlXml($module); + $xml .= $this->generateLanguageXml($module, $language_files); + $xml .= $this->generateFileXml($module, $language_files); + $xml .= $this->generateConfigXml($module, $config_fields, $add_component_path); + $xml .= $this->generateUpdateServerXml($module); + + return $xml; + } + + /** + * Build configuration fields XML. + * + * @param object $module The module object. + * + * @return array The configuration fields. + * @since 5.1.2 + */ + protected function buildConfigFields(object $module): array + { + $configFields = []; + if (!isset($module->config_fields) || !ArrayHelper::check($module->config_fields)) + { + return $configFields; + } + + $dbKey = 'yyy'; + $addScriptsField = true; + + foreach ($module->config_fields as $fieldName => $fieldsets) + { + foreach ($fieldsets as $fieldset => $fields) + { + $xmlFields = $this->fieldsetextension->get($module, $fields, $dbKey); + + if ($addScriptsField && $module->add_scripts_field) + { + $xmlFields .= PHP_EOL . Indent::_(2) . ''; + $addScriptsField = false; + } + + if (isset($xmlFields) && StringHelper::check($xmlFields)) + { + $configFields["{$fieldName}{$fieldset}"] = $xmlFields; + } + $dbKey++; + } + } + + return $configFields; + } + + /** + * Determine if the component path should be added. + * + * @param object $module The module object. + * + * @return bool True if the component path should be added, false otherwise. + * @since 5.1.2 + */ + protected function shouldAddComponentPath(object $module): bool + { + if (!isset($module->config_fields) || !ArrayHelper::check($module->config_fields) || + !isset($module->fieldsets_paths) || !ArrayHelper::check($module->fieldsets_paths)) + { + return false; + } + + foreach ($module->config_fields as $fieldName => $fieldsets) + { + foreach ($fieldsets as $fieldset => $fields) + { + if (isset($module->fieldsets_paths["{$fieldName}{$fieldset}"]) && + $module->fieldsets_paths["{$fieldName}{$fieldset}"] == 1) + { + return true; + } + } + } + + return false; + } + + /** + * Generate XML for script and SQL files. + * + * @param object $module The module object. + * + * @return string The XML for script and SQL files. + * @since 5.1.2 + */ + protected function generateScriptAndSqlXml(object $module): string + { + $xml = ''; + + if ($module->add_install_script) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . 'script.php'; + } + + if ($module->add_sql) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(2) . ''; + $xml .= PHP_EOL . Indent::_(3) . 'sql/mysql/install.sql'; + $xml .= PHP_EOL . Indent::_(2) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + if ($module->add_sql_uninstall) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(2) . ''; + $xml .= PHP_EOL . Indent::_(3) . 'sql/mysql/uninstall.sql'; + $xml .= PHP_EOL . Indent::_(2) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + return $xml; + } + + /** + * Generate XML for language files. + * + * @param object $module The module object. + * @param array $languageFiles The language files. + * + * @return string The XML for language files. + * @since 5.1.2 + */ + protected function generateLanguageXml(object $module, array $languageFiles): string + { + $xml = ''; + + if (ArrayHelper::check($languageFiles)) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + + foreach ($languageFiles as $tag) + { + $xml .= PHP_EOL . Indent::_(2) . "{$tag}/{$tag}.{$module->file_name}.ini"; + $xml .= PHP_EOL . Indent::_(2) . "{$tag}/{$tag}.{$module->file_name}.sys.ini"; + } + + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + return $xml; + } + + /** + * Generate the XML for the files. + * + * @param object $module The module object. + * @param array $languageFiles The language files. + * + * @return string The XML for the files. + * @since 5.1.2 + */ + protected function generateFileXml(object $module, array $languageFiles): string + { + $files = Folder::files($module->folder_path); + $folders = Folder::folders($module->folder_path); + $ignore = ['sql', 'language', 'script.php', "{$module->file_name}.xml", "{$module->file_name}.php"]; + + $xml = PHP_EOL . PHP_EOL . Indent::_(1) . ''; + + $xml .= PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(2) . "file_name}\">{$module->file_name}.php"; + + foreach ($files as $file) + { + if (!in_array($file, $ignore)) + { + $xml .= PHP_EOL . Indent::_(2) . "{$file}"; + } + } + + if (!empty($languageFiles)) + { + $xml .= PHP_EOL . Indent::_(2) . 'language'; + } + + if ($module->add_sql || $module->add_sql_uninstall) + { + $xml .= PHP_EOL . Indent::_(2) . 'sql'; + } + + foreach ($folders as $folder) + { + if (!in_array($folder, $ignore)) + { + $xml .= PHP_EOL . Indent::_(2) . "{$folder}"; + } + } + + $xml .= PHP_EOL . Indent::_(1) . ''; + + return $xml; + } + + /** + * Generate XML for configuration fields. + * + * @param object $module The module object. + * @param array $configFields The configuration fields. + * @param bool $addComponentPath Whether to add the component path. + * + * @return string The XML for configuration fields. + * @since 5.1.2 + */ + protected function generateConfigXml(object $module, array $configFields, bool $addComponentPath): string + { + if (!isset($module->config_fields) || !ArrayHelper::check($configFields)) + { + return ''; + } + + $xml = PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= $addComponentPath ? PHP_EOL . Indent::_(1) . ''; + + if ($addComponentPath) + { + $xml .= PHP_EOL . Indent::_(2) + . 'addrulepath="/administrator/components/com_' + . $this->config->component_code_name . '/models/rules"'; + $xml .= PHP_EOL . Indent::_(2) + . 'addfieldpath="/administrator/components/com_' + . $this->config->component_code_name . '/models/fields"'; + $xml .= PHP_EOL . Indent::_(1) . '>'; + } + + foreach ($module->config_fields as $fieldName => $fieldsets) + { + $xml .= PHP_EOL . Indent::_(1) . ""; + + foreach ($fieldsets as $fieldset => $fields) + { + $label = $module->fieldsets_label["{$fieldName}{$fieldset}"] ?? $fieldset; + + // Add path to module rules and custom fields if required + if (isset($module->fieldsets_paths["{$fieldName}{$fieldset}"]) && + in_array($module->fieldsets_paths["{$fieldName}{$fieldset}"], [2, 3])) + { + + if ($module->target === 2) + { + $module->add_rule_path["{$fieldName}{$fieldset}"] ??= "/administrator/modules/{$module->file_name}/rules"; + $module->add_field_path["{$fieldName}{$fieldset}"] ??= "/administrator/modules/{$module->file_name}/fields"; + } + else + { + $module->add_rule_path["{$fieldName}{$fieldset}"] ??= "/modules/{$module->file_name}/rules"; + $module->add_field_path["{$fieldName}{$fieldset}"] ??= "/modules/{$module->file_name}/fields"; + } + } + + if (isset($module->add_rule_path["{$fieldName}{$fieldset}"]) || isset($module->add_field_path["{$fieldName}{$fieldset}"])) + { + $xml .= PHP_EOL . Indent::_(1) . '"; + $xml .= PHP_EOL . Indent::_(1) . "
add_rule_path["{$fieldName}{$fieldset}"])) + { + $xml .= PHP_EOL . Indent::_(2) . "addrulepath=\"{$module->add_rule_path["{$fieldName}{$fieldset}"]}\""; + } + + if (isset($module->add_field_path["{$fieldName}{$fieldset}"])) + { + $xml .= PHP_EOL . Indent::_(2) . "addfieldpath=\"{$module->add_field_path["{$fieldName}{$fieldset}"]}\""; + } + + $xml .= PHP_EOL . Indent::_(1) . '>'; + } + else + { + $xml .= PHP_EOL . Indent::_(1) . "
"; + } + + if (isset($configFields["{$fieldName}{$fieldset}"])) + { + $xml .= $configFields["{$fieldName}{$fieldset}"]; + } + + $xml .= PHP_EOL . Indent::_(1) . '
'; + } + + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + $xml .= PHP_EOL . Indent::_(1) . ''; + + return $xml; + } + + /** + * Generate XML for update servers. + * + * @param object $module The module object. + * + * @return string The XML for update servers. + * @since 5.1.2 + */ + protected function generateUpdateServerXml(object $module): string + { + $xml = ''; + + if ($module->add_update_server) + { + $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(1) . ''; + $xml .= PHP_EOL . Indent::_(2) . "official_name}\">{$module->update_server_url}"; + $xml .= PHP_EOL . Indent::_(1) . ''; + } + + return $xml; + } + + /** + * Generate language files. + * + * @param object $module The module object. + * + * @return array The language files. + * @since 5.1.2 + */ + protected function generateLanguageFiles(object $module): array + { + $languageFiles = []; + + if (!$this->language->exist($module->key)) + { + return $languageFiles; + } + + $langContent = $this->language->getTarget($module->key); + $this->event->trigger('jcb_ce_onBeforeBuildModuleLang', [&$module, &$langContent]); + + $values = array_unique($langContent); + $this->buildermultilingual->set('modules', $this->multilingual->get($values)); + + $langTag = $this->config->get('lang_tag', 'en-GB'); + $this->languages->set("modules.{$langTag}.all", $langContent); + $this->language->setTarget($module->key, null); + + $this->set->execute($values, $module->guid, 'modules'); + $this->purge->execute($values, $module->guid, 'modules'); + + $this->event->trigger('jcb_ce_onBeforeBuildModuleLangFiles', [&$module]); + + if ($this->languages->IsArray('modules')) + { + foreach ($this->languages->get('modules') as $tag => $areas) + { + $tag = trim($tag); + foreach ($areas as $area => $languageStrings) + { + $fileName = "{$tag}.{$module->file_name}.ini"; + $total = count($values); + if ($this->translation->check($tag, $languageStrings, $total, $fileName)) + { + $lang = array_map( + fn($langString, $placeholder) => "{$placeholder}=\"{$langString}\"", + array_values($languageStrings), + array_keys($languageStrings) + ); + + $path = "{$module->folder_path}/language/{$tag}/"; + + if (!is_dir($path)) + { + Folder::create($path); + $this->counter->folder++; + } + + $this->file->write($path . $fileName, implode(PHP_EOL, $lang)); + $this->file->write( + $path . "{$tag}.{$module->file_name}.sys.ini", + implode(PHP_EOL, $lang) + ); + + $this->counter->line += count($lang); + unset($lang); + + $languageFiles[$tag] = $tag; + } + } + } + } + + return $languageFiles; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Provider.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Provider.php new file mode 100644 index 000000000..b4a136388 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Provider.php @@ -0,0 +1,71 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne as Builder; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\ProviderInterface; + + +/** + * Module Provider Class for Joomla 3 + * + * @since 5.1.2 + */ +final class Provider implements ProviderInterface +{ + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var Builder + * @since 5.1.2 + */ + protected Builder $builder; + + /** + * Constructor. + * + * @param Placeholder $placeholder The Placeholder Class. + * @param Builder $builder The Content One Class. + * + * @since 5.1.2 + */ + public function __construct(Placeholder $placeholder, Builder $builder) + { + $this->placeholder = $placeholder; + $this->builder = $builder; + } + + /** + * Get the updated provider for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return string The provider content. + * + * @since 5.1.2 + */ + public function get(object $module): string + { + return ''; // no provider in Joomla 3 + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Template.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Template.php new file mode 100644 index 000000000..e2812630d --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/Template.php @@ -0,0 +1,178 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Customcode\DispenserInterface as Dispenser; +use VDM\Joomla\Componentbuilder\Compiler\Builder\TemplateData; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\TemplateInterface; + + +/** + * Module Template Joomla 3 + * + * @since 5.1.2 + */ +final class Template implements TemplateInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Dispenser Class. + * + * @var Dispenser + * @since 5.1.2 + */ + protected Dispenser $dispenser; + + /** + * The TemplateData Class. + * + * @var TemplateData + * @since 5.1.2 + */ + protected TemplateData $templatedata; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.2 + */ + protected ContentMulti $contentmulti; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Dispenser $dispenser The Dispenser Class. + * @param TemplateData $templatedata The TemplateData Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentOne $contentone The ContentOne Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Dispenser $dispenser, + TemplateData $templatedata, Placeholder $placeholder, + ContentOne $contentone, ContentMulti $contentmulti) + { + $this->config = $config; + $this->dispenser = $dispenser; + $this->templatedata = $templatedata; + $this->placeholder = $placeholder; + $this->contentone = $contentone; + $this->contentmulti = $contentmulti; + } + + /** + * Get the updated placeholder default template content for the given module. + * + * @param object $module The module object containing the necessary data. + * @param string $key The dispenser key for this given module. + * + * @return string The updated placeholder content. + * @since 5.1.2 + */ + public function default(object $module, string $key): string + { + // first add the header + $default = PHP_EOL . ($module->default_header ?? '') . PHP_EOL . '?>'; + + // add any css from the fields + $default .= $this->dispenser->get( + 'css_views', + $key, + PHP_EOL . '' . PHP_EOL + ); + + // now add the body + $default .= PHP_EOL . ($module->default ?? '') . PHP_EOL; + + // add any JavaScript from the fields + $default .= $this->dispenser->get( + 'views_footer', + $key, + PHP_EOL . '' . PHP_EOL + ); + + // return the default content for the model default area + return $this->placeholder->update($default, $this->contentone->allActive()); + } + + /** + * Get the updated placeholder extra template content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return void + * @since 5.1.2 + */ + public function extra(object $module): void + { + $dataKey = $this->config->build_target . '.' . $module->code_name; + + if (($data = $this->templatedata->get($dataKey)) !== null) + { + foreach ($data as $template => $item) + { + $header = $item['php_view'] ?? null; + $body = $item['html'] ?? ''; + $default = ($header ? PHP_EOL . $header . PHP_EOL . '?>' : PHP_EOL . '?>') . PHP_EOL . $body; + + $TARGET = StringHelper::safe("MODDEFAULT_{$template}", 'U'); + $key = $module->key . '|' . $TARGET; + + $this->contentmulti->set( + $key, + $this->placeholder->update($default, $this->contentone->allActive()) + ); + } + } + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Architecture/JoomlaThree/Module/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Builder/EventDispatcher.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Builder/EventDispatcher.php new file mode 100644 index 000000000..fb061b536 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Builder/EventDispatcher.php @@ -0,0 +1,27 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Builder; + + +use VDM\Joomla\Interfaces\Registryinterface; +use VDM\Joomla\Abstraction\Registry; + + +/** + * Event Dispatcher Class + * + * @since 5.1.2 + */ +final class EventDispatcher extends Registry implements Registryinterface +{ +} + 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 fe181f1fd..099d2351a 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 @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Component; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; use VDM\Joomla\Componentbuilder\Compiler\Placeholder; @@ -216,11 +216,12 @@ final class Data protected Router $router; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. @@ -246,6 +247,7 @@ final class Data * @param Joomlamodules $joomlamodules The Joomlamodules Class. * @param Joomlaplugins $joomlaplugins The Joomlaplugins Class. * @param Router $router The Router Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ @@ -258,7 +260,7 @@ final class Data Sqltweaking $sqltweaking, Adminviews $adminviews, Siteviews $siteviews, Customadminviews $customadminviews, Updateserver $updateserver, Joomlamodules $joomlamodules, - Joomlaplugins $joomlaplugins, Router $router) + Joomlaplugins $joomlaplugins, Router $router, DatabaseInterface $db) { $this->config = $config; $this->event = $event; @@ -281,7 +283,7 @@ final class Data $this->modules = $joomlamodules; $this->plugins = $joomlaplugins; $this->router = $router; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Component/Placeholder.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Component/Placeholder.php index f8266c6b1..1cd28d50f 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Component/Placeholder.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Component/Placeholder.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Component; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Utilities\StringHelper; use VDM\Joomla\Utilities\GetHelper; use VDM\Joomla\Utilities\JsonHelper; @@ -48,24 +48,25 @@ final class Placeholder implements PlaceholderInterface protected $config; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. * - * @param Config $config The compiler config object. - * @param \JDatabaseDriver $db The Database Driver object. + * @param Config $config The compiler config object. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 **/ - public function __construct(?Config $config = null) + public function __construct(Config $config, DatabaseInterface $db) { - $this->config = $config ?: Compiler::_('Config'); - $this->db = Factory::getDbo(); + $this->config = $config; + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode.php index 7aff97804..97391d7fd 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Placeholder; @@ -129,11 +129,12 @@ class Customcode implements CustomcodeInterface protected External $external; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. @@ -144,12 +145,12 @@ class Customcode implements CustomcodeInterface * @param Power $power The compiler power extractor object. * @param JoomlaPower $joomla The compiler joomla power extractor object. * @param External $external The compiler external custom code object. - * @param \JDatabaseDriver $db The Database Driver object. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ public function __construct(Config $config, Placeholder $placeholder, - Extractor $extractor, Power $power, JoomlaPower $joomla, External $external) + Extractor $extractor, Power $power, JoomlaPower $joomla, External $external, DatabaseInterface $db) { $this->config = $config; $this->placeholder = $placeholder; @@ -157,7 +158,7 @@ class Customcode implements CustomcodeInterface $this->power = $power; $this->joomla = $joomla; $this->external = $external; - $this->db = Factory::getDbo(); + $this->db = $db; } /** @@ -656,7 +657,6 @@ class Customcode implements CustomcodeInterface } return false; - } - + } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/External.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/External.php index c3d677299..698378721 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/External.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/External.php @@ -16,13 +16,13 @@ use Joomla\CMS\Factory; use Joomla\CMS\User\User; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Language\Text; -use Joomla\CMS\Filesystem\Path; +use Joomla\CMS\Filesystem\Path; +use Joomla\Database\DatabaseInterface; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; use VDM\Joomla\Utilities\ArrayHelper; use VDM\Joomla\Utilities\StringHelper; use VDM\Joomla\Utilities\GetHelper; use VDM\Joomla\Utilities\FileHelper; -use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler; -use VDM\Joomla\Componentbuilder\Compiler\Placeholder; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Customcode\ExternalInterface; @@ -58,11 +58,12 @@ class External implements ExternalInterface protected Placeholder $placeholder; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * User object @@ -81,17 +82,19 @@ class External implements ExternalInterface /** * Constructor. * - * @param Placeholder|null $placeholder The compiler placeholder object. + * @param Placeholder $placeholder The compiler placeholder object. + * @param DatabaseInterface $db The Joomla Database Class. * * @throws \Exception * @since 3.2.0 */ - public function __construct(?Placeholder $placeholder = null) + public function __construct(Placeholder $placeholder, DatabaseInterface $db) { - $this->placeholder = $placeholder ?: Compiler::_('Placeholder'); - $this->db = Factory::getDbo(); - $this->user = Factory::getUser(); + $this->placeholder = $placeholder; + $this->db = $db; + $this->app = Factory::getApplication(); + $this->user = $this->app->getIdentity(); } /** @@ -386,7 +389,6 @@ class External implements ExternalInterface ); return ''; - } - + } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php index 203e32120..bcc1a9019 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor.php @@ -14,13 +14,11 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Customcode; use Joomla\CMS\Factory; use Joomla\CMS\User\User; -use Joomla\Filesystem\Folder; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Language\Text; -use Joomla\CMS\Version; -use VDM\Joomla\Utilities\ArrayHelper; -use VDM\Joomla\Utilities\StringHelper; -use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler; +use Joomla\CMS\Version; +use Joomla\Database\DatabaseInterface; +use Joomla\Filesystem\Folder; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui; use VDM\Joomla\Componentbuilder\Compiler\Customcode\Extractor\Paths; @@ -28,6 +26,8 @@ use VDM\Joomla\Componentbuilder\Compiler\Placeholder\Reverse; use VDM\Joomla\Componentbuilder\Compiler\Component\Placeholder; use VDM\Joomla\Componentbuilder\Compiler\Utilities\Pathfix; use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\StringHelper; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Customcode\ExtractorInterface; @@ -196,6 +196,14 @@ class Extractor implements ExtractorInterface **/ protected Pathfix $pathfix; + /** + * Joomla Database Class. + * + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; + /** * Current User Object * @@ -203,13 +211,6 @@ class Extractor implements ExtractorInterface **/ protected $user; - /** - * Database object to query local DB - * - * @since 3.2.0 - **/ - protected $db; - /** * Database object to query local DB * @@ -220,28 +221,30 @@ class Extractor implements ExtractorInterface /** * Constructor. * - * @param Config|null $config The compiler config object. - * @param Gui|null $gui The compiler customcode gui object. - * @param Paths|null $paths The compiler customcode extractor paths object. - * @param Reverse|null $reverse The compiler placeholder reverse object. - * @param Placeholder|null $placeholder The compiler component placeholder object. - * @param Pathfix|null $pathfix The compiler path fixing object. + * @param Config $config The compiler config object. + * @param Gui $gui The compiler customcode gui object. + * @param Paths $paths The compiler customcode extractor paths object. + * @param Reverse $reverse The compiler placeholder reverse object. + * @param Placeholder $placeholder The compiler component placeholder object. + * @param Pathfix $pathfix The compiler path fixing object. + * @param DatabaseInterface $db The Joomla Database Class. * * @throws \Exception * @since 3.2.0 */ - public function __construct(?Config $config = null, ?Gui $gui = null, ?Paths $paths = null, - ?Reverse $reverse = null, ?Placeholder $placeholder = null, ?Pathfix $pathfix = null) + public function __construct(Config $config, Gui $gui, Paths $paths, + Reverse $reverse, Placeholder $placeholder, Pathfix $pathfix, DatabaseInterface $db) { - $this->config = $config ?: Compiler::_('Config'); - $this->gui = $gui ?: Compiler::_('Customcode.Gui'); - $this->paths = $paths ?: Compiler::_('Customcode.Extractor.Paths'); - $this->reverse = $reverse ?: Compiler::_('Placeholder.Reverse'); - $this->componentPlaceholder = $placeholder ?: Compiler::_('Component.Placeholder'); - $this->pathfix = $pathfix ?: Compiler::_('Utilities.Pathfix'); - $this->user = Factory::getUser(); - $this->db = Factory::getDbo(); + $this->config = $config; + $this->gui = $gui; + $this->paths = $paths; + $this->reverse = $reverse; + $this->componentPlaceholder = $placeholder; + $this->pathfix = $pathfix; + $this->db = $db; + $this->app = Factory::getApplication(); + $this->user = $this->app->getIdentity(); // set today's date $this->today = Factory::getDate()->toSql(); @@ -934,7 +937,6 @@ class Extractor implements ExtractorInterface } return false; - } - + } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor/Paths.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor/Paths.php index 44632aff2..84c09b515 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor/Paths.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Extractor/Paths.php @@ -12,18 +12,17 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Customcode\Extractor; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use Joomla\Filesystem\Folder; -use VDM\Joomla\Utilities\ArrayHelper; -use VDM\Joomla\Utilities\JsonHelper; -use VDM\Joomla\Utilities\GetHelper; -use VDM\Joomla\Utilities\String\ClassfunctionHelper; -use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Placeholder; use VDM\Joomla\Componentbuilder\Compiler\Component\Placeholder as ComponentPlaceholder; use VDM\Joomla\Componentbuilder\Compiler\Customcode; use VDM\Joomla\Componentbuilder\Compiler\Language\Extractor; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\JsonHelper; +use VDM\Joomla\Utilities\GetHelper; +use VDM\Joomla\Utilities\String\ClassfunctionHelper; /** @@ -82,35 +81,36 @@ class Paths protected Extractor $extractor; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. * - * @param Config|null $config The compiler config object. - * @param Placeholder|null $placeholder The compiler placeholder object. - * @param ComponentPlaceholder|null $componentPlaceholder The compiler component placeholder object. - * @param Customcode|null $customcode The compiler customcode object. - * @param Extractor|null $extractor The compiler language extractor object. + * @param Config $config The compiler config object. + * @param Placeholder $placeholder The compiler placeholder object. + * @param ComponentPlaceholder $componentPlaceholder The compiler component placeholder object. + * @param Customcode $customcode The compiler customcode object. + * @param Extractor $extractor The compiler language extractor object. + * @param DatabaseInterface $db The Joomla Database Class. * * @throws \Exception * @since 3.2.0 */ - public function __construct(?Config $config = null, ?Placeholder $placeholder = null, - ?ComponentPlaceholder $componentPlaceholder = null, ?Customcode $customcode = null, - ?Extractor $extractor = null) + public function __construct(Config $config, Placeholder $placeholder, + ComponentPlaceholder $componentPlaceholder, Customcode $customcode, + Extractor $extractor, DatabaseInterface $db) { - $this->config = $config ?: Compiler::_('Config'); - $this->placeholder = $placeholder ?: Compiler::_('Placeholder'); - /** @var ComponentPlaceholder $componentPlaceholder */ - $componentPlaceholder = $componentPlaceholder ?: Compiler::_('Component.Placeholder'); - $this->customcode = $customcode ?: Compiler::_('Customcode'); - $this->extractor = $extractor ?: Compiler::_('Language.Extractor'); - $this->db = Factory::getDbo(); + $this->config = $config; + $this->placeholder = $placeholder; + $componentPlaceholder = $componentPlaceholder; + $this->customcode = $customcode; + $this->extractor = $extractor; + $this->db = $db; // load the placeholders to local array $this->componentPlaceholder = $componentPlaceholder->get(); @@ -412,7 +412,6 @@ class Paths } return false; - } - + } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Gui.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Gui.php index e4a1a160a..f766cbab4 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Gui.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Customcode/Gui.php @@ -14,16 +14,16 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Customcode; use Joomla\CMS\Factory; use Joomla\CMS\Application\CMSApplication; -use Joomla\CMS\Language\Text; -use VDM\Joomla\Utilities\ArrayHelper; -use VDM\Joomla\Utilities\StringHelper; -use VDM\Joomla\Utilities\GetHelper; -use VDM\Joomla\Utilities\FileHelper; -use VDM\Joomla\Utilities\String\FieldHelper; -use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler; +use Joomla\CMS\Language\Text; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Placeholder\Reverse; use VDM\Joomla\Componentbuilder\Power\Parser; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\String\FieldHelper; +use VDM\Joomla\Utilities\FileHelper; +use VDM\Joomla\Utilities\GetHelper; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Customcode\GuiInterface; @@ -59,14 +59,15 @@ class Gui implements GuiInterface protected Parser $parser; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** - * Database object to query local DB + * The application layer * * @since 3.2.0 **/ @@ -75,19 +76,21 @@ class Gui implements GuiInterface /** * Constructor. * - * @param Config|null $config The compiler config object. - * @param Reverse|null $reverse The compiler placeholder reverse object. - * @param Parser|null $parser The powers parser object. + * @param Config $config The compiler config object. + * @param Reverse $reverse The compiler placeholder reverse object. + * @param Parser $parser The powers parser object. + * @param DatabaseInterface $db The Joomla Database Class. * * @throws \Exception * @since 3.2.0 */ - public function __construct(?Config $config = null, ?Reverse $reverse = null, ?Parser $parser = null) + public function __construct(Config $config, Reverse $reverse, Parser $parser, DatabaseInterface $db) { - $this->config = $config ?: Compiler::_('Config'); - $this->reverse = $reverse ?: Compiler::_('Placeholder.Reverse'); - $this->parser = $parser ?: Compiler::_('Power.Parser'); - $this->db = Factory::getDbo(); + $this->config = $config; + $this->reverse = $reverse; + $this->parser = $parser; + $this->db = $db; + $this->app = Factory::getApplication(); } @@ -255,7 +258,6 @@ class Gui implements GuiInterface // we do not add GUI wrapper placeholder to code // that already has any customcode placeholders return strpos($code, '$$$$') === false; - } - + } } 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 f39846504..734b46803 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 @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Customview; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; use VDM\Joomla\Componentbuilder\Compiler\Customcode; @@ -161,11 +161,12 @@ class Data protected Custombuttons $custombuttons; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. @@ -183,6 +184,7 @@ class Data * @param Phpcustomview $phpcustomview The Phpcustomview Class. * @param Ajaxcustomview $ajaxcustomview The Ajaxcustomview Class. * @param Custombuttons $custombuttons The Custombuttons Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ @@ -194,7 +196,8 @@ class Data Csscustomview $csscustomview, Phpcustomview $phpcustomview, Ajaxcustomview $ajaxcustomview, - Custombuttons $custombuttons) + Custombuttons $custombuttons, + DatabaseInterface $db) { $this->config = $config; $this->event = $event; @@ -209,7 +212,7 @@ class Data $this->php = $phpcustomview; $this->ajax = $ajaxcustomview; $this->custombuttons = $custombuttons; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/CustomGetMethods.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/CustomGetMethods.php new file mode 100644 index 000000000..36b1824c8 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/CustomGetMethods.php @@ -0,0 +1,774 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\FieldonContentPrepare; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\JoinStructure; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\DecodeColumn; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\FilterColumn; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\UikitLoader; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteDecrypt; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ModelExpertFieldInitiator; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFieldData; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFieldDecodeFilter; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherJoin; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherQuery; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherFilter; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherWhere; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherOrder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherGroup; +use VDM\Joomla\Componentbuilder\Compiler\Builder\EventDispatcher; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * Dynamic Get Custom Get Methods + * + * @since 5.1.2 + */ +final class CustomGetMethods +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The FieldonContentPrepare Class. + * + * @var FieldonContentPrepare + * @since 5.1.2 + */ + protected FieldonContentPrepare $fieldoncontentprepare; + + /** + * The JoinStructure Class. + * + * @var JoinStructure + * @since 5.1.2 + */ + protected JoinStructure $joinstructure; + + /** + * The DecodeColumn Class. + * + * @var DecodeColumn + * @since 5.1.2 + */ + protected DecodeColumn $decodecolumn; + + /** + * The FilterColumn Class. + * + * @var FilterColumn + * @since 5.1.2 + */ + protected FilterColumn $filtercolumn; + + /** + * The UikitLoader Class. + * + * @var UikitLoader + * @since 5.1.2 + */ + protected UikitLoader $uikitloader; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The SiteDecrypt Class. + * + * @var SiteDecrypt + * @since 5.1.2 + */ + protected SiteDecrypt $sitedecrypt; + + /** + * The ModelExpertFieldInitiator Class. + * + * @var ModelExpertFieldInitiator + * @since 5.1.2 + */ + protected ModelExpertFieldInitiator $modelexpertfieldinitiator; + + /** + * The SiteFieldData Class. + * + * @var SiteFieldData + * @since 5.1.2 + */ + protected SiteFieldData $sitefielddata; + + /** + * The SiteFieldDecodeFilter Class. + * + * @var SiteFieldDecodeFilter + * @since 5.1.2 + */ + protected SiteFieldDecodeFilter $sitefielddecodefilter; + + /** + * The OtherJoin Class. + * + * @var OtherJoin + * @since 5.1.2 + */ + protected OtherJoin $otherjoin; + + /** + * The OtherQuery Class. + * + * @var OtherQuery + * @since 5.1.2 + */ + protected OtherQuery $otherquery; + + /** + * The OtherFilter Class. + * + * @var OtherFilter + * @since 5.1.2 + */ + protected OtherFilter $otherfilter; + + /** + * The OtherWhere Class. + * + * @var OtherWhere + * @since 5.1.2 + */ + protected OtherWhere $otherwhere; + + /** + * The OtherOrder Class. + * + * @var OtherOrder + * @since 5.1.2 + */ + protected OtherOrder $otherorder; + + /** + * The OtherGroup Class. + * + * @var OtherGroup + * @since 5.1.2 + */ + protected OtherGroup $othergroup; + + /** + * The EventDispatcher Class. + * + * @var EventDispatcher + * @since 5.1.2 + */ + protected EventDispatcher $eventdispatcher; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param FieldonContentPrepare $fieldoncontentprepare The FieldonContentPrepare Class. + * @param JoinStructure $joinstructure The JoinStructure Class. + * @param DecodeColumn $decodecolumn The DecodeColumn Class. + * @param FilterColumn $filtercolumn The FilterColumn Class. + * @param UikitLoader $uikitloader The UikitLoader Class. + * @param ContentOne $contentone The ContentOne Class. + * @param SiteDecrypt $sitedecrypt The SiteDecrypt Class. + * @param ModelExpertFieldInitiator $modelexpertfieldinitiator The ModelExpertFieldInitiator Class. + * @param SiteFieldData $sitefielddata The SiteFieldData Class. + * @param SiteFieldDecodeFilter $sitefielddecodefilter The SiteFieldDecodeFilter Class. + * @param OtherJoin $otherjoin The OtherJoin Class. + * @param OtherQuery $otherquery The OtherQuery Class. + * @param OtherFilter $otherfilter The OtherFilter Class. + * @param OtherWhere $otherwhere The OtherWhere Class. + * @param OtherOrder $otherorder The OtherOrder Class. + * @param OtherGroup $othergroup The OtherGroup Class. + * @param EventDispatcher $eventdispatcher The EventDispatcher Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Placeholder $placeholder, + FieldonContentPrepare $fieldoncontentprepare, + JoinStructure $joinstructure, DecodeColumn $decodecolumn, + FilterColumn $filtercolumn, UikitLoader $uikitloader, + ContentOne $contentone, SiteDecrypt $sitedecrypt, + ModelExpertFieldInitiator $modelexpertfieldinitiator, + SiteFieldData $sitefielddata, + SiteFieldDecodeFilter $sitefielddecodefilter, + OtherJoin $otherjoin, OtherQuery $otherquery, + OtherFilter $otherfilter, OtherWhere $otherwhere, + OtherOrder $otherorder, OtherGroup $othergroup, + EventDispatcher $eventdispatcher) + { + $this->config = $config; + $this->placeholder = $placeholder; + $this->fieldoncontentprepare = $fieldoncontentprepare; + $this->joinstructure = $joinstructure; + $this->decodecolumn = $decodecolumn; + $this->filtercolumn = $filtercolumn; + $this->uikitloader = $uikitloader; + $this->contentone = $contentone; + $this->sitedecrypt = $sitedecrypt; + $this->modelexpertfieldinitiator = $modelexpertfieldinitiator; + $this->sitefielddata = $sitefielddata; + $this->sitefielddecodefilter = $sitefielddecodefilter; + $this->otherjoin = $otherjoin; + $this->otherquery = $otherquery; + $this->otherfilter = $otherfilter; + $this->otherwhere = $otherwhere; + $this->otherorder = $otherorder; + $this->othergroup = $othergroup; + $this->eventdispatcher = $eventdispatcher; + } + + /** + * Get the dynamic get custom item methods. + * + * @param mixed $mainGet The main get object. + * @param string $code The code string. + * + * @return string The generated methods code. + * @since 5.1.2 + */ + public function get($mainGet, string $code): string + { + if (empty($mainGet) || empty($code)) + { + return ''; + } + + $methods = ''; + + $this->eventdispatcher->remove($code); + + if ($this->isValidCustomGet($mainGet)) + { + $methods = $this->processCustomGet($mainGet->custom_get, $code); + } + + $methods = $this->injectDispatcherIfNeeded($methods, $code); + + if (StringHelper::check($methods)) + { + return $methods . PHP_EOL; + } + + return ''; + } + + /** + * Check if the customGet object is valid. + * + * @param mixed $mainGet The main get object. + * + * @return boolean + * @since 5.1.2 + */ + private function isValidCustomGet($mainGet) + { + return ObjectHelper::check($mainGet) + && isset($mainGet->custom_get) + && ArrayHelper::check($mainGet->custom_get); + } + + /** + * Process all custom_get entries. + * + * @param array $customGets The custom get definitions. + * @param string $code The code string. + * + * @return string + * @since 5.1.2 + */ + private function processCustomGet(array $customGets, string $code): string + { + $methods = ''; + + foreach ($customGets as $get) + { + $this->removeCryptionTypes($code); + + if (($default = $this->joinstructure->get($get, $code)) !== null) + { + $methods .= $this->buildCustomMethod($get, $default); + $methods = $this->injectCryptionScript($methods, $default, $code); + } + } + + if (StringHelper::check($methods)) + { + $methods = str_replace(Placefix::_h('CRYPT'), '', $methods); + } + + return $methods; + } + + /** + * Remove cryption types for a given code. + * + * @param string $code The code string. + * + * @return void + * @since 5.1.2 + */ + private function removeCryptionTypes(string $code): void + { + foreach ($this->config->cryption_types as $cryptionType) + { + $this->sitedecrypt->remove("{$cryptionType}.{$code}"); + } + } + + /** + * Build the custom method code. + * + * @param array $get The get definition. + * @param array $default The default structure. + * + * @return string + * @since 5.1.2 + */ + private function buildCustomMethod(array $get, array $default): string + { + $methods = PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; + $methods .= PHP_EOL . Indent::_(1) . " *" . Line::_(__Line__, __Class__) . " Method to get an array of {$default['name']} Objects."; + $methods .= PHP_EOL . Indent::_(1) . " *"; + $methods .= PHP_EOL . Indent::_(1) . " * @return mixed An array of {$default['name']} Objects on success, false on failure."; + $methods .= PHP_EOL . Indent::_(1) . " *"; + $methods .= PHP_EOL . Indent::_(1) . " */"; + $methods .= PHP_EOL . Indent::_(1) . "public function get{$default['methodName']}(\${$default['on_field']})"; + $methods .= PHP_EOL . Indent::_(1) . "{" . Placefix::_h("CRYPT"); + + $methods .= $this->buildDatabaseSetup($get, $default); + $methods .= $this->applyQueryConditions($get, $default); + $methods .= $this->applyAdditionalBuilders($default); + $methods .= $this->buildQueryExecutionBlock($get, $default); + + $methods .= PHP_EOL . Indent::_(1) . "}"; + + return $methods; + } + + /** + * Build database setup section. + * + * @param array $get The get definition. + * @param array $default The default structure. + * + * @return string + * @since 5.1.2 + */ + private function buildDatabaseSetup(array $get, array $default): string + { + $methods = PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Get a db connection."; + + if ($this->config->get('joomla_version', 3) == 3) + { + $methods .= PHP_EOL . Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDbo();"; + } + else + { + $methods .= PHP_EOL . Indent::_(2) . "\$db = \$this->getDatabase();"; + } + + $methods .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Create a new query object."; + $methods .= PHP_EOL . Indent::_(2) . "\$query = \$db->getQuery(true);"; + $methods .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Get from {$get['selection']['table']} as {$default['as']}"; + $methods .= PHP_EOL . Indent::_(2) . $get['selection']['select']; + $methods .= PHP_EOL . Indent::_(2) . "\$query->from({$get['selection']['from']});"; + + return $methods; + } + + /** + * Apply query conditions. + * + * @param array $get The get definition. + * @param array $default The default structure. + * + * @return string + * @since 5.1.2 + */ + private function applyQueryConditions(array $get, array $default): string + { + $methods = ''; + + if ($get['operator'] === 'IN' || $get['operator'] === 'NOT IN') + { + $methods .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Check if \${$default['on_field']} is an array with values."; + $methods .= PHP_EOL . Indent::_(2) . "\$array = (Super_" . "__4b225c51_d293_48e4_b3f6_5136cf5c3f18___Power::check(\${$default['on_field']}, true)) ? json_decode(\${$default['on_field']}, true) : \${$default['on_field']};"; + $methods .= PHP_EOL . Indent::_(2) . "if (isset(\$array) && Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$array, true))"; + $methods .= PHP_EOL . Indent::_(2) . "{"; + $methods .= PHP_EOL . Indent::_(3) . "\$query->where('{$get['join_field']} {$get['operator']} (' . implode(',', \$array) . ')');"; + $methods .= PHP_EOL . Indent::_(2) . "}"; + $methods .= PHP_EOL . Indent::_(2) . "else"; + $methods .= PHP_EOL . Indent::_(2) . "{"; + $methods .= PHP_EOL . Indent::_(3) . "return false;"; + $methods .= PHP_EOL . Indent::_(2) . "}"; + } + else + { + $methods .= PHP_EOL . Indent::_(2) . "\$query->where('{$get['join_field']} {$get['operator']} ' . \$db->quote(\${$default['on_field']}));"; + } + + return $methods; + } + + /** + * Apply additional builder parts (query, filter, where, order, group). + * + * @param array $default The default structure. + * + * @return string + * @since 5.1.2 + */ + private function applyAdditionalBuilders(array $default): string + { + $methods = ''; + + foreach (['otherquery', 'otherfilter', 'otherwhere', 'otherorder', 'othergroup'] as $builderType) + { + foreach ($this->{$builderType}->get( + $this->config->build_target . '.' . $default['code'] . '.' . $default['as'], [] + ) as $string) + { + $methods .= $string; + } + } + + return $methods; + } + + /** + * Build query execution and result processing. + * + * @param array $get The get definition. + * @param array $default The default structure. + * + * @return string + * @since 5.1.2 + */ + private function buildQueryExecutionBlock(array $get, array $default): string + { + $code = PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " Reset the query using our newly populated query object."; + $code .= PHP_EOL . Indent::_(2) . '$db->setQuery($query);'; + $code .= PHP_EOL . Indent::_(2) . '$db->execute();'; + + $code .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " check if there was data returned"; + $code .= PHP_EOL . Indent::_(2) . 'if ($db->getNumRows())'; + $code .= PHP_EOL . Indent::_(2) . '{' . Placefix::_h("DISPATCHER"); + + $code .= $this->buildConditionalDecodingBlock($get, $default); + + $code .= PHP_EOL . Indent::_(2) . "}"; + $code .= PHP_EOL . Indent::_(2) . "return false;"; + + return $code; + } + + /** + * Build the conditional field processing block if decoding, UIkit, filters, or joins are needed. + * + * @param array $get The get definition. + * @param array $default The default structure. + * + * @return string The formatted PHP code string to execute the conditional field logic. + * @since 5.1.2 + */ + private function buildConditionalDecodingBlock(array $get, array $default): string + { + if (!isset($default['code'], $get['key'], $default['as'])) + { + return ''; + } + + $path = $default['code'] . '.' . $get['key'] . '.' . $default['as']; + $code = $default['code']; + + $decodeChecker = $this->sitefielddata->get('decode.' . $path); + $decodeFilter = $this->sitefielddecodefilter->get($this->config->build_target . '.' . $path); + $uikitChecker = $this->sitefielddata->get('uikit.' . $path); + $contentprepareChecker = $this->sitefielddata->get('textareas.' . $path); + $joinedChecker = $this->otherjoin->get($this->config->build_target . '.' . $code . '.' . $default['as']); + + $decoder = $this->getDecoderCode($get, $code, $decodeChecker); + $decoderFilter = $this->getDecoderFilterCode($get, $code, $decodeFilter); + $contentPrepare = $this->getContentPrepareCode($get, $code, $contentprepareChecker); + $uikit = $this->getUIKitCode($get, $code, $uikitChecker); + $joinCode = $this->getJoinCode($joinedChecker); + + if ($this->hasFieldProcessing($decoder, $decoderFilter, $contentPrepare, $uikit, $joinCode)) + { + return $this->buildFieldProcessingBlock($decoder, $decoderFilter, $contentPrepare, $uikit, $joinCode); + } + + return PHP_EOL . Indent::_(3) . 'return $db->loadObjectList();'; + } + + /** + * Generate decoder block code for the matched field set. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param array|null $checker The decoder rules to apply (if any). + * + * @return string The decoder logic code block or an empty string. + * @since 5.1.2 + */ + private function getDecoderCode(array $get, string $code, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->decodecolumn->get($get, $checker, '$item', $code, Indent::_(2)) + : ''; + } + + /** + * Generate filter decoder block for field-specific filters. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param array|null $checker The filter configuration to apply (if any). + * + * @return string The filtered decoder code block or an empty string. + * @since 5.1.2 + */ + private function getDecoderFilterCode(array $get, string $code, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->filtercolumn->get($get, $checker, '$item', '$items[$nr]', $code, Indent::_(2)) + : ''; + } + + /** + * Generate content preparation code for specified textarea fields. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param array|null $checker The content prepare configuration to apply (if any). + * + * @return string The content prepare code block or an empty string. + * @since 5.1.2 + */ + private function getContentPrepareCode(array $get, string $code, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->fieldoncontentprepare->get($get, $checker, '$item', $code, Indent::_(2)) + : ''; + } + + /** + * Generate UIkit-specific field formatting code. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param array|null $checker The UIkit config for visual formatting (if any). + * + * @return string The UIkit loader code block or an empty string. + * @since 5.1.2 + */ + private function getUIKitCode(array $get, string $code, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->uikitloader->get($get, $checker, '$item', $code, Indent::_(2)) + : ''; + } + + /** + * Generate and update placeholder code for joined field strings. + * + * @param array|null $joinedChecker The joined fields configuration (if any). + * + * @return string The join code block with placeholders replaced or an empty string. + * @since 5.1.2 + */ + private function getJoinCode(?array $joinedChecker): string + { + if ($joinedChecker === null || !ArrayHelper::check($joinedChecker)) + { + return ''; + } + + $code = ''; + $placeholders = [ + Placefix::_h('TAB') => Indent::_(2), + Placefix::_h('STRING') => '$item', + ]; + + foreach ($joinedChecker as $joinedString) + { + $code .= $this->placeholder->update($joinedString, $placeholders); + } + + return $code; + } + + /** + * Check if any of the provided code parts contain executable logic. + * + * @param string ...$parts The list of code strings to evaluate. + * + * @return bool True if any string is non-empty and valid. + * @since 5.1.2 + */ + private function hasFieldProcessing(string ...$parts): bool + { + foreach ($parts as $part) + { + if (StringHelper::check($part)) + { + return true; + } + } + return false; + } + + /** + * Build the complete foreach loop block to process all returned items. + * + * @param string $decoder The decoder block. + * @param string $decoderFilter The decoder filter block. + * @param string $contentPrepare The content prepare block. + * @param string $uikit The UIkit block. + * @param string $joinCode The join block. + * + * @return string The complete loop and return block for $items. + * @since 5.1.2 + */ + private function buildFieldProcessingBlock( + string $decoder, + string $decoderFilter, + string $contentPrepare, + string $uikit, + string $joinCode + ): string + { + $code = PHP_EOL . Indent::_(3) . '$items = $db->loadObjectList();'; + $code .= PHP_EOL . PHP_EOL . Indent::_(3) . "//" . Line::_(__LINE__, __CLASS__) . " Convert the parameter fields into objects."; + $code .= PHP_EOL . Indent::_(3) . 'foreach ($items as $nr => &$item)'; + $code .= PHP_EOL . Indent::_(3) . '{'; + + foreach ([$decoder, $decoderFilter, $contentPrepare, $uikit, $joinCode] as $block) + { + if (StringHelper::check($block)) + { + $code .= $block; + } + } + + $code .= PHP_EOL . Indent::_(3) . '}'; + $code .= PHP_EOL . Indent::_(3) . 'return $items;'; + + return $code; + } + + /** + * Inject cryption script into methods. + * + * @param string $methods The current methods string. + * @param array $default The default structure. + * @param string $code The code string. + * + * @return string + * @since 5.1.2 + */ + private function injectCryptionScript(string $methods, array $default, $code): string + { + // set the script if it was found + $Component = $this->contentone->get('Component'); + $script = ''; + foreach ($this->config->cryption_types as $cryptionType) + { + if ($this->sitedecrypt->get("{$cryptionType}.{$code}") !== null) + { + if ('expert' !== $cryptionType) + { + $script .= PHP_EOL . Indent::_(2) . "//" + . Line::_(__Line__, __Class__) . " Get the " + . $cryptionType . " encryption."; + $script .= PHP_EOL . Indent::_(2) . "\$" + . $cryptionType . "key = " . $Component + . "Helper::getCryptKey('" + . $cryptionType . "');"; + $script .= PHP_EOL . Indent::_(2) . "//" + . Line::_(__Line__, __Class__) + . " Get the encryption object."; + $script .= PHP_EOL . Indent::_(2) . "\$" + . $cryptionType + . " = new Super_" . "__99175f6d_dba8_4086_8a65_5c4ec175e61d___Power(\$" + . $cryptionType . "key);" . PHP_EOL; + } + elseif ($this->modelexpertfieldinitiator->exists("{$code}.get")) + { + foreach ($this->modelexpertfieldinitiator->get("{$code}.get") as $block) + { + $script .= PHP_EOL . Indent::_(2) . implode( + PHP_EOL . Indent::_(2), $block + ); + } + } + } + } + + return str_replace(Placefix::_h('CRYPT'), $script, $methods); + } + + /** + * Inject dispatcher code if needed. + * + * @param string $methods The methods string. + * @param string $code The code string. + * + * @return string + * @since 5.1.2 + */ + private function injectDispatcherIfNeeded(string $methods, string $code): string + { + if (strpos($methods, (string) Placefix::_h('DISPATCHER')) !== false) + { + $methods = str_replace( + Placefix::_h('DISPATCHER'), + $this->eventdispatcher->get($code, ''), + $methods + ); + } + + return $methods; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/CustomJoin.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/CustomJoin.php new file mode 100644 index 000000000..d01894c40 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/CustomJoin.php @@ -0,0 +1,209 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteDynamicGet; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherJoin; +use VDM\Joomla\Componentbuilder\Compiler\Builder\GetAsLookup; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\JoinStructure; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Utilities\ArrayHelper; + + +/** + * Dynamic Get Custom Join + * + * @since 5.1.2 + */ +final class CustomJoin +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The SiteDynamicGet Class. + * + * @var SiteDynamicGet + * @since 5.1.2 + */ + protected SiteDynamicGet $sitedynamicget; + + /** + * The OtherJoin Class. + * + * @var OtherJoin + * @since 5.1.2 + */ + protected OtherJoin $otherjoin; + + /** + * The GetAsLookup Class. + * + * @var GetAsLookup + * @since 5.1.2 + */ + protected GetAsLookup $getaslookup; + + /** + * The JoinStructure Class. + * + * @var JoinStructure + * @since 5.1.2 + */ + protected JoinStructure $joinstructure; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param SiteDynamicGet $sitedynamicget The SiteDynamicGet Class. + * @param OtherJoin $otherjoin The OtherJoin Class. + * @param GetAsLookup $getaslookup The GetAsLookup Class. + * @param JoinStructure $joinstructure The JoinStructure Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, SiteDynamicGet $sitedynamicget, + OtherJoin $otherjoin, GetAsLookup $getaslookup, + JoinStructure $joinstructure) + { + $this->config = $config; + $this->sitedynamicget = $sitedynamicget; + $this->otherjoin = $otherjoin; + $this->getaslookup = $getaslookup; + $this->joinstructure = $joinstructure; + } + + /** + * Get the dynamic get custom join code. + * + * @param array $gets The array of join definitions. + * @param string $string The target variable name in generated code. + * @param string $code The code identifier for the join. + * @param array $asBucket The array of already processed join aliases. + * @param string $tab The indentation tab string for formatting (optional). + * + * @return string The generated custom join code block or an empty string. + * @since 5.1.2 + */ + public function get(array $gets, string $string, string $code, array $asBucket, string $tab = ''): string + { + if (empty($gets) || empty($string) || empty($code)) + { + return ''; + } + + $customJoin = ''; + + foreach ($gets as $get) + { + // Retrieve join structure + $default = $this->joinstructure->get($get, $code); + + if ($default === null) + { + continue; + } + + if ($this->check($default, $get, $asBucket)) + { + // Build 'other join' string + $otherJoin = PHP_EOL . Indent::_(1) . Placefix::_h('TAB') + . Indent::_(1) . '//' . Line::_( __LINE__, __CLASS__) + . ' set ' . $default['valueName'] . ' to the ' + . Placefix::_h('STRING') . ' object.'; + + $otherJoin .= PHP_EOL . Indent::_(1) . Placefix::_h('TAB') + . Indent::_(1) . Placefix::_h('STRING') . '->' + . $default['valueName'] . ' = $this->get' + . $default['methodName'] . '(' . Placefix::_h('STRING') . '->' + . $this->getaslookup + ->get($get['key'] . '.' . $get['on_field'], 'Error') + . ');'; + + $join_field_ = $this->sitedynamicget->get( + $this->config->build_target . + '.' . $default['code'] . '.' . $default['as'] . '.' . $default['join_field'], + 'ZZZ' + ); + + // Store in other join collection + $this->otherjoin->add( + $this->config->build_target . + '.' . $default['code'] . '.' . $join_field_ . '.' . $default['valueName'], + $otherJoin, + false + ); + } + else + { + // Build custom join string + $customJoin .= PHP_EOL . Indent::_(1) . $tab + . Indent::_(1) . '//' . Line::_( __LINE__, __CLASS__) + . ' set ' . $default['valueName'] . ' to the ' + . $string . ' object.'; + + $customJoin .= PHP_EOL . Indent::_(1) . $tab + . Indent::_(1) . $string . '->' + . $default['valueName'] . ' = $this->get' + . $default['methodName'] . '(' . $string . '->' + . $this->getaslookup->get($get['key'] . '.' . $get['on_field'], 'Error') + . ');'; + } + } + + return $customJoin; + } + + /** + * Determine whether a join should be processed as a separate join. + * + * @param array $default The join structure details (passed by reference). + * @param array $get The current join definition (passed by reference). + * @param array $asBucket The list of already processed join aliases (passed by reference). + * + * @return bool True if the join should be processed separately, false otherwise. + * @since 5.1.2 + */ + public function check(array $default, array $get, array $asBucket): bool + { + // Extract alias from on_field + list($aJoin) = explode('.', (string) $get['on_field']); + + // If alias already in bucket, skip + if (in_array($aJoin, $asBucket)) + { + return false; + } + + // Check if join exists in dynamic config + if ($this->sitedynamicget->exists( + $this->config->build_target . '.' . $default['code'] . '.' . + $default['as'] . '.' . $default['join_field'] + )) + { + return true; + } + + return false; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Data.php index 91469812f..59eefaaa2 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Data.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Data.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Registry; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; @@ -102,28 +102,30 @@ class Data protected Dynamicget $dynamic; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. * - * @param Config $config The Config Class. - * @param Registry $registry The Registry Class. - * @param Event $event The EventInterface Class. - * @param Customcode $customcode The Customcode Class. - * @param Dispenser $dispenser The Dispenser Class. - * @param Gui $gui The Gui Class. - * @param Dynamicget $dynamicget The Dynamicget Class. + * @param Config $config The Config Class. + * @param Registry $registry The Registry Class. + * @param Event $event The EventInterface Class. + * @param Customcode $customcode The Customcode Class. + * @param Dispenser $dispenser The Dispenser Class. + * @param Gui $gui The Gui Class. + * @param Dynamicget $dynamicget The Dynamicget Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ public function __construct(Config $config, Registry $registry, Event $event, Customcode $customcode, Dispenser $dispenser, Gui $gui, - Dynamicget $dynamicget) + Dynamicget $dynamicget, DatabaseInterface $db) { $this->config = $config; $this->registry = $registry; @@ -132,7 +134,7 @@ class Data $this->dispenser = $dispenser; $this->gui = $gui; $this->dynamic = $dynamicget; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/DecodeColumn.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/DecodeColumn.php new file mode 100644 index 000000000..7c736f9ee --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/DecodeColumn.php @@ -0,0 +1,197 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ModelExpertField; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteDecrypt; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; + + +/** + * Custom View Decode Column + * + * @since 5.1.2 + */ +final class DecodeColumn +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ModelExpertField Class. + * + * @var ModelExpertField + * @since 5.1.2 + */ + protected ModelExpertField $expert; + + /** + * The SiteDecrypt Class. + * + * @var SiteDecrypt + * @since 5.1.2 + */ + protected SiteDecrypt $sitedecrypt; + + /** + * The loadTracker array. + * + * @var array + * @since 5.1.2 + */ + protected array $loadTracker = []; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ModelExpertField $modelexpertfield The ModelExpertField Class. + * @param SiteDecrypt $sitedecrypt The SiteDecrypt Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Placeholder $placeholder, + ModelExpertField $modelexpertfield, SiteDecrypt $sitedecrypt) + { + $this->config = $config; + $this->placeholder = $placeholder; + $this->expert = $modelexpertfield; + $this->sitedecrypt = $sitedecrypt; + } + + /** + * Generate the decode logic for a column in the custom view. + * + * @param array $get The get array with view configuration. + * @param array $checker Field decode configuration. + * @param string $string The variable representing the row object. + * @param string $code The calling context code string. + * @param string $tab Optional indentation tab prefix. + * + * @return string The generated decode logic. + * @since 5.1.2 + */ + public function get(array $get, array $checker, string $string, string $code, string $tab = ''): string + { + if (empty($get['key']) || empty($get['selection']['select']) || empty($checker) || empty($string) || empty($code)) + { + return ''; + } + + $fieldDecode = ''; + + foreach ($checker as $field => $array) + { + $key = md5($code . $get['key'] . $string . $field); + + if (strpos((string) $get['selection']['select'], (string) $field) !== false + && !isset($this->loadTracker[$key]) + && ArrayHelper::check($array['decode'])) + { + $this->loadTracker[$key] = $key; + + $array['decode'] = (array) array_unique(array_reverse((array) $array['decode'])); + + foreach ($array['decode'] as $decode) + { + $if = ''; + $decoder = ''; + + if ($decode === 'json') + { + $if = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "if (isset({$string}->{$field}) && Super__"."_4b225c51_d293_48e4_b3f6_5136cf5c3f18___Power::check({$string}->{$field}))" . PHP_EOL + . Indent::_(1) . $tab . Indent::_(1) . "{"; + $decoder = "{$string}->{$field} = json_decode({$string}->{$field}, true);"; + } + elseif ($decode === 'base64') + { + $if = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "if (!empty({$string}->{$field}) && {$string}->{$field} === base64_encode(base64_decode({$string}->{$field})))" . PHP_EOL + . Indent::_(1) . $tab . Indent::_(1) . "{"; + $decoder = "{$string}->{$field} = base64_decode({$string}->{$field});"; + } + elseif (strpos((string) $decode, '_encryption') !== false || $decode === 'expert_mode') + { + foreach ($this->config->cryption_types as $cryptionType) + { + if ($decode === $cryptionType . '_encryption' || $decode === $cryptionType . '_mode') + { + if ($cryptionType !== 'expert') + { + $if = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "if (!empty({$string}->{$field}) && \${$cryptionType}key && !is_numeric({$string}->{$field}) && {$string}->{$field} === base64_encode(base64_decode({$string}->{$field}, true)))" . PHP_EOL + . Indent::_(1) . $tab . Indent::_(1) . "{"; + $decoder = "{$string}->{$field} = rtrim(\${$cryptionType}->decryptString({$string}->{$field}), \"\0\");"; + } + elseif ($this->expert->exists($array['admin_view'] . '.' . $field)) + { + $_placeholder_for_field = [ + '[[[field]]]' => "{$string}->{$field}" + ]; + + $fieldDecode .= $this->placeholder->update( + PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . implode( + PHP_EOL . Indent::_(1) . $tab . Indent::_(1), + $this->{$cryptionType}->get($array['admin_view'] . '.' . $field . '.get', ['error']) + ), + $_placeholder_for_field + ); + } + + $this->sitedecrypt->set("{$cryptionType}.{$code}", $decode); + } + } + } + + if (StringHelper::check($if)) + { + $fieldDecode .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "//" . Line::_(__LINE__, __CLASS__) . " Check if we can decode {$field}" . $if + . PHP_EOL . Indent::_(1) . $tab . Indent::_(2) + . "//" . Line::_(__LINE__, __CLASS__) . " Decode {$field}"; + } + + if (StringHelper::check($decoder)) + { + $fieldDecode .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) . $decoder + . PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "}"; + } + } + } + } + + return $fieldDecode; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/FieldonContentPrepare.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/FieldonContentPrepare.php new file mode 100644 index 000000000..e9e3aee6c --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/FieldonContentPrepare.php @@ -0,0 +1,179 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\EventDispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; + + +/** + * Dynamic Get Field on Content Prepare + * + * @since 5.1.2 + */ +final class FieldonContentPrepare +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The EventDispatcher Class. + * + * @var EventDispatcher + * @since 5.1.2 + */ + protected EventDispatcher $eventdispatcher; + + /** + * The loadTracker array. + * + * @var array + * @since 5.1.2 + */ + protected array $loadTracker = []; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param ContentOne $contentone The ContentOne Class. + * @param EventDispatcher $eventdispatcher The EventDispatcher Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, ContentOne $contentone, + EventDispatcher $eventdispatcher) + { + $this->config = $config; + $this->contentone = $contentone; + $this->eventdispatcher = $eventdispatcher; + } + + /** + * Get the content preparation plugin logic for a field. + * + * @param array $get The get array passed in. + * @param array $checker The checker structure containing field info. + * @param string $string The string name for the object. + * @param string $code The code to use as fallback context. + * @param string $tab Indentation tab prefix. + * + * @return string The content preparation PHP string. + * @since 5.1.2 + */ + public function get($get, $checker, $string, $code, $tab = ''): string + { + if (empty($get['key']) || empty($get['selection']['select']) || empty($checker) || empty($string) || empty($code)) + { + return ''; + } + + $fieldPrepare = ''; + $runplugins = ''; + + // set component + $Component = $this->contentone->get('Component'); + + // set context + $context = (isset($get['context'])) ? $get['context'] : $code; + $context = 'com_' . $this->config->component_code_name . '.' . $context; + + // load params builder only once + $params = false; + + foreach ($checker as $field => $array) + { + // build load counter + $key = md5($get['key'] . $string . $field); + // check if we should load this again + if (strpos((string) $get['selection']['select'], (string) $field) !== false + && !isset($this->loadTracker[$key])) + { + // set the key + $this->loadTracker[$key] = $key; + + // build decoder string + if (empty($runplugins)) + { + $runplugins = PHP_EOL . $tab . Indent::_(1) . "//" + . Line::_(__Line__, __Class__) + . " Load the JEvent Dispatcher"; + $runplugins .= PHP_EOL . $tab . Indent::_(1) + . "PluginHelper::importPlugin('content');"; + $runplugins .= PHP_EOL . $tab . Indent::_(1) + . '$this->_dispatcher = Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getApplication();'; + } + + if (!$params) + { + $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_( + 1 + ) . "//" . Line::_(__Line__, __Class__) + . " Check if item has params, or pass whole item."; + $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_( + 1 + ) . "\$params = (isset(" . $string . "->params) && " + . "Super_" . "__4b225c51_d293_48e4_b3f6_5136cf5c3f18___Power::check(" . $string + . "->params)) ? json_decode(" . $string . "->params) : " + . $string . ";"; + $params = true; + } + + $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "//" . Line::_(__Line__, __Class__) + . " Make sure the content prepare plugins fire on " + . $field; + $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$_" . $field . " = new \stdClass();"; + $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$_" . $field . '->text =& ' . $string . '->' . $field + . '; //' . Line::_(__Line__, __Class__) + . ' value must be in text'; + $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "//" . Line::_(__Line__, __Class__) + . " Since all values are now in text (Joomla Limitation), we also add the field name (" + . $field . ") to context"; + $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . '$this->_dispatcher->triggerEvent("onContentPrepare", array(\'' + . $context . '.' . $field . '\', &$_' . $field + . ', &$params, 0));'; + } + } + + // load dispatcher + if (!empty($runplugins)) + { + $this->eventdispatcher->set($code, $runplugins); + } + + // return content prepare fix + return $fieldPrepare; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/FilterColumn.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/FilterColumn.php new file mode 100644 index 000000000..08f39bf6c --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/FilterColumn.php @@ -0,0 +1,191 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; + + +/** + * Custom View Filter Column + * + * @since 5.1.2 + */ +final class FilterColumn +{ + /** + * A tracker to avoid repeating load logic per field. + * + * @var array + * @since 5.1.2 + */ + protected array $loadTracker = []; + + /** + * Get the Custom View Field Decode Filter code block. + * + * @param array $get The GET metadata for the current field. + * @param array $filters The filters to apply on the field. + * @param string $string The variable name representing the current object. + * @param string $removeString The variable name for object removal context. + * @param string $code The custom view identifier code. + * @param string $tab The tab level for indent formatting. + * + * @return string The generated PHP filter code block. + * @since 5.1.2 + */ + public function get( + array $get, + array $filters, + string $string, + string $removeString, + string $code, + string $tab + ): string + { + if (empty($get['key']) || empty($get['selection']['select']) || empty($filters) || empty($string) || empty($code)) + { + return ''; + } + + $filter = ''; + + if (ArrayHelper::check($filters)) + { + foreach ($filters as $field => $ter) + { + if (empty($ter['table_key'])) + { + continue; + } + + $key = md5($code . $get['key'] . $string . $ter['table_key']); + + if (strpos((string) $get['selection']['select'], (string) $ter['table_key']) !== false && + !isset($this->loadTracker[$key])) + { + $this->loadTracker[$key] = $key; + + list($as, $felt) = array_map('trim', explode('.', (string) $ter['table_key'])); + + if ($get['as'] === $as && + isset($ter['filter_type']) && + is_numeric($ter['filter_type'])) + { + $filter .= $this->getFilterCodeByType($ter['filter_type'], $string, $removeString, $field, $tab, $as); + } + } + } + } + + return $filter; + } + + /** + * Generate the PHP code string for a specific filter type. + * + * @param int $type + * @param string $string + * @param string $removeString + * @param string $field + * @param string $tab + * @param string $as + * + * @return string + * @since 5.1.2 + */ + protected function getFilterCodeByType( + int $type, + string $string, + string $removeString, + string $field, + string $tab, + string $as + ): string + { + $code = ''; + $t1 = Indent::_(1) . $tab . Indent::_(1); + $t2 = Indent::_(1) . $tab . Indent::_(2); + $t3 = Indent::_(1) . $tab . Indent::_(3); + + switch ($type) + { + case 4: // User Groups + $code .= PHP_EOL . PHP_EOL . $t1 . "//" . Line::_(__LINE__, __CLASS__) . " filter $as based on user groups"; + $code .= PHP_EOL . $t1 . "\$remove = (count(array_intersect((array) \$this->groups, (array) {$string}->{$field}))) ? false : true;"; + $code .= PHP_EOL . $t1 . "if (\$remove)"; + $code .= PHP_EOL . $t1 . "{"; + $code .= $this->getRemovalCode($string, $removeString, $t2); + $code .= PHP_EOL . $t1 . "}"; + break; + + case 9: // Array Value + $code .= PHP_EOL . PHP_EOL . $t1 . "if (Super__"."_0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check({$string}->{$field}))"; + $code .= PHP_EOL . $t1 . "{"; + $code .= PHP_EOL . $t2 . "//" . Line::_(__LINE__, __CLASS__) . " do your thing here"; + $code .= PHP_EOL . $t1 . "}"; + $code .= PHP_EOL . $t1 . "else"; + $code .= PHP_EOL . $t1 . "{"; + $code .= $this->getRemovalCode($string, $removeString, $t2); + $code .= PHP_EOL . $t1 . "}"; + break; + + case 10: // Repeatable Value + $code .= PHP_EOL . PHP_EOL . $t1 . "//" . Line::_(__LINE__, __CLASS__) . " filter $as based on repeatable value"; + $code .= PHP_EOL . $t1 . "if (Super__"."_1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check({$string}->{$field}))"; + $code .= PHP_EOL . $t1 . "{"; + $code .= PHP_EOL . $t2 . "\$array = json_decode({$string}->{$field}, true);"; + $code .= PHP_EOL . $t2 . "if (Super__"."_0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$array))"; + $code .= PHP_EOL . $t2 . "{"; + $code .= PHP_EOL . $t3 . "//" . Line::_(__LINE__, __CLASS__) . " do your thing here"; + $code .= PHP_EOL . $t2 . "}"; + $code .= PHP_EOL . $t2 . "else"; + $code .= PHP_EOL . $t2 . "{"; + $code .= $this->getRemovalCode($string, $removeString, $t3); + $code .= PHP_EOL . $t2 . "}"; + $code .= PHP_EOL . $t1 . "}"; + $code .= PHP_EOL . $t1 . "else"; + $code .= PHP_EOL . $t1 . "{"; + $code .= $this->getRemovalCode($string, $removeString, $t2); + $code .= PHP_EOL . $t1 . "}"; + break; + } + + return $code; + } + + /** + * Generate the PHP code line to remove or unset a variable. + * + * @param string $string + * @param string $removeString + * @param string $indent + * + * @return string + * @since 5.1.2 + */ + protected function getRemovalCode(string $string, string $removeString, string $indent): string + { + if ($removeString == $string) + { + return PHP_EOL . $indent . "//" . Line::_(__LINE__, __CLASS__) . " Remove $string if not valid." + . PHP_EOL . $indent . "$string = null;" + . PHP_EOL . $indent . "return false;"; + } + + return PHP_EOL . $indent . "//" . Line::_(__LINE__, __CLASS__) . " Unset $string if not valid." + . PHP_EOL . $indent . "unset($removeString);" + . PHP_EOL . $indent . "continue;"; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/GetItem.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/GetItem.php new file mode 100644 index 000000000..360b72df2 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/GetItem.php @@ -0,0 +1,818 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteDecrypt; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Language; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFieldData; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFieldDecodeFilter; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ModelExpertFieldInitiator; +use VDM\Joomla\Componentbuilder\Compiler\Builder\EventDispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\DecodeColumn; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\FilterColumn; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\FieldonContentPrepare; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\UikitLoader; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Globals; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\CustomJoin; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Queries; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryFilter; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryWhere; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryOrder; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryGroup; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; + + +/** + * Dynamic Get GetItem + * + * @since 5.1.2 + */ +final class GetItem +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The SiteDecrypt Class. + * + * @var SiteDecrypt + * @since 5.1.2 + */ + protected SiteDecrypt $sitedecrypt; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The Language Class. + * + * @var Language + * @since 5.1.2 + */ + protected Language $language; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The SiteFieldData Class. + * + * @var SiteFieldData + * @since 5.1.2 + */ + protected SiteFieldData $sitefielddata; + + /** + * The SiteFieldDecodeFilter Class. + * + * @var SiteFieldDecodeFilter + * @since 5.1.2 + */ + protected SiteFieldDecodeFilter $sitefielddecodefilter; + + /** + * The ModelExpertFieldInitiator Class. + * + * @var ModelExpertFieldInitiator + * @since 5.1.2 + */ + protected ModelExpertFieldInitiator $modelexpertfieldinitiator; + + /** + * The EventDispatcher Class. + * + * @var EventDispatcher + * @since 5.1.2 + */ + protected EventDispatcher $eventdispatcher; + + /** + * The DecodeColumn Class. + * + * @var DecodeColumn + * @since 5.1.2 + */ + protected DecodeColumn $decodecolumn; + + /** + * The FilterColumn Class. + * + * @var FilterColumn + * @since 5.1.2 + */ + protected FilterColumn $filtercolumn; + + /** + * The FieldonContentPrepare Class. + * + * @var FieldonContentPrepare + * @since 5.1.2 + */ + protected FieldonContentPrepare $fieldoncontentprepare; + + /** + * The UikitLoader Class. + * + * @var UikitLoader + * @since 5.1.2 + */ + protected UikitLoader $uikitloader; + + /** + * The Globals Class. + * + * @var Globals + * @since 5.1.2 + */ + protected Globals $globals; + + /** + * The CustomJoin Class. + * + * @var CustomJoin + * @since 5.1.2 + */ + protected CustomJoin $customjoin; + + /** + * The Queries Class. + * + * @var Queries + * @since 5.1.2 + */ + protected Queries $queries; + + /** + * The QueryFilter Class. + * + * @var QueryFilter + * @since 5.1.2 + */ + protected QueryFilter $queryfilter; + + /** + * The QueryWhere Class. + * + * @var QueryWhere + * @since 5.1.2 + */ + protected QueryWhere $querywhere; + + /** + * The QueryOrder Class. + * + * @var QueryOrder + * @since 5.1.2 + */ + protected QueryOrder $queryorder; + + /** + * The QueryGroup Class. + * + * @var QueryGroup + * @since 5.1.2 + */ + protected QueryGroup $querygroup; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param SiteDecrypt $sitedecrypt The SiteDecrypt Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param Language $language The Language Class. + * @param ContentOne $contentone The ContentOne Class. + * @param SiteFieldData $sitefielddata The SiteFieldData Class. + * @param SiteFieldDecodeFilter $sitefielddecodefilter The SiteFieldDecodeFilter Class. + * @param ModelExpertFieldInitiator $modelexpertfieldinitiator The ModelExpertFieldInitiator Class. + * @param EventDispatcher $eventdispatcher The EventDispatcher Class. + * @param DecodeColumn $decodecolumn The DecodeColumn Class. + * @param FilterColumn $filtercolumn The FilterColumn Class. + * @param FieldonContentPrepare $fieldoncontentprepare The FieldonContentPrepare Class. + * @param UikitLoader $uikitloader The UikitLoader Class. + * @param Globals $globals The Globals Class. + * @param CustomJoin $customjoin The CustomJoin Class. + * @param Queries $queries The Queries Class. + * @param QueryFilter $queryfilter The QueryFilter Class. + * @param QueryWhere $querywhere The QueryWhere Class. + * @param QueryOrder $queryorder The QueryOrder Class. + * @param QueryGroup $querygroup The QueryGroup Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, SiteDecrypt $sitedecrypt, + Placeholder $placeholder, Language $language, + ContentOne $contentone, SiteFieldData $sitefielddata, + SiteFieldDecodeFilter $sitefielddecodefilter, + ModelExpertFieldInitiator $modelexpertfieldinitiator, + EventDispatcher $eventdispatcher, + DecodeColumn $decodecolumn, FilterColumn $filtercolumn, + FieldonContentPrepare $fieldoncontentprepare, + UikitLoader $uikitloader, Globals $globals, + CustomJoin $customjoin, Queries $queries, + QueryFilter $queryfilter, QueryWhere $querywhere, + QueryOrder $queryorder, QueryGroup $querygroup) + { + $this->config = $config; + $this->sitedecrypt = $sitedecrypt; + $this->placeholder = $placeholder; + $this->language = $language; + $this->contentone = $contentone; + $this->sitefielddata = $sitefielddata; + $this->sitefielddecodefilter = $sitefielddecodefilter; + $this->modelexpertfieldinitiator = $modelexpertfieldinitiator; + $this->eventdispatcher = $eventdispatcher; + $this->decodecolumn = $decodecolumn; + $this->filtercolumn = $filtercolumn; + $this->fieldoncontentprepare = $fieldoncontentprepare; + $this->uikitloader = $uikitloader; + $this->globals = $globals; + $this->customjoin = $customjoin; + $this->queries = $queries; + $this->queryfilter = $queryfilter; + $this->querywhere = $querywhere; + $this->queryorder = $queryorder; + $this->querygroup = $querygroup; + } + + /** + * Get the dynamic get item method. + * + * @param mixed $get The get object. + * @param string $code The code string. + * @param string $tab The tab spacing. + * @param string $type The type (main|custom). + * + * @return string The generated PHP code block. + * @since 5.1.2 + */ + public function get($get, string $code, string $tab = '', string $type = 'main'): string + { + if (!ObjectHelper::check($get) || empty($code)) + { + return PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" . Line::_(__LINE__, __CLASS__) . "add your custom code here."; + } + + $this->removeCryptionTypes($code); + + $getItem = $this->addPhpBeforeItem($get); + $getItem .= $this->getDatabaseSetup($tab); + $getItem .= $this->buildMainQuery($get, $code, $tab); + $getItem .= $this->buildPostQueryPlaceholder($get); + $getItem = $this->replaceQueryPlaceholderIfNeeded($getItem, $tab); + $getItem .= $this->buildEmptyDataFailSafe($type, $tab, $code); + $getItem .= Placefix::_h("DISPATCHER"); + + $asBucket = []; + if (isset($get->main_get) && ArrayHelper::check($get->main_get)) + { + $getItem .= $this->buildPostProcessFieldChecks($get, $code, $tab, $asBucket); + } + + $script = $this->buildCryptionScript($code, $tab); + $getItem = $script . $getItem; + $getItem .= $this->buildGlobals($get, $code, $tab, $asBucket); + $getItem .= $this->buildCustomJoin($get, $code, $tab, $asBucket); + $getItem .= $this->buildCalculation($get, $tab); + $getItem .= $this->buildReturnBlock($type, $tab); + $getItem = $this->injectDispatcherIfNeeded($getItem, $code); + + return $getItem; + } + + /** + * Remove all cryption type flags for this code. + * + * @param string $code + * + * @return void + * @since 5.1.2 + */ + private function removeCryptionTypes(string $code): void + { + foreach ($this->config->cryption_types as $cryptionType) + { + $this->sitedecrypt->remove("{$cryptionType}.{$code}"); + } + } + + /** + * Add custom PHP before the get item block. + * + * @param object $get + * + * @return string + * @since 5.1.2 + */ + private function addPhpBeforeItem(object $get): string + { + if ( + isset($get->add_php_before_getitem) && $get->add_php_before_getitem == 1 + && isset($get->php_before_getitem) && StringHelper::check($get->php_before_getitem) + ) + { + return $this->placeholder->update_($get->php_before_getitem); + } + return ''; + } + + /** + * Build the DB connection and query setup. + * + * @param string $tab + * + * @return string + * @since 5.1.2 + */ + private function getDatabaseSetup(string $tab): string + { + $dbSetup = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" . Line::_(__LINE__, __CLASS__) . " Get a db connection."; + + if ($this->config->get('joomla_version', 3) == 3) + { + $dbSetup .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "\$db = Joomla__" . "_39403062_84fb_46e0_bac4_0023f766e827___Power::getDbo();"; + } + else + { + $dbSetup .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "\$db = \$this->getDatabase();"; + } + + $dbSetup .= PHP_EOL . PHP_EOL . $tab . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " Create a new query object."; + $dbSetup .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "\$query = \$db->getQuery(true);"; + + return $dbSetup; + } + + /** + * Append query logic for get, filters, where, order, group. + * + * @param object $get + * @param string $code + * @param string $tab + * + * @return string + * @since 5.1.2 + */ + private function buildMainQuery(object $get, string $code, string $tab): string + { + if (empty($get->main_get)) + { + return ''; + } + + $query = $this->queries->get($get->main_get, $code, $tab); + + // Optional parts + foreach (['queryfilter' => 'filter', 'querywhere' => 'where', 'queryorder' => 'order', 'querygroup' => 'group'] as $queryType => $field) + { + if (isset($get->{$field})) + { + $query .= $this->{$queryType}->get($get->{$field}, $code, $tab); + } + } + + return $query; + } + + /** + * Append custom PHP and query placeholder. + * + * @param object $get + * + * @return string + * @since 5.1.2 + */ + private function buildPostQueryPlaceholder(object $get): string + { + $post = Placefix::_h("DB_SET_QUERY_DATA"); + if ( + isset($get->add_php_after_getitem) && $get->add_php_after_getitem == 1 + && isset($get->php_after_getitem) && StringHelper::check($get->php_after_getitem) + ) + { + $post .= $this->placeholder->update_($get->php_after_getitem); + } + return $post; + } + + /** + * Replace the placeholder with real DB query execution if needed. + * + * @param string $getItem + * @param string $tab + * + * @return string + * @since 5.1.2 + */ + private function replaceQueryPlaceholderIfNeeded(string $getItem, string $tab): string + { + if (strpos($getItem, '$data =') === false) + { + $setQuery = PHP_EOL . PHP_EOL . $tab . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " Reset the query using our newly populated query object."; + $setQuery .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "\$db->setQuery(\$query);"; + $setQuery .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" . Line::_(__LINE__, __CLASS__) . " Load the results as a stdClass object."; + $setQuery .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "\$data = \$db->loadObject();"; + + return str_replace(Placefix::_h("DB_SET_QUERY_DATA"), $setQuery, $getItem); + } + + return str_replace(Placefix::_h("DB_SET_QUERY_DATA"), '', $getItem); + } + + /** + * Add conditional fallback if \$data is empty. + * + * @param string $type + * @param string $tab + * @param string $code + * + * @return string + * @since 5.1.2 + */ + private function buildEmptyDataFailSafe(string $type, string $tab, string $code): string + { + $block = PHP_EOL . PHP_EOL . $tab . Indent::_(2) . "if (empty(\$data))" . PHP_EOL; + $block .= Indent::_(1) . $tab . Indent::_(1) . "{"; + if ($type === 'main') + { + $langKey = $this->config->lang_prefix . '_' . StringHelper::safe('Not found or access denied', 'U'); + $this->language->set($this->config->lang_target, $langKey, 'Not found, or access denied.'); + + $block .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) + . "\$app = Joomla__" . "_39403062_84fb_46e0_bac4_0023f766e827___Power::getApplication();"; + $block .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) + . "//" . Line::_(__LINE__, __CLASS__) . " If no data is found redirect to default page and show warning."; + $block .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) + . "\$app->enqueueMessage(Joomla__" . "_ba6326ef_cb79_4348_80f4_ab086082e3c5___Power::_('{$langKey}'), 'warning');"; + + if ('site' === $this->config->build_target) + { + if ($this->contentone->exists('SITE_DEFAULT_VIEW') + && $this->contentone->get('SITE_DEFAULT_VIEW') != $code) + { + $redirect = "Joomla__" . "_d4c76099_4c32_408a_8701_d0a724484dfd___Power::_('index.php?option=com_" . $this->config->component_code_name . "&view=" . $this->contentone->get('SITE_DEFAULT_VIEW') . "')"; + } + else + { + $redirect = "Joomla__" . "_eecc143e_b5cf_4c33_ba4d_97da1df61422___Power::root()"; + } + $block .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) . "\$app->redirect({$redirect});"; + } + else + { + $block .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) + . "\$app->redirect('index.php?option=com_" . $this->config->component_code_name . "');"; + } + $block .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) . "return false;"; + } + else + { + $block .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) . "return false;"; + } + + $block .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "}"; + + return $block; + } + + /** + * Inject dispatcher logic if placeholder exists. + * + * @param string $getItem + * @param string $code + * + * @return string + * @since 5.1.2 + */ + private function injectDispatcherIfNeeded(string $getItem, string $code): string + { + if (strpos($getItem, (string) Placefix::_h('DISPATCHER')) !== false) + { + return str_replace( + Placefix::_h('DISPATCHER'), + $this->eventdispatcher->get($code, ''), + $getItem + ); + } + return $getItem; + } + + /** + * Handle decode, filter, prepare, UIkit field processing. + * + * @param object $get + * @param string $code + * @param string $tab + * @param string[] &$asBucket + * + * @return string + * @since 5.1.2 + */ + private function buildPostProcessFieldChecks(object $get, string $code, string $tab, array &$asBucket): string + { + $output = ''; + + foreach ($get->main_get as $main_get) + { + if (!isset($main_get['key'], $main_get['as'])) + { + continue; + } + + $path = $code . '.' . $main_get['key'] . '.' . $main_get['as']; + + $decodeChecker = $this->sitefielddata->get('decode.' . $path); + $decodeFilter = $this->sitefielddecodefilter->get($this->config->build_target . '.' . $path); + $contentprepareChecker = $this->sitefielddata->get('textareas.' . $path); + $uikitChecker = $this->sitefielddata->get('uikit.' . $path); + + $decoder = $this->getDecoderCode($main_get, $code, $tab, $decodeChecker); + $decoderFilter = $this->getDecoderFilterCode($main_get, $code, $tab, $decodeFilter); + $contentPrepare = $this->getContentPrepareCode($main_get, $code, $tab, $contentprepareChecker); + $uikit = $this->getUIKitCode($main_get, $code, $tab, $uikitChecker); + + if ($this->hasFieldProcessing($decoder, $decoderFilter, $contentPrepare, $uikit)) + { + $output .= $this->buildFieldProcessingBlock($decoder, $decoderFilter, $contentPrepare, $uikit); + } + + $asBucket[] = $main_get['as']; + } + + return $output; + } + + /** + * Generate decoder block code for the matched field set. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param string $tab The tabing string + * @param array|null $checker The decoder rules to apply (if any). + * + * @return string The decoder logic code block or an empty string. + * @since 5.1.2 + */ + private function getDecoderCode(array $get, string $code, string $tab, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->decodecolumn->get($get, $checker, '$data', $code, $tab) + : ''; + } + + /** + * Generate filter decoder block for field-specific filters. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param string $tab The tabing string + * @param array|null $checker The filter configuration to apply (if any). + * + * @return string The filtered decoder code block or an empty string. + * @since 5.1.2 + */ + private function getDecoderFilterCode(array $get, string $code, string $tab, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->filtercolumn->get($get, $checker, '$data', '$data', $code, $tab) + : ''; + } + + /** + * Generate content preparation code for specified textarea fields. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param string $tab The tabing string + * @param array|null $checker The content prepare configuration to apply (if any). + * + * @return string The content prepare code block or an empty string. + * @since 5.1.2 + */ + private function getContentPrepareCode(array $get, string $code, string $tab, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->fieldoncontentprepare->get($get, $checker, '$data', $code, $tab) + : ''; + } + + /** + * Generate UIkit-specific field formatting code. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param string $tab The tabing string + * @param array|null $checker The UIkit config for visual formatting (if any). + * + * @return string The UIkit loader code block or an empty string. + * @since 5.1.2 + */ + private function getUIKitCode(array $get, string $code, string $tab, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->uikitloader->get($get, $checker, '$data', $code, $tab) + : ''; + } + + /** + * Check if any of the provided code parts contain executable logic. + * + * @param string ...$parts The list of code strings to evaluate. + * + * @return bool True if any string is non-empty and valid. + * @since 5.1.2 + */ + private function hasFieldProcessing(string ...$parts): bool + { + foreach ($parts as $part) + { + if (StringHelper::check($part)) + { + return true; + } + } + return false; + } + + /** + * Build the complete foreach loop block to process all returned items. + * + * @param string $decoder The decoder block. + * @param string $decoderFilter The decoder filter block. + * @param string $contentPrepare The content prepare block. + * @param string $uikit The UIkit block. + * + * @return string The complete loop and return block for $items. + * @since 5.1.2 + */ + private function buildFieldProcessingBlock( + string $decoder, + string $decoderFilter, + string $contentPrepare, + string $uikit + ): string + { + $code = ''; + + foreach ([$decoder, $decoderFilter, $contentPrepare, $uikit] as $block) + { + if (StringHelper::check($block)) + { + $code .= $block; + } + } + + return $code; + } + + /** + * Build the cryption script injection. + * + * @param string $code + * @param string $tab + * + * @return string + * @since 5.1.2 + */ + private function buildCryptionScript(string $code, string $tab): string + { + $script = ''; + $component = $this->contentone->get('Component'); + + foreach ($this->config->cryption_types as $cryptionType) + { + if ($this->sitedecrypt->get("{$cryptionType}.{$code}") !== null) + { + if ('expert' !== $cryptionType) + { + $script .= PHP_EOL . PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" . Line::_(__LINE__, __CLASS__) . " Get the {$cryptionType} encryption."; + $script .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "\${$cryptionType}key = {$component}Helper::getCryptKey('{$cryptionType}');"; + $script .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" . Line::_(__LINE__, __CLASS__) . " Get the encryption object."; + $script .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "\${$cryptionType} = new Super__"."_99175f6d_dba8_4086_8a65_5c4ec175e61d___Power(\${$cryptionType}key);"; + } + elseif ($this->modelexpertfieldinitiator->exists("{$code}.get")) + { + foreach ($this->modelexpertfieldinitiator->get("{$code}.get") as $block) + { + $script .= PHP_EOL . Indent::_(1) . implode(PHP_EOL . Indent::_(1), $block); + } + } + } + } + + return $script; + } + + /** + * Build the global loader. + * + * @param object $get + * @param string $code + * @param string $tab + * @param string[] $asBucket + * + * @return string + * @since 5.1.2 + */ + private function buildGlobals(object $get, string $code, string $tab, array $asBucket): string + { + return $this->globals->get($get->global ?? [], '$data', $asBucket, $tab); + } + + /** + * Build the custom join logic. + * + * @param object $get + * @param string $code + * @param string $tab + * @param string[] $asBucket + * + * @return string + * @since 5.1.2 + */ + private function buildCustomJoin(object $get, string $code, string $tab, array $asBucket): string + { + return $this->customjoin->get($get->custom_get ?? [], '$data', $code, $asBucket, $tab); + } + + /** + * Build the custom calculation logic block. + * + * @param object $get + * @param string $tab + * + * @return string + * @since 5.1.2 + */ + private function buildCalculation(object $get, string $tab): string + { + if (isset($get->addcalculation) && $get->addcalculation == 1 && !empty($get->php_calculation)) + { + $get->php_calculation = (array) explode(PHP_EOL, (string) $this->placeholder->update_($get->php_calculation)); + return PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . implode(PHP_EOL . Indent::_(1) . $tab . Indent::_(1), $get->php_calculation); + } + return ''; + } + + /** + * Build return or assignment block for \$data. + * + * @param string $type + * @param string $tab + * + * @return string + * @since 5.1.2 + */ + private function buildReturnBlock(string $type, string $tab): string + { + $line = PHP_EOL . PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" . Line::_(__LINE__, __CLASS__); + + if ($type === 'custom') + { + $line .= " return data object."; + $line .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "return \$data;"; + } + else + { + $line .= " set data object to item."; + $line .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "\$this->_item[\$pk] = \$data;"; + } + + return $line; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/GetItems.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/GetItems.php new file mode 100644 index 000000000..7412b110c --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/GetItems.php @@ -0,0 +1,548 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteDecrypt; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFieldData; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFieldDecodeFilter; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ModelExpertFieldInitiator; +use VDM\Joomla\Componentbuilder\Compiler\Builder\EventDispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\DecodeColumn; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\FilterColumn; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\FieldonContentPrepare; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\UikitLoader; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Globals; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\CustomJoin; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; + + +/** + * Dynamic Get GetItems + * + * @since 5.1.2 + */ +final class GetItems +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The SiteDecrypt Class. + * + * @var SiteDecrypt + * @since 5.1.2 + */ + protected SiteDecrypt $sitedecrypt; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The SiteFieldData Class. + * + * @var SiteFieldData + * @since 5.1.2 + */ + protected SiteFieldData $sitefielddata; + + /** + * The SiteFieldDecodeFilter Class. + * + * @var SiteFieldDecodeFilter + * @since 5.1.2 + */ + protected SiteFieldDecodeFilter $sitefielddecodefilter; + + /** + * The ModelExpertFieldInitiator Class. + * + * @var ModelExpertFieldInitiator + * @since 5.1.2 + */ + protected ModelExpertFieldInitiator $modelexpertfieldinitiator; + + /** + * The EventDispatcher Class. + * + * @var EventDispatcher + * @since 5.1.2 + */ + protected EventDispatcher $eventdispatcher; + + /** + * The DecodeColumn Class. + * + * @var DecodeColumn + * @since 5.1.2 + */ + protected DecodeColumn $decodecolumn; + + /** + * The FilterColumn Class. + * + * @var FilterColumn + * @since 5.1.2 + */ + protected FilterColumn $filtercolumn; + + /** + * The FieldonContentPrepare Class. + * + * @var FieldonContentPrepare + * @since 5.1.2 + */ + protected FieldonContentPrepare $fieldoncontentprepare; + + /** + * The UikitLoader Class. + * + * @var UikitLoader + * @since 5.1.2 + */ + protected UikitLoader $uikitloader; + + /** + * The Globals Class. + * + * @var Globals + * @since 5.1.2 + */ + protected Globals $globals; + + /** + * The CustomJoin Class. + * + * @var CustomJoin + * @since 5.1.2 + */ + protected CustomJoin $customjoin; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param SiteDecrypt $sitedecrypt The SiteDecrypt Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param ContentOne $contentone The ContentOne Class. + * @param SiteFieldData $sitefielddata The SiteFieldData Class. + * @param SiteFieldDecodeFilter $sitefielddecodefilter The SiteFieldDecodeFilter Class. + * @param ModelExpertFieldInitiator $modelexpertfieldinitiator The ModelExpertFieldInitiator Class. + * @param EventDispatcher $eventdispatcher The EventDispatcher Class. + * @param DecodeColumn $decodecolumn The DecodeColumn Class. + * @param FilterColumn $filtercolumn The FilterColumn Class. + * @param FieldonContentPrepare $fieldoncontentprepare The FieldonContentPrepare Class. + * @param UikitLoader $uikitloader The UikitLoader Class. + * @param Globals $globals The Globals Class. + * @param CustomJoin $customjoin The CustomJoin Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, SiteDecrypt $sitedecrypt, + Placeholder $placeholder, ContentOne $contentone, + SiteFieldData $sitefielddata, + SiteFieldDecodeFilter $sitefielddecodefilter, + ModelExpertFieldInitiator $modelexpertfieldinitiator, + EventDispatcher $eventdispatcher, + DecodeColumn $decodecolumn, FilterColumn $filtercolumn, + FieldonContentPrepare $fieldoncontentprepare, + UikitLoader $uikitloader, Globals $globals, + CustomJoin $customjoin) + { + $this->config = $config; + $this->sitedecrypt = $sitedecrypt; + $this->placeholder = $placeholder; + $this->contentone = $contentone; + $this->sitefielddata = $sitefielddata; + $this->sitefielddecodefilter = $sitefielddecodefilter; + $this->modelexpertfieldinitiator = $modelexpertfieldinitiator; + $this->eventdispatcher = $eventdispatcher; + $this->decodecolumn = $decodecolumn; + $this->filtercolumn = $filtercolumn; + $this->fieldoncontentprepare = $fieldoncontentprepare; + $this->uikitloader = $uikitloader; + $this->globals = $globals; + $this->customjoin = $customjoin; + } + + /** + * Generate the GetItems code block for the dynamicget. + * + * @param object $get The get object. + * @param string $code The component code. + * + * @return string The resulting PHP code string. + * @since 5.1.2 + */ + public function get($get, string $code): string + { + if (empty($code) || !ObjectHelper::check($get)) + { + return PHP_EOL; + } + + $this->removeCryptionTypes($code); + + $getItem = PHP_EOL . PHP_EOL . Indent::_(2) . "//" + . Line::_(__LINE__, __CLASS__) . " Insure all item fields are adapted where needed."; + $getItem .= PHP_EOL . Indent::_(2) . "if (Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$items))"; + $getItem .= PHP_EOL . Indent::_(2) . "{"; + $getItem .= Placefix::_h("DISPATCHER"); + $getItem .= PHP_EOL . Indent::_(3) . "foreach (\$items as \$nr => &\$item)"; + $getItem .= PHP_EOL . Indent::_(3) . "{"; + $getItem .= PHP_EOL . Indent::_(4) . "//" . Line::_(__LINE__, __CLASS__) . " Always create a slug for sef URL's"; + $getItem .= PHP_EOL . Indent::_(4) . "\$item->slug = (\$item->id ?? '0') . (isset(\$item->alias) ? ':' . \$item->alias : '');"; + + $asBucket = []; + if (isset($get->main_get) && ArrayHelper::check($get->main_get)) + { + $getItem .= $this->buildPostProcessFieldChecks($get, $code, Indent::_(2), $asBucket); + } + + $getItem .= $this->buildGlobals($get, $code, Indent::_(2), $asBucket); + $getItem .= $this->buildCustomJoin($get, $code, Indent::_(2), $asBucket); + $getItem .= $this->buildCalculation($get); + $getItem = $this->injectDispatcherIfNeeded($getItem, $code); + + $getItem .= PHP_EOL . Indent::_(3) . "}"; + $getItem .= PHP_EOL . Indent::_(2) . "}"; + + if (strlen($getItem) <= 100) + { + return PHP_EOL; + } + + $script = $this->buildCryptionScript($code); + + return $script . $getItem; + } + + /** + * Remove all cryption type flags for this code. + * + * @param string $code + * + * @return void + * @since 5.1.2 + */ + private function removeCryptionTypes(string $code): void + { + foreach ($this->config->cryption_types as $cryptionType) + { + $this->sitedecrypt->remove("{$cryptionType}.{$code}"); + } + } + + /** + * Handle decode, filter, prepare, UIkit field processing. + * + * @param object $get + * @param string $code + * @param string $tab + * @param string[] &$asBucket + * + * @return string + * @since 5.1.2 + */ + private function buildPostProcessFieldChecks(object $get, string $code, string $tab, array &$asBucket): string + { + $output = ''; + + foreach ($get->main_get as $main_get) + { + if (!isset($main_get['key'], $main_get['as'])) + { + continue; + } + + $path = $code . '.' . $main_get['key'] . '.' . $main_get['as']; + + $decodeChecker = $this->sitefielddata->get('decode.' . $path); + $decodeFilter = $this->sitefielddecodefilter->get($this->config->build_target . '.' . $path); + $contentprepareChecker = $this->sitefielddata->get('textareas.' . $path); + $uikitChecker = $this->sitefielddata->get('uikit.' . $path); + + $decoder = $this->getDecoderCode($main_get, $code, $tab, $decodeChecker); + $decoderFilter = $this->getDecoderFilterCode($main_get, $code, $tab, $decodeFilter); + $contentPrepare = $this->getContentPrepareCode($main_get, $code, $tab, $contentprepareChecker); + $uikit = $this->getUIKitCode($main_get, $code, $tab, $uikitChecker); + + if ($this->hasFieldProcessing($decoder, $decoderFilter, $contentPrepare, $uikit)) + { + $output .= $this->buildFieldProcessingBlock($decoder, $decoderFilter, $contentPrepare, $uikit); + } + + $asBucket[] = $main_get['as']; + } + + return $output; + } + + /** + * Generate decoder block code for the matched field set. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param string $tab The tabing string + * @param array|null $checker The decoder rules to apply (if any). + * + * @return string The decoder logic code block or an empty string. + * @since 5.1.2 + */ + private function getDecoderCode(array $get, string $code, string $tab, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->decodecolumn->get($get, $checker, '$item', $code, $tab) + : ''; + } + + /** + * Generate filter decoder block for field-specific filters. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param string $tab The tabing string + * @param array|null $checker The filter configuration to apply (if any). + * + * @return string The filtered decoder code block or an empty string. + * @since 5.1.2 + */ + private function getDecoderFilterCode(array $get, string $code, string $tab, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->filtercolumn->get($get, $checker, '$item', '$items[$nr]', $code, $tab) + : ''; + } + + /** + * Generate content preparation code for specified textarea fields. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param string $tab The tabing string + * @param array|null $checker The content prepare configuration to apply (if any). + * + * @return string The content prepare code block or an empty string. + * @since 5.1.2 + */ + private function getContentPrepareCode(array $get, string $code, string $tab, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->fieldoncontentprepare->get($get, $checker, '$item', $code, $tab) + : ''; + } + + /** + * Generate UIkit-specific field formatting code. + * + * @param array $get The get definition. + * @param string $code The code name. + * @param string $tab The tabing string + * @param array|null $checker The UIkit config for visual formatting (if any). + * + * @return string The UIkit loader code block or an empty string. + * @since 5.1.2 + */ + private function getUIKitCode(array $get, string $code, string $tab, ?array $checker): string + { + return ($checker !== null && ArrayHelper::check($checker)) + ? $this->uikitloader->get($get, $checker, '$item', $code, $tab) + : ''; + } + + /** + * Check if any of the provided code parts contain executable logic. + * + * @param string ...$parts The list of code strings to evaluate. + * + * @return bool True if any string is non-empty and valid. + * @since 5.1.2 + */ + private function hasFieldProcessing(string ...$parts): bool + { + foreach ($parts as $part) + { + if (StringHelper::check($part)) + { + return true; + } + } + return false; + } + + /** + * Build the complete foreach loop block to process all returned items. + * + * @param string $decoder The decoder block. + * @param string $decoderFilter The decoder filter block. + * @param string $contentPrepare The content prepare block. + * @param string $uikit The UIkit block. + * + * @return string The complete loop and return block for $items. + * @since 5.1.2 + */ + private function buildFieldProcessingBlock( + string $decoder, + string $decoderFilter, + string $contentPrepare, + string $uikit + ): string + { + $code = ''; + + foreach ([$decoder, $decoderFilter, $contentPrepare, $uikit] as $block) + { + if (StringHelper::check($block)) + { + $code .= $block; + } + } + + return $code; + } + + /** + * Build the cryption script injection. + * + * @param string $code + * + * @return string + * @since 5.1.2 + */ + private function buildCryptionScript(string $code): string + { + $script = ''; + $component = $this->contentone->get('Component'); + + foreach ($this->config->cryption_types as $cryptionType) + { + if ($this->sitedecrypt->get("{$cryptionType}.{$code}") !== null) + { + if ('expert' !== $cryptionType) + { + $script .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " Get the {$cryptionType} encryption."; + $script .= PHP_EOL . Indent::_(2) . "\${$cryptionType}key = {$component}Helper::getCryptKey('{$cryptionType}');"; + $script .= PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " Get the encryption object."; + $script .= PHP_EOL . Indent::_(2) . "\${$cryptionType} = new Super__"."_99175f6d_dba8_4086_8a65_5c4ec175e61d___Power(\${$cryptionType}key);"; + } + elseif ($this->modelexpertfieldinitiator->exists("{$code}.get")) + { + foreach ($this->modelexpertfieldinitiator->get("{$code}.get") as $block) + { + $script .= PHP_EOL . Indent::_(2) . implode(PHP_EOL . Indent::_(2), $block); + } + } + } + } + + return $script; + } + + /** + * Build the global loader. + * + * @param object $get + * @param string $code + * @param string $tab + * @param string[] $asBucket + * + * @return string + * @since 5.1.2 + */ + private function buildGlobals(object $get, string $code, string $tab, array $asBucket): string + { + return $this->globals->get($get->global ?? [], '$item', $asBucket, $tab); + } + + /** + * Build the custom join logic. + * + * @param object $get + * @param string $code + * @param string $tab + * @param string[] $asBucket + * + * @return string + * @since 5.1.2 + */ + private function buildCustomJoin(object $get, string $code, string $tab, array $asBucket): string + { + return $this->customjoin->get($get->custom_get ?? [], '$item', $code, $asBucket, $tab); + } + + /** + * Build the custom calculation logic block. + * + * @param object $get + * + * @return string + * @since 5.1.2 + */ + private function buildCalculation(object $get): string + { + if (isset($get->addcalculation) && $get->addcalculation == 1 && !empty($get->php_calculation)) + { + $get->php_calculation = (array) explode(PHP_EOL, (string) $this->placeholder->update_($get->php_calculation)); + return PHP_EOL . Indent::_(4) . implode(PHP_EOL . Indent::_(4), $get->php_calculation); + } + return ''; + } + + /** + * Inject dispatcher logic if placeholder exists. + * + * @param string $getItem + * @param string $code + * + * @return string + * @since 5.1.2 + */ + private function injectDispatcherIfNeeded(string $getItem, string $code): string + { + if (strpos($getItem, (string) Placefix::_h('DISPATCHER')) !== false) + { + return str_replace( + Placefix::_h('DISPATCHER'), + $this->eventdispatcher->get($code, ''), + $getItem + ); + } + return $getItem; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Globals.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Globals.php new file mode 100644 index 000000000..699bf4a1c --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Globals.php @@ -0,0 +1,97 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Utilities\StringHelper; + + +/** + * Dynamic Get Globals + * + * @since 5.1.2 + */ +final class Globals +{ + /** + * Generate PHP code for setting dynamic get global values. + * + * @param array $global The list of global configuration items. + * @param string $string The base string reference to the data source. + * @param array $as The list of aliases to process. + * @param string $tab The tab indentation string (optional). + * + * @return string The generated PHP code for setting global values. + * @since 5.1.2 + */ + public function get(array $global, string $string, array $as, string $tab = ''): string + { + if (empty($global) || empty($string) || empty($as)) + { + return ''; + } + + $as = array_unique($as); + + $globals = ''; + + foreach ($global as $glo) + { + if (!isset($glo['as']) || + !in_array($glo['as'], $as) || + !isset($glo['type']) || + !is_numeric($glo['type']) + ) + { + continue; + } + + switch ($glo['type']) + { + case 1: + // SET STATE + $value = "\$this->setState('" . $glo['as'] . "." + . $glo['name'] . "', " . $string . "->" + . $glo['key'] . ");"; + break; + + case 2: + // SET THIS + $value = "\$this->" . $glo['as'] . "_" + . $glo['name'] . " = " . $string . "->" + . $glo['key'] . ";"; + break; + + default: + $value = ''; + break; + } + + // Only add if the filter is set + if (StringHelper::check($value)) + { + $globals .= PHP_EOL + . Indent::_(1) . $tab . Indent::_(1) + . "//" . Line::_(__LINE__, __CLASS__) + . " set the global " . $glo['name'] . " value." + . PHP_EOL + . Indent::_(1) . $tab . Indent::_(1) + . $value; + } + } + + return $globals; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/JoinStructure.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/JoinStructure.php new file mode 100644 index 000000000..d407e90d6 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/JoinStructure.php @@ -0,0 +1,106 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Utilities\StringHelper; + + +/** + * Dynamic Get Join Structure + * + * @since 5.1.2 + */ +final class JoinStructure +{ + /** + * Get the default method structure for a custom view join. + * + * @param array $get The method definition array. + * @param string $code The code snippet related to the method. + * + * @return array|null The normalized method array or null on failure. + * @since 5.1.2 + */ + public function get(array $get, string $code): ?array + { + if (!isset($get['key']) || !isset($get['as']) || empty($code)) + { + return null; + } + + $key = substr( + (string) StringHelper::safe( + preg_replace('/[0-9]+/', '', md5((string) $get['key'])), 'F' + ), + 0, + 4 + ); + + $method = []; + + $method['on_field'] = isset($get['on_field']) + ? $this->getFieldName($get['on_field']) + : null; + + $method['join_field'] = isset($get['join_field']) + ? StringHelper::safe($this->getFieldName($get['join_field'])) + : null; + + $method['Join_field'] = isset($method['join_field']) + ? StringHelper::safe($method['join_field'], 'F') + : null; + + $method['name'] = StringHelper::safe($get['selection']['name'], 'F'); + + $method['code'] = StringHelper::safe($code); + + $method['AS'] = StringHelper::safe($get['as'], 'U'); + + $method['as'] = StringHelper::safe($get['as']); + + $method['valueName'] = $method['on_field'] + . $method['Join_field'] + . $method['name'] + . $method['AS']; + + $method['methodName'] = StringHelper::safe($method['on_field'], 'F') + . $method['Join_field'] + . $method['name'] + . $key + . '_' + . $method['AS']; + + return $method; + } + + /** + * Remove the alias (AS) portion from a dot-notation string. + * + * @param string $string The input string possibly containing a dot (e.g. `a.name`). + * + * @return string The portion after the dot or the original string if no dot found. + * @since 5.1.2 + */ + public function getFieldName(string $string): string + { + if (strpos($string, '.') !== false) + { + list(, $field) = array_map('trim', explode('.', $string, 2)); + + return $field; + } + + return $string; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/ListQuery.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/ListQuery.php new file mode 100644 index 000000000..f262a432a --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/ListQuery.php @@ -0,0 +1,212 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Queries; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryFilter; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryWhere; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryOrder; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryGroup; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * Dynamic Get List Query + * + * @since 5.1.2 + */ +final class ListQuery +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Dispenser Class. + * + * @var Dispenser + * @since 5.1.2 + */ + protected Dispenser $dispenser; + + /** + * The Queries Class. + * + * @var Queries + * @since 5.1.2 + */ + protected Queries $queries; + + /** + * The QueryFilter Class. + * + * @var QueryFilter + * @since 5.1.2 + */ + protected QueryFilter $queryfilter; + + /** + * The QueryWhere Class. + * + * @var QueryWhere + * @since 5.1.2 + */ + protected QueryWhere $querywhere; + + /** + * The QueryOrder Class. + * + * @var QueryOrder + * @since 5.1.2 + */ + protected QueryOrder $queryorder; + + /** + * The QueryGroup Class. + * + * @var QueryGroup + * @since 5.1.2 + */ + protected QueryGroup $querygroup; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Dispenser $dispenser The Dispenser Class. + * @param Queries $queries The Queries Class. + * @param QueryFilter $queryfilter The QueryFilter Class. + * @param QueryWhere $querywhere The QueryWhere Class. + * @param QueryOrder $queryorder The QueryOrder Class. + * @param QueryGroup $querygroup The QueryGroup Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Dispenser $dispenser, Queries $queries, + QueryFilter $queryfilter, QueryWhere $querywhere, + QueryOrder $queryorder, QueryGroup $querygroup) + { + $this->config = $config; + $this->dispenser = $dispenser; + $this->queries = $queries; + $this->queryfilter = $queryfilter; + $this->querywhere = $querywhere; + $this->queryorder = $queryorder; + $this->querygroup = $querygroup; + } + + /** + * Build the custom view list query code block. + * + * @param object $get The GET configuration object. + * @param string $code The current code name. + * @param bool $return Whether to include `return $query;`. + * + * @return string The full PHP code block as a string. + * @since 5.1.2 + */ + public function get($get, $code, $return = true): string + { + if (!ObjectHelper::check($get)) + { + return PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) + . "add your custom code here."; + } + + if (($get->pagination ?? 0) == 1) + { + $listQuery = PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) + . " Get a db connection."; + } + else + { + $listQuery = PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) + . " Make sure all records load, since no pagination allowed."; + $listQuery .= PHP_EOL . Indent::_(2) + . "\$this->setState('list.limit', 0);"; + $listQuery .= PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) + . " Get a db connection."; + } + + if ($this->config->get('joomla_version', 3) == 3) + { + $listQuery .= PHP_EOL . Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDbo();"; + } + else + { + $listQuery .= PHP_EOL . Indent::_(2) . "\$db = \$this->getDatabase();"; + } + + $listQuery .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) + . " Create a new query object."; + $listQuery .= PHP_EOL . Indent::_(2) . "\$query = \$db->getQuery(true);"; + + // Main GET query + $listQuery .= $this->queries->get($get->main_get, $code); + + // Custom script + $listQuery .= $this->dispenser->get( + $this->config->build_target . '_php_getlistquery', + $code, + '', + PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " Filtering.", + true + ); + + // Optional parts + $listQuery .= $this->applyAdditionalQueries($get, $code); + + if ($return) + { + $listQuery .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) + . " return the query object" + . PHP_EOL . Indent::_(2) . "return \$query;"; + } + + return $listQuery; + } + + /** + * Apply additional query parts (filter, where, order, group). + * + * @param object $get The get object values. + * @param string $code The current code name. + * + * @return string + * @since 5.1.2 + */ + private function applyAdditionalQueries(object $get, string $code): string + { + $listQuery = ''; + + // Optional parts + foreach (['queryfilter' => 'filter', 'querywhere' => 'where', 'queryorder' => 'order', 'querygroup' => 'group'] as $queryType => $field) + { + if (isset($get->{$field})) + { + $listQuery .= $this->{$queryType}->get($get->{$field}, $code); + } + } + + return $listQuery; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Methods.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Methods.php new file mode 100644 index 000000000..9eb0b63f1 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Methods.php @@ -0,0 +1,284 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\GetItem; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\GetItems; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\ListQuery; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\CustomGetMethods; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\UikitLoader; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use Joomla\CMS\Factory; + + +/** + * Dynamic Get Methods + * + * @since 5.1.2 + */ +final class Methods +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The GetItem Class. + * + * @var GetItem + * @since 5.1.2 + */ + protected GetItem $getitem; + + /** + * The GetItems Class. + * + * @var GetItems + * @since 5.1.2 + */ + protected GetItems $getitems; + + /** + * The ListQuery Class. + * + * @var ListQuery + * @since 5.1.2 + */ + protected ListQuery $listquery; + + /** + * The CustomGetMethods Class. + * + * @var CustomGetMethods + * @since 5.1.2 + */ + protected CustomGetMethods $customgetmethods; + + /** + * The UikitLoader Class. + * + * @var UikitLoader + * @since 5.1.2 + */ + protected UikitLoader $uikitloader; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param GetItem $getitem The GetItem Class. + * @param GetItems $getitems The GetItems Class. + * @param ListQuery $listquery The ListQuery Class. + * @param CustomGetMethods $customgetmethods The CustomGetMethods Class. + * @param UikitLoader $uikitloader The UikitLoader Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Placeholder $placeholder, GetItem $getitem, + GetItems $getitems, ListQuery $listquery, + CustomGetMethods $customgetmethods, + UikitLoader $uikitloader) + { + $this->config = $config; + $this->placeholder = $placeholder; + $this->getitem = $getitem; + $this->getitems = $getitems; + $this->listquery = $listquery; + $this->customgetmethods = $customgetmethods; + $this->uikitloader = $uikitloader; + } + + /** + * Get the required data to generate dynamicget methods. + * + * @param array|object $mainView The main view data + * @param string $code The component code + * + * @return string The generated methods + * @since 5.1.2 + */ + public function get($mainView, string $code): string + { + if (empty($mainView) || empty($code)) + { + return ''; + } + + $methods = ''; + + if ( + ArrayHelper::check($mainView) + && isset($mainView['settings']) + && ObjectHelper::check($mainView['settings']) + && isset($mainView['settings']->custom_get) + ) { + $_dynamic_get = $mainView['settings']->custom_get; + } elseif (ObjectHelper::check($mainView) && isset($mainView->custom_get)) { + $_dynamic_get = $mainView->custom_get; + } + + if (isset($_dynamic_get) && ArrayHelper::check($_dynamic_get)) + { + foreach ($_dynamic_get as $view) + { + $view->code = StringHelper::safe($code); + $view->Code = StringHelper::safe($view->code, 'F'); + $view->CODE = StringHelper::safe($view->code, 'U'); + $main = ''; + + if ($view->gettype == 3) + { + if ($this->config->get('joomla_version', 3) == 3) + { + $main .= PHP_EOL . PHP_EOL . Indent::_(2) . "if (!isset(\$this->initSet) || !\$this->initSet)"; + $main .= PHP_EOL . Indent::_(2) . "{"; + $main .= PHP_EOL . Indent::_(3) . "\$this->user = Factory::getUser();"; + $main .= PHP_EOL . Indent::_(3) . "\$this->userId = \$this->user->get('id');"; + $main .= PHP_EOL . Indent::_(3) . "\$this->guest = \$this->user->get('guest');"; + $main .= PHP_EOL . Indent::_(3) . "\$this->groups = \$this->user->get('groups');"; + $main .= PHP_EOL . Indent::_(3) . "\$this->authorisedGroups = \$this->user->getAuthorisedGroups();"; + $main .= PHP_EOL . Indent::_(3) . "\$this->levels = \$this->user->getAuthorisedViewLevels();"; + $main .= PHP_EOL . Indent::_(3) . "\$this->initSet = true;"; + $main .= PHP_EOL . Indent::_(2) . "}"; + } + + $main .= $this->getitem->get($view, $view->code, '', 'custom'); + $type = 'mixed item data object on success, false on failure.'; + } + elseif ($view->gettype == 4) + { + if ($this->config->get('joomla_version', 3) == 3) + { + $main .= PHP_EOL . PHP_EOL . Indent::_(2) . "if (!isset(\$this->initSet) || !\$this->initSet)"; + $main .= PHP_EOL . Indent::_(2) . "{"; + $main .= PHP_EOL . Indent::_(3) . "\$this->user = Factory::getUser();"; + $main .= PHP_EOL . Indent::_(3) . "\$this->userId = \$this->user->get('id');"; + $main .= PHP_EOL . Indent::_(3) . "\$this->guest = \$this->user->get('guest');"; + $main .= PHP_EOL . Indent::_(3) . "\$this->groups = \$this->user->get('groups');"; + $main .= PHP_EOL . Indent::_(3) . "\$this->authorisedGroups = \$this->user->getAuthorisedGroups();"; + $main .= PHP_EOL . Indent::_(3) . "\$this->levels = \$this->user->getAuthorisedViewLevels();"; + $main .= PHP_EOL . Indent::_(3) . "\$this->initSet = true;"; + $main .= PHP_EOL . Indent::_(2) . "}"; + } + + $main .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " Get the global params"; + $main .= PHP_EOL . Indent::_(2) . "\$globalParams = ComponentHelper::getParams('com_" . $this->config->component_code_name . "', true);"; + + if ( + isset($view->add_php_getlistquery) + && $view->add_php_getlistquery == 1 + && isset($view->php_getlistquery) + && StringHelper::check($view->php_getlistquery) + ) { + $main .= $this->placeholder->update_($view->php_getlistquery); + } + + $main .= $this->listquery->get($view, $view->code, false); + + if ( + isset($view->add_php_before_getitems) + && $view->add_php_before_getitems == 1 + && isset($view->php_before_getitems) + && StringHelper::check($view->php_before_getitems) + ) { + $main .= $this->placeholder->update_($view->php_before_getitems); + } + + $main .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " Reset the query using our newly populated query object."; + $main .= PHP_EOL . Indent::_(2) . "\$db->setQuery(\$query);"; + $main .= PHP_EOL . Indent::_(2) . "\$items = \$db->loadObjectList();"; + $main .= PHP_EOL . PHP_EOL . Indent::_(2) . "if (empty(\$items))"; + $main .= PHP_EOL . Indent::_(2) . "{"; + $main .= PHP_EOL . Indent::_(3) . "return false;"; + $main .= PHP_EOL . Indent::_(2) . "}"; + + $main .= $this->getitems->get($view, $view->code); + + if ( + isset($view->add_php_after_getitems) + && $view->add_php_after_getitems == 1 + && isset($view->php_after_getitems) + && StringHelper::check($view->php_after_getitems) + ) { + $main .= $this->placeholder->update_($view->php_after_getitems); + } + + $main .= PHP_EOL . Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " return items"; + $main .= PHP_EOL . Indent::_(2) . "return \$items;"; + + $type = 'mixed An array of objects on success, false on failure.'; + } + + $methods .= $this->getMethod($main, $view->getcustom, $type); + $methods .= $this->customgetmethods->get($view, $view->code); + } + } + + if (ArrayHelper::check($mainView) && isset($mainView['settings'])) + { + $methods .= $this->uikitloader->getUikitComp(); + } + + return $methods; + } + + /** + * Get the main custom method block. + * + * @param string $body The PHP code body + * @param string $name The function name + * @param string $type The doc return type + * + * @return string The built method block + * @since 5.1.2 + */ + public function getMethod(string $body, string $name, string $type): string + { + $method = ''; + + if (StringHelper::check($body)) + { + $method .= PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; + $method .= PHP_EOL . Indent::_(1) . " * Custom Method"; + $method .= PHP_EOL . Indent::_(1) . " *"; + $method .= PHP_EOL . Indent::_(1) . " * @return " . $type; + $method .= PHP_EOL . Indent::_(1) . " *"; + $method .= PHP_EOL . Indent::_(1) . " */"; + $method .= PHP_EOL . Indent::_(1) . "public function " . $name . "()"; + $method .= PHP_EOL . Indent::_(1) . "{" . $body; + $method .= PHP_EOL . Indent::_(1) . "}"; + } + + return $method; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Queries.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Queries.php new file mode 100644 index 000000000..4a3e17d3c --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Queries.php @@ -0,0 +1,281 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\JoinStructure; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteDynamicGet; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherQuery; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * Dynamic Get Queries + * + * @since 5.1.2 + */ +final class Queries +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The JoinStructure Class. + * + * @var JoinStructure + * @since 5.1.2 + */ + protected JoinStructure $joinstructure; + + /** + * The SiteDynamicGet Class. + * + * @var SiteDynamicGet + * @since 5.1.2 + */ + protected SiteDynamicGet $sitedynamicget; + + /** + * The OtherQuery Class. + * + * @var OtherQuery + * @since 5.1.2 + */ + protected OtherQuery $otherquery; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.1.2 + */ + protected Placeholder $placeholder; + + /** + * The custom view query checker array. + * + * @var array + * @since 5.1.2 + */ + protected $customViewQueryChecker = []; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param JoinStructure $joinstructure The JoinStructure Class. + * @param SiteDynamicGet $sitedynamicget The SiteDynamicGet Class. + * @param OtherQuery $otherquery The OtherQuery Class. + * @param Placeholder $placeholder The Placeholder Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, JoinStructure $joinstructure, + SiteDynamicGet $sitedynamicget, OtherQuery $otherquery, + Placeholder $placeholder) + { + $this->config = $config; + $this->joinstructure = $joinstructure; + $this->sitedynamicget = $sitedynamicget; + $this->otherquery = $otherquery; + $this->placeholder = $placeholder; + } + + /** + * Get the dynamic get query. + * + * @param array $gets The data to build the query from. + * @param string $code The build code. + * @param string $tab The tab indentation. + * @param string $type The query type (main|custom). + * + * @return string The compiled query string. + * @since 5.1.2 + */ + public function get(array $gets, $code, string $tab = '', string $type = 'main'): string + { + if (empty($gets) || empty($code)) + { + return ''; + } + + $query = ''; + + $mainAsArray = []; + $check = 'zzz'; + + foreach ($gets as $nr => $theGet) + { + if ($this->isUniqueQueryEntry($theGet, $code)) + { + $getItem = $this->buildSelectPart($theGet, $tab); + + $getItem .= $this->buildFromOrJoinPart($theGet, $nr, $tab, $type, $check); + + $query .= $this->appendWithMethodDefaults($theGet, $code, $getItem, $check, $mainAsArray); + } + } + + return $query; + } + + /** + * Check if the query entry is unique. + * + * @param array $theGet The query data. + * @param string $code The build code. + * + * @return bool True if unique, false otherwise. + * @since 5.1.2 + */ + protected function isUniqueQueryEntry(array $theGet, string $code): bool + { + $checker = md5(serialize($theGet) . $code); + $target = $this->config->build_target; + + if (!isset($this->customViewQueryChecker[$target][$checker])) + { + $this->customViewQueryChecker[$target][$checker] = true; + return true; + } + + return false; + } + + /** + * Build the select part of the query. + * + * @param array $theGet The query data. + * @param string $tab The tab indentation. + * + * @return string The select part. + * @since 5.1.2 + */ + protected function buildSelectPart(array $theGet, string $tab): string + { + if (isset($theGet['selection']['type']) && StringHelper::check($theGet['selection']['type'])) + { + $getItem = PHP_EOL . PHP_EOL . Indent::_(1) . $tab + . Indent::_(1) . "//" . Line::_(__LINE__, __CLASS__) + . " Get from " . $theGet['selection']['table'] + . " as " . $theGet['as']; + + $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . $theGet['selection']['select']; + } + else + { + $getItem = PHP_EOL . PHP_EOL . Indent::_(1) . $tab + . Indent::_(1) . "//" . Line::_(__LINE__, __CLASS__) + . " Get data"; + + $getItem .= PHP_EOL . $this->placeholder->update_( + $theGet['selection']['select'] + ); + } + + return $getItem; + } + + /** + * Build the FROM or JOIN part of the query. + * + * @param array $theGet The query data. + * @param int $nr The current iteration number. + * @param string $tab The tab indentation. + * @param string $type The query type. + * @param string &$check The check variable. + * + * @return string The FROM or JOIN part. + * @since 5.1.2 + */ + protected function buildFromOrJoinPart(array $theGet, int $nr, string $tab, string $type, string &$check): string + { + $output = ''; + + if ( + ($nr === 0 + && (!isset($theGet['join_field']) || !StringHelper::check($theGet['join_field'])) + && isset($theGet['selection']['type']) && StringHelper::check($theGet['selection']['type'])) + || ($type === 'custom' + && isset($theGet['selection']['type']) && StringHelper::check($theGet['selection']['type'])) + ) + { + $output .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . '$query->from(' . $theGet['selection']['from'] . ');'; + } + elseif ( + isset($theGet['join_field']) && StringHelper::check($theGet['join_field']) + && isset($theGet['selection']['type']) && StringHelper::check($theGet['selection']['type']) + ) + { + $output .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$query->join('" . $theGet['type'] . "', (" . $theGet['selection']['from'] + . ") . ' ON (' . \$db->quoteName('" . $theGet['on_field'] + . "') . ' " . $theGet['operator'] + . " ' . \$db->quoteName('" . $theGet['join_field'] . "') . ')');"; + + $check = current(explode(".", (string) $theGet['on_field'])); + } + + return $output; + } + + /** + * Append the method defaults handling to the query string. + * + * @param array $theGet The query data. + * @param string $code The build code. + * @param string $getItem The built query part. + * @param string $check The check variable. + * @param array &$mainAsArray The main AS array. + * + * @return string The resulting query addition. + * @since 5.1.2 + */ + protected function appendWithMethodDefaults(array $theGet, string $code, string $getItem, string $check, array &$mainAsArray): string + { + $output = ''; + + if (($default = $this->joinstructure->get($theGet, $code)) !== null) + { + $joinFieldKey = $this->config->build_target . '.' . $default['code'] . '.' . $default['as'] . '.' . $default['join_field']; + + if (($join_field_ = $this->sitedynamicget->get($joinFieldKey)) !== null + && !in_array($check, $mainAsArray)) + { + $this->otherquery->add( + $this->config->build_target . '.' . $default['code'] . '.' . $join_field_ . '.' . $default['valueName'], + $getItem, + false + ); + } + else + { + $mainAsArray[] = $default['as']; + $output .= $getItem; + } + } + + return $output; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryFilter.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryFilter.php new file mode 100644 index 000000000..81c2f8fd8 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryFilter.php @@ -0,0 +1,288 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFieldData; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFieldDecodeFilter; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteMainGet; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherFilter; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * Dynamic Get Query Filter + * + * @since 5.1.2 + */ +final class QueryFilter +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The SiteFieldData Class. + * + * @var SiteFieldData + * @since 5.1.2 + */ + protected SiteFieldData $sitefielddata; + + /** + * The SiteFieldDecodeFilter Class. + * + * @var SiteFieldDecodeFilter + * @since 5.1.2 + */ + protected SiteFieldDecodeFilter $sitefielddecodefilter; + + /** + * The SiteMainGet Class. + * + * @var SiteMainGet + * @since 5.1.2 + */ + protected SiteMainGet $sitemainget; + + /** + * The OtherFilter Class. + * + * @var OtherFilter + * @since 5.1.2 + */ + protected OtherFilter $otherfilter; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param SiteFieldData $sitefielddata The SiteFieldData Class. + * @param SiteFieldDecodeFilter $sitefielddecodefilter The SiteFieldDecodeFilter Class. + * @param SiteMainGet $sitemainget The SiteMainGet Class. + * @param OtherFilter $otherfilter The OtherFilter Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, SiteFieldData $sitefielddata, + SiteFieldDecodeFilter $sitefielddecodefilter, + SiteMainGet $sitemainget, OtherFilter $otherfilter) + { + $this->config = $config; + $this->sitefielddata = $sitefielddata; + $this->sitefielddecodefilter = $sitefielddecodefilter; + $this->sitemainget = $sitemainget; + $this->otherfilter = $otherfilter; + } + + /** + * Build the dynamic query filters for a dynamic get. + * + * @param array $filter The filter configuration array. + * @param string $code The code representing the view context. + * @param string $tab The indentation tab string. + * + * @return string The generated filter query strings. + * @since 5.1.2 + */ + public function get(array $filter, string $code, string $tab = ''): string + { + if (empty($filter) || empty($code)) + { + return ''; + } + + $filters = ''; + + foreach ($filter as $ter) + { + if (empty($ter['table_key']) || empty($ter['key']) || + strpos((string) $ter['table_key'], '.') === false) + { + continue; + } + + $as = ''; + $field = ''; + $string = ''; + + list($as, $field) = array_map('trim', explode('.', (string) $ter['table_key'])); + + $path = $code . '.' . $ter['key'] . '.' . $as . '.' . $field; + $filterType = $ter['filter_type'] ?? 0; + $operator = $ter['operator'] ?? '='; + + switch ($filterType) + { + case 1: // COM_COMPONENTBUILDER_DYNAMIC_GET_ID + $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$query->where('" . $ter['table_key'] . " " + . $operator . " ' . (int) \$pk);"; + break; + + case 2: // COM_COMPONENTBUILDER_DYNAMIC_GET_USER + $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$query->where('" . $ter['table_key'] . " " + . $operator . " ' . (int) \$this->userId);"; + break; + + case 3: // COM_COMPONENTBUILDER_DYNAMIC_GET_ACCESS_LEVEL + $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$query->where('" . $ter['table_key'] . " " + . $operator . " (' . implode(',', \$this->levels) . ')');"; + break; + + case 4: // COM_COMPONENTBUILDER_DYNAMIC_GET_USER_GROUPS + $decodeChecker = $this->sitefielddata->get('decode.' . $path); + $stateKey = $ter['state_key'] ?? 'none'; + + if (ArrayHelper::check($decodeChecker) || $stateKey === 'array') + { + $this->sitefielddecodefilter + ->set($this->config->build_target . '.' . $path, $ter); + } + else + { + $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$query->where('" . $ter['table_key'] . " " + . $operator . " (' . implode(',', \$this->groups) . ')');"; + } + break; + + case 5: // COM_COMPONENTBUILDER_DYNAMIC_GET_CATEGORIES + $string = PHP_EOL . Indent::_(2) . $tab . "//" . Line::_(__LINE__, __CLASS__) + . " (TODO) The dynamic category filter is not ready."; + break; + + case 6: // COM_COMPONENTBUILDER_DYNAMIC_GET_TAGS + $string = PHP_EOL . Indent::_(2) . $tab . "//" . Line::_(__LINE__, __CLASS__) + . " (TODO) The dynamic tags filter is not ready."; + break; + + case 7: // COM_COMPONENTBUILDER_DYNAMIC_GET_DATE + $string = PHP_EOL . Indent::_(2) . $tab . "//" . Line::_(__LINE__, __CLASS__) + . " (TODO) The dynamic date filter is not ready."; + break; + + case 8: // COM_COMPONENTBUILDER_DYNAMIC_GET_FUNCTIONVAR + $string = $this->buildFunctionVarFilter($ter, $tab); + break; + + case 9: // COM_COMPONENTBUILDER_DYNAMIC_GET_ARRAY_VALUE + case 10: // COM_COMPONENTBUILDER_DYNAMIC_GET_REPEATABLE_VALUE + $this->sitefielddecodefilter + ->set($this->config->build_target . '.' . $path, $ter); + break; + + case 11: // COM_COMPONENTBUILDER_DYNAMIC_GET_OTHER + if (strpos($as, '(') !== false) + { + list($dump, $as) = array_map('trim', explode('(', $as)); + $field = trim(str_replace(')', '', $field)); + } + $stateKey = $ter['state_key'] ?? 'error'; + $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$query->where('" . $ter['table_key'] . " " + . $operator . " " . $stateKey . "');"; + break; + } + + if (StringHelper::check($string)) + { + if ($as === 'a' || + $this->sitemainget->exists($this->config->build_target . '.' . $code . '.' . $as)) + { + $filters .= $string; + } + elseif ($as !== 'a') + { + $this->otherfilter->set($this->config->build_target . '.' . $code . '.' . $as . '.' . $field, $string); + } + } + } + + return $filters; + } + + /** + * Build dynamic filter for "FunctionVar" filter type (case 8). + * + * @param array $ter The filter term configuration. + * @param string $tab The indentation tab string. + * + * @return string The generated filter string. + * @since 5.1.2 + */ + protected function buildFunctionVarFilter(array $ter, string $tab): string + { + $string = ''; + $operator = $ter['operator'] ?? '='; + $stateKey = $ter['state_key'] ?? 'error'; + + if ($operator === 'IN' || $operator === 'NOT IN') + { + $string .= PHP_EOL . Indent::_(2) . $tab . "//" . Line::_(__LINE__, __CLASS__) . " Check if " + . $stateKey . " is an array with values."; + $string .= PHP_EOL . Indent::_(2) . $tab . "\$array = " . $stateKey . ";"; + $string .= PHP_EOL . Indent::_(2) . $tab . "if (isset(\$array) && Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$array))"; + $string .= PHP_EOL . Indent::_(2) . $tab . "{"; + $string .= PHP_EOL . Indent::_(2) . $tab . Indent::_(1) + . "\$query->where('" . $ter['table_key'] . " " . $operator + . " (' . implode(',', \$array) . ')');"; + $string .= PHP_EOL . Indent::_(2) . $tab . "}"; + + if (!isset($ter['empty']) || !$ter['empty']) + { + $string .= PHP_EOL . Indent::_(2) . $tab . "else"; + $string .= PHP_EOL . Indent::_(2) . $tab . "{"; + $string .= PHP_EOL . Indent::_(2) . $tab . Indent::_(1) . "return false;"; + $string .= PHP_EOL . Indent::_(2) . $tab . "}"; + } + } + else + { + $string .= PHP_EOL . Indent::_(2) . $tab . "//" . Line::_(__LINE__, __CLASS__) . " Check if " + . $stateKey . " is a string or numeric value."; + $string .= PHP_EOL . Indent::_(2) . $tab . "\$checkValue = " . $stateKey . ";"; + $string .= PHP_EOL . Indent::_(2) . $tab . "if (isset(\$checkValue) && Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$checkValue))"; + $string .= PHP_EOL . Indent::_(2) . $tab . "{"; + $string .= PHP_EOL . Indent::_(2) . $tab . Indent::_(1) + . "\$query->where('" . $ter['table_key'] . " " . $operator + . " ' . \$db->quote(\$checkValue));"; + $string .= PHP_EOL . Indent::_(2) . $tab . "}"; + $string .= PHP_EOL . Indent::_(2) . $tab . "elseif (is_numeric(\$checkValue))"; + $string .= PHP_EOL . Indent::_(2) . $tab . "{"; + $string .= PHP_EOL . Indent::_(2) . $tab . Indent::_(1) + . "\$query->where('" . $ter['table_key'] . " " . $operator + . " ' . \$checkValue);"; + $string .= PHP_EOL . Indent::_(2) . $tab . "}"; + + if (!isset($ter['empty']) || !$ter['empty']) + { + $string .= PHP_EOL . Indent::_(2) . $tab . "else"; + $string .= PHP_EOL . Indent::_(2) . $tab . "{"; + $string .= PHP_EOL . Indent::_(2) . $tab . Indent::_(1) . "return false;"; + $string .= PHP_EOL . Indent::_(2) . $tab . "}"; + } + } + + return $string; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryGroup.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryGroup.php new file mode 100644 index 000000000..a26443c6a --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryGroup.php @@ -0,0 +1,125 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherGroup; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteMainGet; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * Dynamic Get Query Group + * + * @since 5.1.2 + */ +final class QueryGroup +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The OtherGroup Class. + * + * @var OtherGroup + * @since 5.1.2 + */ + protected OtherGroup $othergroup; + + /** + * The SiteMainGet Class. + * + * @var SiteMainGet + * @since 5.1.2 + */ + protected SiteMainGet $sitemainget; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param OtherGroup $othergroup The OtherGroup Class. + * @param SiteMainGet $sitemainget The SiteMainGet Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, OtherGroup $othergroup, + SiteMainGet $sitemainget) + { + $this->config = $config; + $this->othergroup = $othergroup; + $this->sitemainget = $sitemainget; + } + + /** + * Generate GROUP BY code for the query. + * + * @param array $group The grouping configuration array. + * @param string $code The component code. + * @param string $tab The indentation tab characters. + * + * @return string The generated GROUP BY code. + * @since 5.1.2 + */ + public function get(array $group, string $code, string $tab = ''): string + { + if (empty($group) || empty($code)) + { + return ''; + } + + $grouping = ''; + + foreach ($group as $gr) + { + if (empty($gr['table_key'])) + { + continue; + } + + list($as, $field) = array_map( + 'trim', + explode('.', (string) $gr['table_key']) + ); + + // Build the GROUP BY string + $string = "\$query->group('" . $gr['table_key'] . "');"; + + // Determine where to place the GROUP BY + if ( + $as === 'a' || + $this->sitemainget ->exists($this->config->build_target . '.' . $code . '.' . $as) + ) + { + $grouping .= PHP_EOL + . Indent::_(1) . $tab + . Indent::_(1) . $string; + } + else + { + $this->othergroup->set( + $this->config->build_target . '.' . $code . '.' . $as . '.' . $field, + PHP_EOL . Indent::_(2) . $string + ); + } + } + + return $grouping; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryOrder.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryOrder.php new file mode 100644 index 000000000..0fde6db95 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryOrder.php @@ -0,0 +1,130 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherOrder; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteMainGet; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * Dynamic Get Query Order + * + * @since 5.1.2 + */ +final class QueryOrder +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The OtherOrder Class. + * + * @var OtherOrder + * @since 5.1.2 + */ + protected OtherOrder $otherorder; + + /** + * The SiteMainGet Class. + * + * @var SiteMainGet + * @since 5.1.2 + */ + protected SiteMainGet $sitemainget; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param OtherOrder $otherorder The OtherOrder Class. + * @param SiteMainGet $sitemainget The SiteMainGet Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, OtherOrder $otherorder, + SiteMainGet $sitemainget) + { + $this->config = $config; + $this->otherorder = $otherorder; + $this->sitemainget = $sitemainget; + } + + /** + * Get the ordering part of a query for a dynamic get. + * + * @param array $order The ordering rules array (passed by reference). + * @param string $code The code identifier (passed by reference). + * @param string $tab The tab indentation. + * + * @return string The generated ordering query part. + * @since 5.1.2 + */ + public function get(array $order, string $code, string $tab = ''): string + { + if (empty($order) || empty($code)) + { + return ''; + } + + $ordering = ''; + + foreach ($order as $or) + { + if (empty($or['table_key']) || empty($or['direction'])) + { + continue; + } + + list($as, $field) = array_map( + 'trim', + explode('.', (string) $or['table_key']) + ); + + // Determine ordering direction + if ('RAND' === $or['direction']) + { + $string = "\$query->order('RAND()');"; + } + else + { + $string = "\$query->order('" . $or['table_key'] . " " . $or['direction'] . "');"; + } + + // Sort placement logic + if ( + $as === 'a' || + $this->sitemainget->exists($this->config->build_target . '.' . $code . '.' . $as) + ) + { + $ordering .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . $string; + } + else + { + $this->otherorder->set( + $this->config->build_target . '.' . $code . '.' . $as . '.' . $field, + PHP_EOL . Indent::_(2) . $string + ); + } + } + + return $ordering; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryWhere.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryWhere.php new file mode 100644 index 000000000..5678de627 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/QueryWhere.php @@ -0,0 +1,197 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\OtherWhere; +use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteMainGet; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Utilities\StringHelper; + + +/** + * Dynamic Get Query Where + * + * @since 5.1.2 + */ +final class QueryWhere +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The OtherWhere Class. + * + * @var OtherWhere + * @since 5.1.2 + */ + protected OtherWhere $otherwhere; + + /** + * The SiteMainGet Class. + * + * @var SiteMainGet + * @since 5.1.2 + */ + protected SiteMainGet $sitemainget; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param OtherWhere $otherwhere The OtherWhere Class. + * @param SiteMainGet $sitemainget The SiteMainGet Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, OtherWhere $otherwhere, + SiteMainGet $sitemainget) + { + $this->config = $config; + $this->otherwhere = $otherwhere; + $this->sitemainget = $sitemainget; + } + + /** + * Process and build WHERE clauses for a given dynamic get. + * + * @param array $where The WHERE clause definitions. + * @param string $code The code identifier for the view. + * @param string $tab Optional tab/indentation prefix. + * + * @return string The generated WHERE clauses as a string. + * @since 5.1.2 + */ + public function get(array $where, string $code, string $tab = ''): string + { + if (empty($where) || empty($code)) + { + return ''; + } + + $wheres = ''; + + foreach ($where as $whe) + { + if (empty($whe['table_key']) || empty($whe['value_key'])) + { + continue; + } + + $as = ''; + $field = ''; + $value = ''; + + // Extract table alias and field + list($as, $field) = array_map( + 'trim', + explode('.', (string) $whe['table_key']) + ); + + // Determine value formatting + if (is_numeric($whe['value_key'])) + { + $value = " " . $whe['value_key'] . "');"; + } + elseif (strpos((string) $whe['value_key'], '$') !== false) + { + if (!empty($whe['operator']) && ($whe['operator'] === 'IN' || $whe['operator'] === 'NOT IN')) + { + $value = " (' . implode(',', " . $whe['value_key'] . ") . ')');"; + } + else + { + $value = " ' . \$db->quote(" . $whe['value_key'] . "));"; + } + } + elseif (strpos((string) $whe['value_key'], '.') !== false) + { + if (strpos((string) $whe['value_key'], "'") !== false) + { + $value = " ' . \$db->quote(" . $whe['value_key'] . "));"; + } + else + { + $value = " " . $whe['value_key'] . "');"; + } + } + elseif (StringHelper::check($whe['value_key'])) + { + $value = " " . $whe['value_key'] . "');"; + } + + // Only proceed if we have a valid value + if (StringHelper::check($value)) + { + $tabe = ($as === 'a') ? $tab : ''; + if (empty($whe['operator'])) + { + continue; + } + + // Build string based on operator + if ($whe['operator'] === 'IN' || $whe['operator'] === 'NOT IN') + { + $string = "if (isset(" . $whe['value_key'] . ") && " + . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(" + . $whe['value_key'] . "))"; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) . "{"; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(2) + . "//" . Line::_(__LINE__, __CLASS__) . " Get where " + . $whe['table_key'] . " is " . $whe['value_key']; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(2) + . "\$query->where('" . $whe['table_key'] . " " + . $whe['operator'] . $value; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) . "}"; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) . "else"; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) . "{"; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(2) . "return false;"; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) . "}"; + } + else + { + $string = "//" . Line::_(__LINE__, __CLASS__) . " Get where " + . $whe['table_key'] . " is " . $whe['value_key']; + $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) + . "\$query->where('" . $whe['table_key'] . " " + . $whe['operator'] . $value; + } + + // Append or store WHERE clause + if ( + $as === 'a' || + $this->sitemainget->exists($this->config->build_target . '.' . $code . '.' . $as) + ) + { + $wheres .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . $string; + } + elseif ($as !== 'a') + { + $this->otherwhere->set( + $this->config->build_target . '.' . $code . '.' . $as . '.' . $field, + PHP_EOL . Indent::_(2) . $string + ); + } + } + } + + return $wheres; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Selection.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Selection.php index 8ee10e87a..c0b03ced2 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Selection.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/Selection.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Builder\GetAsLookup; use VDM\Joomla\Componentbuilder\Compiler\Builder\SiteFields; @@ -64,11 +64,12 @@ class Selection protected SiteFields $sitefields; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. @@ -76,15 +77,16 @@ class Selection * @param Config $config The Config Class. * @param GetAsLookup $getaslookup The GetAsLookup Class. * @param SiteFields $sitefields The SiteFields Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ - public function __construct(Config $config, GetAsLookup $getaslookup, SiteFields $sitefields) + public function __construct(Config $config, GetAsLookup $getaslookup, SiteFields $sitefields, DatabaseInterface $db) { $this->config = $config; $this->getaslookup = $getaslookup; $this->sitefields = $sitefields; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/UikitLoader.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/UikitLoader.php new file mode 100644 index 000000000..dfecab2d1 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Dynamicget/UikitLoader.php @@ -0,0 +1,166 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Dynamicget; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; + + +/** + * Dynamic Get Uikit Loader + * + * @since 5.1.2 + */ +final class UikitLoader +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The ContentOne Class. + * + * @var ContentOne + * @since 5.1.2 + */ + protected ContentOne $contentone; + + /** + * The load tracker to prevent duplicate UIKit component loading. + * + * @var array + * @since 5.1.2 + */ + protected array $loadTracker = []; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param ContentOne $contentone The ContentOne Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, ContentOne $contentone) + { + $this->config = $config; + $this->contentone = $contentone; + } + + /** + * Check if custom view fields contain UIKit components that must be loaded. + * + * This method iterates through the given checker array, determines whether the + * field should have UIKit components loaded based on the selection criteria, + * and appends the relevant code for inclusion. + * + * @param array $get The "get" array containing view configuration data. + * @param array $checker The array of fields and their configurations to check. + * @param string $string The string variable name or object reference in the generated code. + * @param string $code The code identifier used for generating unique load keys. + * @param string $tab Optional indentation tab for formatting generated code. + * + * @return string The generated PHP code string for UIKit component inclusion. + * @since 5.1.2 + */ + public function get(array $get, array $checker, string $string, string $code, string $tab = ''): string + { + if (empty($get) || empty($get['key']) || empty($checker) || empty($string) || empty($code)) + { + return ''; + } + + $fieldUikit = ''; + + foreach ($checker as $field => $array) + { + // Build load counter key + $key = md5($code . $get['key'] . $string . $field); + + // Check if this field needs UIKit components loaded and hasn't been processed + if ( + strpos((string) $get['selection']['select'], (string) $field) !== false + && !isset($this->loadTracker[$key]) + ) + { + // Mark this field as processed + $this->loadTracker[$key] = $key; + + // Only load for UIKit version 1 or 2 + if (2 == $this->config->uikit || 1 == $this->config->uikit) + { + $fieldUikit .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "//" . Line::_(__LINE__, __CLASS__) . " Checking if " + . $field . " has UIKit components that must be loaded."; + + $fieldUikit .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) + . "\$this->uikitComp = " + . $this->contentone->get('Component') + . "Helper::getUikitComp(" . $string . "->" . $field . ",\$this->uikitComp);"; + } + } + } + + return $fieldUikit; + } + + /** + * Build and return the PHP method definition for retrieving the UIkit components. + * + * This method dynamically generates the source code for a `getUikitComp()` method + * if the configured UIkit version is either `1` or `2`. The generated method + * checks if the `$this->uikitComp` property is set and valid, and returns it; + * otherwise, it returns `false`. + * + * @return string The generated PHP code for the `getUikitComp()` method, or an + * empty string if the UIkit version is not 1 or 2. + * @since 5.1.2 + */ + public function getUikitComp(): string + { + $method = ''; + // only load for uikit version 2 + if (2 == $this->config->uikit || 1 == $this->config->uikit) + { + // build uikit get method + $method .= PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; + $method .= PHP_EOL . Indent::_(1) + . " * Get the uikit needed components"; + $method .= PHP_EOL . Indent::_(1) . " *"; + $method .= PHP_EOL . Indent::_(1) + . " * @return mixed An array of objects on success."; + $method .= PHP_EOL . Indent::_(1) . " *"; + $method .= PHP_EOL . Indent::_(1) . " */"; + $method .= PHP_EOL . Indent::_(1) + . "public function getUikitComp()"; + $method .= PHP_EOL . Indent::_(1) . "{"; + $method .= PHP_EOL . Indent::_(2) + . "if (isset(\$this->uikitComp) && " + . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$this->uikitComp))"; + $method .= PHP_EOL . Indent::_(2) . "{"; + $method .= PHP_EOL . Indent::_(3) . "return \$this->uikitComp;"; + $method .= PHP_EOL . Indent::_(2) . "}"; + $method .= PHP_EOL . Indent::_(2) . "return false;"; + $method .= PHP_EOL . Indent::_(1) . "}"; + } + + return $method; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php index a4f586e2d..7d20c0fbc 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Factory.php @@ -47,6 +47,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Service\Creator; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureComHelperClass; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureController; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureModel; +use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitectureModule; use VDM\Joomla\Componentbuilder\Compiler\Service\ArchitecturePlugin; use VDM\Joomla\Componentbuilder\Power\Service\Git; use VDM\Joomla\Componentbuilder\Power\Service\Github; @@ -161,6 +162,7 @@ abstract class Factory extends ExtendingFactory implements FactoryInterface ->registerServiceProvider(new ArchitectureComHelperClass()) ->registerServiceProvider(new ArchitectureController()) ->registerServiceProvider(new ArchitectureModel()) + ->registerServiceProvider(new ArchitectureModule()) ->registerServiceProvider(new ArchitecturePlugin()) ->registerServiceProvider(new Git()) ->registerServiceProvider(new Github()) diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Field/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Field/Data.php index 85dc0a94e..97972ec63 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Field/Data.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Field/Data.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Field; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HistoryInterface as History; @@ -106,11 +106,12 @@ class Data protected Rule $rule; /** - * The database class. + * Joomla Database Class. * - * @since 3.2.0 - */ - protected $db; + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; /** * Constructor. @@ -122,12 +123,13 @@ class Data * @param Customcode $customcode The Customcode Class. * @param FieldCustomcode $fieldcustomcode The Customcode Class. * @param Rule $rule The Rule Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ public function __construct(Config $config, Event $event, History $history, Placeholder $placeholder, Customcode $customcode, - FieldCustomcode $fieldcustomcode, Rule $rule) + FieldCustomcode $fieldcustomcode, Rule $rule, DatabaseInterface $db) { $this->config = $config; $this->event = $event; @@ -136,7 +138,7 @@ class Data $this->customcode = $customcode; $this->fieldcustomcode = $fieldcustomcode; $this->rule = $rule; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Field/Groups.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Field/Groups.php index ce2c89183..f4b8018c7 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Field/Groups.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Field/Groups.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Field; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Utilities\ArrayHelper; use VDM\Joomla\Utilities\GetHelper; @@ -69,20 +69,21 @@ final class Groups ]; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 - */ - protected $db; + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; /** * Constructor * * @since 3.2.0 */ - public function __construct() + public function __construct(DatabaseInterface $db) { - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Get.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Get.php index cdd0591f0..edfa9865f 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Get.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Get.php @@ -16,13 +16,13 @@ use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\CMS\Component\ComponentHelper; use VDM\Component\Componentbuilder\Administrator\Helper\ComponentbuilderHelper; -use VDM\Joomla\Utilities\StringHelper; -use VDM\Joomla\Utilities\JsonHelper; -use VDM\Joomla\Utilities\ArrayHelper; use VDM\Joomla\Componentbuilder\Compiler\Factory as CFactory; use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; use VDM\Joomla\Componentbuilder\Compiler\Utilities\Unique; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\JsonHelper; +use VDM\Joomla\Utilities\ArrayHelper; /** @@ -1093,9 +1093,9 @@ class Get // set if powers should be added to component (default is true) @deprecated $this->addPower = CFactory::_('Config')->get('add_power', true); // set the current user - $this->user = Factory::getUser(); + $this->user = $this->app->getIdentity(); // Get a db connection. - $this->db = Factory::getDbo(); + $this->db = CFactory::_('Joomla.Database'); // get global placeholders @deprecated $this->globalPlaceholders = CFactory::_('Component.Placeholder')->get(); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php index 3e24aec15..088e66476 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Infusion.php @@ -772,17 +772,17 @@ class Infusion extends Interpretation // set Auto check in function if (isset($view['checkin']) && $view['checkin'] == 1) { + // CHECKINCALL <<>> + CFactory::_('Compiler.Builder.Content.Multi')->set($nameListCode . '|CHECKINCALL', + CFactory::_('Architecture.Model.CheckInNow')->getCall() + ); // AUTOCHECKIN <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($nameListCode . '|AUTOCHECKIN', - $this->setAutoCheckin( + CFactory::_('Architecture.Model.CheckInNow')->getMethod( $nameSingleCode, CFactory::_('Config')->component_code_name ) ); - // CHECKINCALL <<>> - CFactory::_('Compiler.Builder.Content.Multi')->set($nameListCode . '|CHECKINCALL', - $this->setCheckinCall() - ); } else { @@ -1351,7 +1351,7 @@ class Infusion extends Interpretation // CUSTOM_ADMIN_GET_ITEM <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($view['settings']->code . '|CUSTOM_ADMIN_GET_ITEM', - $this->setCustomViewGetItem( + CFactory::_('Dynamicget.GetItem')->get( $view['settings']->main_get, $view['settings']->code, Indent::_(2) ) @@ -1369,7 +1369,7 @@ class Infusion extends Interpretation { // CUSTOM_ADMIN_GET_LIST_QUERY <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($view['settings']->code . '|CUSTOM_ADMIN_GET_LIST_QUERY', - $this->setCustomViewListQuery( + CFactory::_('Dynamicget.ListQuery')->get( $view['settings']->main_get, $view['settings']->code ) ); @@ -1392,7 +1392,7 @@ class Infusion extends Interpretation // CUSTOM_ADMIN_GET_ITEMS <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($view['settings']->code . '|CUSTOM_ADMIN_GET_ITEMS', - $this->setCustomViewGetItems( + CFactory::_('Dynamicget.GetItems')->get( $view['settings']->main_get, $view['settings']->code ) ); @@ -1408,12 +1408,12 @@ class Infusion extends Interpretation // CUSTOM_ADMIN_CUSTOM_METHODS <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($view['settings']->code . '|CUSTOM_ADMIN_CUSTOM_METHODS', - $this->setCustomViewCustomItemMethods( + CFactory::_('Dynamicget.CustomGetMethods')->get( $view['settings']->main_get, $view['settings']->code ) ); CFactory::_('Compiler.Builder.Content.Multi')->add($view['settings']->code . '|CUSTOM_ADMIN_CUSTOM_METHODS', - $this->setCustomViewCustomMethods( + CFactory::_('Dynamicget.Methods')->get( $view, $view['settings']->code ). false ); @@ -1879,7 +1879,7 @@ class Infusion extends Interpretation // SITE_GET_ITEM <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($view['settings']->code . '|SITE_GET_ITEM', - $this->setCustomViewGetItem( + CFactory::_('Dynamicget.GetItem')->get( $view['settings']->main_get, $view['settings']->code, Indent::_(2) ) @@ -1901,7 +1901,7 @@ class Infusion extends Interpretation ); // SITE_GET_LIST_QUERY <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($view['settings']->code . '|SITE_GET_LIST_QUERY', - $this->setCustomViewListQuery( + CFactory::_('Dynamicget.ListQuery')->get( $view['settings']->main_get, $view['settings']->code ) ); @@ -1914,7 +1914,7 @@ class Infusion extends Interpretation // SITE_GET_ITEMS <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($view['settings']->code . '|SITE_GET_ITEMS', - $this->setCustomViewGetItems( + CFactory::_('Dynamicget.GetItems')->get( $view['settings']->main_get, $view['settings']->code ) ); @@ -1940,12 +1940,12 @@ class Infusion extends Interpretation ); // SITE_CUSTOM_METHODS <<>> CFactory::_('Compiler.Builder.Content.Multi')->set($view['settings']->code . '|SITE_CUSTOM_METHODS', - $this->setCustomViewCustomItemMethods( + CFactory::_('Dynamicget.CustomGetMethods')->get( $view['settings']->main_get, $view['settings']->code ) ); CFactory::_('Compiler.Builder.Content.Multi')->add($view['settings']->code . '|SITE_CUSTOM_METHODS', - $this->setCustomViewCustomMethods( + CFactory::_('Dynamicget.Methods')->get( $view, $view['settings']->code ), false ); @@ -2228,87 +2228,9 @@ class Infusion extends Interpretation $_backup_target = CFactory::_('Config')->build_target; $_backup_lang = CFactory::_('Config')->lang_target; $_backup_langPrefix = CFactory::_('Config')->lang_prefix; - // infuse module data if set - if (CFactory::_('Joomlamodule.Data')->exists()) - { - foreach (CFactory::_('Joomlamodule.Data')->get() as $module) - { - if (ObjectHelper::check($module)) - { - // Trigger Event: jcb_ce_onBeforeInfuseModuleData - CFactory::_('Event')->trigger( - 'jcb_ce_onBeforeInfuseModuleData', [&$module] - ); - CFactory::_('Config')->build_target = $module->key; - CFactory::_('Config')->lang_target = $module->key; - $this->langPrefix = $module->lang_prefix; - CFactory::_('Config')->set('lang_prefix', $module->lang_prefix); - // MODCODE - CFactory::_('Compiler.Builder.Content.Multi')->set($module->key . '|MODCODE', - $this->getModCode($module) - ); - // DYNAMICGET - CFactory::_('Compiler.Builder.Content.Multi')->set($module->key . '|DYNAMICGETS', - $this->setCustomViewCustomMethods( - $module, $module->key - ) - ); - // HELPERCODE - if ($module->add_class_helper >= 1) - { - CFactory::_('Compiler.Builder.Content.Multi')->set($module->key . '|HELPERCODE', - $this->getModHelperCode($module) - ); - } - // MODDEFAULT - CFactory::_('Compiler.Builder.Content.Multi')->set($module->key . '|MODDEFAULT', - $this->getModDefault($module, $module->key) - ); - // MODDEFAULT_XXX - $this->setModTemplates($module); - // only add install script if needed - if ($module->add_install_script) - { - // INSTALLCLASS - CFactory::_('Compiler.Builder.Content.Multi')->set($module->key . '|INSTALLCLASS', - CFactory::_('Extension.InstallScript')->get($module) - ); - } - // FIELDSET - if (isset($module->form_files) - && ArrayHelper::check( - $module->form_files - )) - { - foreach ($module->form_files as $file => $files) - { - foreach ($files as $field_name => $fieldsets) - { - foreach ($fieldsets as $fieldset => $fields) - { - // FIELDSET_ . $file.$field_name.$fieldset - CFactory::_('Compiler.Builder.Content.Multi')->set($module->key . - '|FIELDSET_' . $file . $field_name . $fieldset, - CFactory::_('Compiler.Creator.Fieldset.Extension')->get( - $module, $fields - ) - ); - } - } - } - } - // MAINXML - CFactory::_('Compiler.Builder.Content.Multi')->set($module->key . '|MAINXML', - $this->getModuleMainXML($module) - ); - // Trigger Event: jcb_ce_onAfterInfuseModuleData - CFactory::_('Event')->trigger( - 'jcb_ce_onAfterInfuseModuleData', [&$module] - ); - } - } - } + // infuse module data if set + CFactory::_('Joomlamodule.Infusion')->set(); // infuse plugin data if set CFactory::_('Joomlaplugin.Infusion')->set(); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php index 8cf7e5f78..a79f17736 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Helper/Interpretation.php @@ -1441,7 +1441,7 @@ class Interpretation extends Fields } else { - $help[] = Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(DatabaseInterface::class);"; + $help[] = Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(Joomla__"."_7bd29d76_73c9_4c07_a5da_4f7a32aff78f___Power::class);"; } $help[] = Indent::_(2) . "\$query = \$db->getQuery(true);"; $help[] = Indent::_(2) @@ -2089,1094 +2089,214 @@ class Interpretation extends Fields return $keep; } - public function setCustomViewQuery(&$gets, &$code, $tab = '', $type = 'main' - ) + /** + * Set the custom view query. + * + * @param array $gets The data to build the query from. + * @param string $code The build code. + * @param string $tab The tab indentation. + * @param string $type The query type (main|custom). + * + * @return string The compiled query string. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.Queries')->get(...) + */ + public function setCustomViewQuery($gets, &$code, $tab = '', $type = 'main'): string { - $query = ''; - if (ArrayHelper::check($gets)) - { - $mainAsArray = []; - $check = 'zzz'; - foreach ($gets as $nr => $the_get) - { - // to insure that there be no double entries of a call - $checker = md5(serialize($the_get) . $code); - if (!isset($this->customViewQueryChecker[CFactory::_('Config')->build_target]) - || !isset($checker, $this->customViewQueryChecker[CFactory::_('Config')->build_target][$checker])) - { - // load this unuiqe key - $this->customViewQueryChecker[CFactory::_('Config')->build_target][$checker] - = true; - if (isset($the_get['selection']['type']) - && StringHelper::check( - $the_get['selection']['type'] - )) - { - $getItem = PHP_EOL . PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "//" . Line::_(__Line__, __Class__) - . " Get from " . $the_get['selection']['table'] - . " as " . $the_get['as']; - // set the selection - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . $the_get['selection']['select']; - } - else - { - $getItem = PHP_EOL . PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "//" . Line::_(__Line__, __Class__) - . " Get data"; - // set the selection - $getItem .= PHP_EOL . CFactory::_('Placeholder')->update_( - $the_get['selection']['select'] - ); - } - // load the from selection - if (($nr == 0 - && (!isset($the_get['join_field']) - || !StringHelper::check( - $the_get['join_field'] - )) - && (isset($the_get['selection']['type']) - && StringHelper::check( - $the_get['selection']['type'] - ))) - || ($type === 'custom' - && (isset($the_get['selection']['type']) - && StringHelper::check( - $the_get['selection']['type'] - )))) - { - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . '$query->from(' . $the_get['selection']['from'] - . ');'; - } - elseif (isset($the_get['join_field']) - && StringHelper::check( - $the_get['join_field'] - ) - && isset($the_get['selection']['type']) - && StringHelper::check( - $the_get['selection']['type'] - )) - { - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$query->join('" . $the_get['type']; - $getItem .= "', (" . $the_get['selection']['from']; - $getItem .= ") . ' ON (' . \$db->quoteName('" - . $the_get['on_field']; - $getItem .= "') . ' " . $the_get['operator']; - $getItem .= " ' . \$db->quoteName('" - . $the_get['join_field'] . "') . ')');"; - - $check = current(explode(".", (string) $the_get['on_field'])); - } - - // set the method defaults - if (($default = $this->setCustomViewMethodDefaults($the_get, $code)) !== false) - { - if (($join_field_ = CFactory::_('Compiler.Builder.Site.Dynamic.Get')->get(CFactory::_('Config')->build_target . - '.' . $default['code'] . '.' . $default['as'] . '.' . $default['join_field'])) !== null - && !in_array($check, $mainAsArray)) - { - // load to other query - CFactory::_('Compiler.Builder.Other.Query')->add( - CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . $join_field_ . '.' . $default['valueName'], - $getItem, - false - ); - } - else - { - $mainAsArray[] = $default['as']; - $query .= $getItem; - } - } - } - } - } - - return $query; - } - - public function setCustomViewFieldDecodeFilter(&$get, &$filters, $string, - $removeString, $code, $tab - ) - { - $filter = ''; - // check if filter is set for this field - if (ArrayHelper::check($filters)) - { - foreach ($filters as $field => $ter) - { - // build load counter - $key = md5( - 'setCustomViewFieldDecodeFilter' . $code . $get['key'] - . $string . $ter['table_key'] - ); - // check if we should load this again - if (strpos((string) $get['selection']['select'], (string) $ter['table_key']) - !== false - && !isset($this->loadTracker[$key])) - { - // set the key - $this->loadTracker[$key] = $key; - $as = ''; - $felt = ''; - list($as, $felt) = array_map( - 'trim', explode('.', (string) $ter['table_key']) - ); - if ($get['as'] == $as) - { - switch ($ter['filter_type']) - { - case 4: - // COM_COMPONENTBUILDER_DYNAMIC_GET_USER_GROUPS - $filter .= PHP_EOL . PHP_EOL . Indent::_(1) - . $tab . Indent::_(1) . "//" - . Line::_(__Line__, __Class__) . " filter " - . $as . " based on user groups"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) - . "\$remove = (count(array_intersect((array) \$this->groups, (array) " - . $string . "->" . $field - . "))) ? false : true;"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "if (\$remove)"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "{"; - if ($removeString == $string) - { - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Remove " . $string - . " if user not in groups"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . $string . " = null;"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "return false;"; - } - else - { - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Unset " . $string - . " if user not in groups"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "unset(" - . $removeString . ");"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "continue;"; - } - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "}"; - break; - case 9: - // COM_COMPONENTBUILDER_DYNAMIC_GET_ARRAY_VALUE - - $filter .= PHP_EOL . PHP_EOL . Indent::_(1) - . $tab . Indent::_(1) . "if (" - . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(" . $string . "->" - . $field . "))"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "{"; - - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " do your thing here"; - - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "}"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "else"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "{"; - - if ($removeString == $string) - { - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Remove " . $string - . " if not array."; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . $string . " = null;"; - } - else - { - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Unset " . $string - . " if not array."; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "unset(" - . $removeString . ");"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "continue;"; - } - - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "}"; - break; - case 10: - // COM_COMPONENTBUILDER_DYNAMIC_GET_REPEATABLE_VALUE - $filter .= PHP_EOL . PHP_EOL . Indent::_(1) - . $tab . Indent::_(1) . "//" - . Line::_(__Line__, __Class__) . " filter " - . $as . " based on repeatable value"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "if (" - . "Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(" . $string . "->" - . $field . "))"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "{"; - - $filter .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "\$array = json_decode(" - . $string . "->" . $field . ",true);"; - $filter .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "if (" - . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$array))"; - $filter .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "{"; - - $filter .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " do your thing here"; - - $filter .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "}"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "else"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "{"; - - if ($removeString == $string) - { - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(3) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Remove " . $string - . " if not array."; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(3) . $string . " = null;"; - } - else - { - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(3) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Unset " . $string - . " if not array."; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(3) . "unset(" - . $removeString . ");"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(3) . "continue;"; - } - - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "}"; - - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "}"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "else"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "{"; - - if ($removeString == $string) - { - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Remove " . $string - . " if not string."; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . $string . " = null;"; - } - else - { - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Unset " . $string - . " if not string."; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "unset(" - . $removeString . ");"; - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . "continue;"; - } - - $filter .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "}"; - break; - } - } - } - } - } - - return $filter; - } - - public function setCustomViewFieldDecode(&$get, $checker, $string, $code, - $tab = '' - ) - { - $fieldDecode = ''; - foreach ($checker as $field => $array) - { - // build load counter - $key = md5( - 'setCustomViewFieldDecode' . $code . $get['key'] . $string - . $field - ); - // check if we should load this again - if (strpos((string) $get['selection']['select'], (string) $field) !== false - && !isset($this->loadTracker[$key]) - && ArrayHelper::check($array['decode'])) - { - // set the key - $this->loadTracker[$key] = $key; - // insure it is unique - $array['decode'] = (array) array_unique( - array_reverse((array) $array['decode']) - ); - // now loop the array - foreach ($array['decode'] as $decode) - { - $if = ''; - $decoder = ''; - if ('json' === $decode) - { - $if = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "if (isset(" . $string . "->" . $field . ") && " - . "Super_" . "__4b225c51_d293_48e4_b3f6_5136cf5c3f18___Power::check(" - . $string . "->" . $field . "))" . PHP_EOL - . Indent::_(1) . $tab . Indent::_(1) . "{"; - // json_decode - $decoder = $string . "->" . $field . " = json_decode(" - . $string . "->" . $field . ", true);"; - } - elseif ('base64' === $decode) - { - $if = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "if (!empty(" . $string . "->" . $field . ") && " - . $string . "->" . $field - . " === base64_encode(base64_decode(" . $string - . "->" . $field . ")))" . PHP_EOL . Indent::_(1) - . $tab . Indent::_(1) . "{"; - // base64_decode - $decoder = $string . "->" . $field . " = base64_decode(" - . $string . "->" . $field . ");"; - } - elseif (strpos((string) $decode, '_encryption') !== false - || 'expert_mode' === $decode) - { - foreach (CFactory::_('Config')->cryption_types as $cryptionType) - { - if ($cryptionType . '_encryption' === $decode - || $cryptionType . '_mode' === $decode) - { - if ('expert' !== $cryptionType) - { - $if = PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "if (!empty(" . $string - . "->" . $field . ") && \$" - . $cryptionType . "key && !is_numeric(" - . $string . "->" . $field . ") && " - . $string . "->" . $field - . " === base64_encode(base64_decode(" - . $string . "->" . $field . ", true)))" - . PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "{"; - // set decryption - $decoder = $string . "->" . $field - . " = rtrim(\$" . $cryptionType - . "->decryptString(" . $string . "->" - . $field . "), " . '"\0"' . ");"; - } - elseif (CFactory::_('Compiler.Builder.Model.' . ucfirst($cryptionType). '.Field')-> - exists($array['admin_view'] . '.' . $field)) - { - $_placeholder_for_field - = array('[[[field]]]' => $string - . "->" . $field); - $fieldDecode .= CFactory::_('Placeholder')->update( - PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . implode( - PHP_EOL . Indent::_(1) . $tab - . Indent::_(1), - CFactory::_('Compiler.Builder.Model.' . ucfirst($cryptionType). '.Field')->get( - $array['admin_view'] . '.' . $field . '.get', ['error']) - ), $_placeholder_for_field - ); - } - // activate site decryption - CFactory::_('Compiler.Builder.Site.Decrypt')->set("{$cryptionType}.{$code}", true); - } - } - } - // check if we have found the details - if (StringHelper::check($if)) - { - // build decoder string - $fieldDecode .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "//" . Line::_(__Line__, __Class__) - . " Check if we can decode " . $field . $if - . PHP_EOL . Indent::_(1) . $tab . Indent::_(2) - . "//" . Line::_(__Line__, __Class__) . " Decode " - . $field; - } - if (StringHelper::check($decoder)) - { - // build decoder string - $fieldDecode .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(2) . $decoder . PHP_EOL . Indent::_(1) - . $tab . Indent::_(1) . "}"; - } - } - } - } - - return $fieldDecode; - } - - public function setCustomViewFieldonContentPrepareChecker(&$get, $checker, - $string, $code, $tab = '' - ) - { - $fieldPrepare = ''; - $runplugins = false; - // set component - $Component = CFactory::_('Compiler.Builder.Content.One')->get('Component'); - // set context - $context = (isset($get['context'])) ? $get['context'] : $code; - $context = 'com_' . CFactory::_('Config')->component_code_name . '.' . $context; - // load parms builder only once - $params = false; - foreach ($checker as $field => $array) - { - // build load counter - $key = md5( - 'setCustomViewFieldonContentPrepareChecker' . $code - . $get['key'] . $string . $field - ); - // check if we should load this again - if (strpos((string) $get['selection']['select'], (string) $field) !== false - && !isset($this->loadTracker[$key])) - { - // set the key - $this->loadTracker[$key] = $key; - // build decoder string - if (!$runplugins) - { - $runplugins = PHP_EOL . $tab . Indent::_(1) . "//" - . Line::_(__Line__, __Class__) - . " Load the JEvent Dispatcher"; - $runplugins .= PHP_EOL . $tab . Indent::_(1) - . "PluginHelper::importPlugin('content');"; - $runplugins .= PHP_EOL . $tab . Indent::_(1) - . '$this->_dispatcher = Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getApplication();'; - } - if (!$params) - { - $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_( - 1 - ) . "//" . Line::_(__Line__, __Class__) - . " Check if item has params, or pass whole item."; - $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_( - 1 - ) . "\$params = (isset(" . $string . "->params) && " - . "Super_" . "__4b225c51_d293_48e4_b3f6_5136cf5c3f18___Power::check(" . $string - . "->params)) ? json_decode(" . $string . "->params) : " - . $string . ";"; - $params = true; - } - $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "//" . Line::_(__Line__, __Class__) - . " Make sure the content prepare plugins fire on " - . $field; - $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$_" . $field . " = new \stdClass();"; - $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$_" . $field . '->text =& ' . $string . '->' . $field - . '; //' . Line::_(__Line__, __Class__) - . ' value must be in text'; - $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "//" . Line::_(__Line__, __Class__) - . " Since all values are now in text (Joomla Limitation), we also add the field name (" - . $field . ") to context"; - $fieldPrepare .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . '$this->_dispatcher->triggerEvent("onContentPrepare", array(\'' - . $context . '.' . $field . '\', &$_' . $field - . ', &$params, 0));'; - } - } - // load dispatcher - if ($runplugins) - { - $this->JEventDispatcher = array(Placefix::_h('DISPATCHER') => $runplugins); - } - - // return content prepare fix - return $fieldPrepare; - } - - public function setCustomViewFieldUikitChecker(&$get, $checker, $string, - $code, $tab = '' - ) - { - $fieldUikit = ''; - foreach ($checker as $field => $array) - { - // build load counter - $key = md5( - 'setCustomViewFieldUikitChecker' . $code . $get['key'] . $string - . $field - ); - // check if we should load this again - if (strpos((string) $get['selection']['select'], (string) $field) !== false - && !isset($this->loadTracker[$key])) - { - // set the key - $this->loadTracker[$key] = $key; - // only load for uikit version 2 (TODO) we may need to add another check here - if (2 == CFactory::_('Config')->uikit || 1 == CFactory::_('Config')->uikit) - { - $fieldUikit .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "//" . Line::_(__Line__, __Class__) . " Checking if " - . $field . " has uikit components that must be loaded."; - $fieldUikit .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$this->uikitComp = " - . CFactory::_('Compiler.Builder.Content.One')->get('Component') . "Helper::getUikitComp(" . $string . "->" - . $field . ",\$this->uikitComp);"; - } - } - } - - // return UIKIT fix - return $fieldUikit; - } - - public function setCustomViewCustomJoin(&$gets, $string, $code, &$asBucket, - $tab = '' - ) - { - if (ArrayHelper::check($gets)) - { - $customJoin = ''; - foreach ($gets as $get) - { - // set the value name $default - if (($default = $this->setCustomViewMethodDefaults($get, $code)) - !== false) - { - if ($this->checkJoint($default, $get, $asBucket)) - { - // build custom join string - $otherJoin = PHP_EOL . Indent::_(1) . Placefix::_h("TAB") - . Indent::_(1) . "//" . Line::_(__LINE__,__CLASS__) - . " set " . $default['valueName'] . " to the " - . Placefix::_h("STRING") . " object."; - $otherJoin .= PHP_EOL . Indent::_(1) . Placefix::_h("TAB") - . Indent::_(1) . Placefix::_h("STRING") . "->" - . $default['valueName'] . " = \$this->get" - . $default['methodName'] . "(" . Placefix::_h("STRING") . "->" - . CFactory::_('Compiler.Builder.Get.As.Lookup')-> - get($get['key'] . '.' . $get['on_field'], 'Error') - . ");"; - $join_field_ = CFactory::_('Compiler.Builder.Site.Dynamic.Get')->get(CFactory::_('Config')->build_target . - '.' . $default['code'] . '.' . $default['as'] . '.' . $default['join_field'], 'ZZZ'); - // load to other join - CFactory::_('Compiler.Builder.Other.Join')->add( - CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . $join_field_ . '.' . $default['valueName'], - $otherJoin, - false - ); - } - else - { - // build custom join string - $customJoin .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "//" . Line::_(__Line__, __Class__) - . " set " . $default['valueName'] . " to the " - . $string . " object."; - $customJoin .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . $string . "->" - . $default['valueName'] . " = \$this->get" - . $default['methodName'] . "(" . $string . "->" - . CFactory::_('Compiler.Builder.Get.As.Lookup')-> - get($get['key'] . '.' . $get['on_field'], 'Error') - . ");"; - } - } - } - - return $customJoin; - } - - return ''; - } - - public function checkJoint(&$default, &$get, &$asBucket) - { - // check if this function is not linked to the main call - list($aJoin) = explode('.', (string) $get['on_field']); - if (ArrayHelper::check($asBucket) && in_array($aJoin, $asBucket)) - { - return false; - } - // default fallback - elseif (CFactory::_('Compiler.Builder.Site.Dynamic.Get')->exists( - CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . - $default['as'] . '.' . $default['join_field'] - )) - { - return true; - } - - return false; - } - - public function setCustomViewFilter(&$filter, &$code, $tab = '') - { - $filters = ''; - if (ArrayHelper::check($filter)) - { - foreach ($filter as $ter) - { - $as = ''; - $field = ''; - $string = ''; - if (strpos((string) $ter['table_key'], '.') !== false) - { - list($as, $field) = array_map( - 'trim', explode('.', (string) $ter['table_key']) - ); - } - $path = $code . '.' . $ter['key'] . '.' . $as . '.' . $field; - switch ($ter['filter_type']) - { - case 1: - // COM_COMPONENTBUILDER_DYNAMIC_GET_ID - $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$query->where('" . $ter['table_key'] . " " - . $ter['operator'] . " ' . (int) \$pk);"; - break; - case 2: - // COM_COMPONENTBUILDER_DYNAMIC_GET_USER - $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$query->where('" . $ter['table_key'] . " " - . $ter['operator'] . " ' . (int) \$this->userId);"; - break; - case 3: - // COM_COMPONENTBUILDER_DYNAMIC_GET_ACCESS_LEVEL - $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$query->where('" . $ter['table_key'] . " " - . $ter['operator'] - . " (' . implode(',', \$this->levels) . ')');"; - break; - case 4: - // COM_COMPONENTBUILDER_DYNAMIC_GET_USER_GROUPS - $decodeChecker = CFactory::_('Compiler.Builder.Site.Field.Data')-> - get('decode.' . $path); - if (ArrayHelper::check($decodeChecker) - || $ter['state_key'] === 'array') - { - // set needed fields to filter after query - CFactory::_('Compiler.Builder.Site.Field.Decode.Filter')-> - set(CFactory::_('Config')->build_target . '.' . $path, $ter); - } - else - { - $string = PHP_EOL . Indent::_(1) . $tab . Indent::_( - 1 - ) . "\$query->where('" . $ter['table_key'] . " " - . $ter['operator'] - . " (' . implode(',', \$this->groups) . ')');"; - } - break; - case 5: - // COM_COMPONENTBUILDER_DYNAMIC_GET_CATEGORIES - $string = PHP_EOL . Indent::_(2) . $tab . "//" - . Line::_(__Line__, __Class__) - . " (TODO) The dynamic category filter is not ready."; - break; - case 6: - // COM_COMPONENTBUILDER_DYNAMIC_GET_TAGS - $string = PHP_EOL . Indent::_(2) . $tab . "//" - . Line::_(__Line__, __Class__) - . " (TODO) The dynamic tags filter is not ready."; - break; - case 7: - // COM_COMPONENTBUILDER_DYNAMIC_GET_DATE - $string = PHP_EOL . Indent::_(2) . $tab . "//" - . Line::_(__Line__, __Class__) - . " (TODO) The dynamic date filter is not ready."; - break; - case 8: - // COM_COMPONENTBUILDER_DYNAMIC_GET_FUNCTIONVAR - if ($ter['operator'] === 'IN' - || $ter['operator'] === 'NOT IN') - { - $string = PHP_EOL . Indent::_(2) . $tab . "//" - . Line::_(__Line__, __Class__) . " Check if " - . $ter['state_key'] - . " is an array with values."; - $string .= PHP_EOL . Indent::_(2) . $tab - . "\$array = " . $ter['state_key'] . ";"; - $string .= PHP_EOL . Indent::_(2) . $tab - . "if (isset(\$array) && " - . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$array))"; - $string .= PHP_EOL . Indent::_(2) . $tab . "{"; - $string .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "\$query->where('" - . $ter['table_key'] . " " . $ter['operator'] - . " (' . implode(',', \$array) . ')');"; - $string .= PHP_EOL . Indent::_(2) . $tab . "}"; - // check if empty is allowed - if (!isset($ter['empty']) || !$ter['empty']) - { - $string .= PHP_EOL . Indent::_(2) . $tab - . "else"; - $string .= PHP_EOL . Indent::_(2) . $tab . "{"; - $string .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "return false;"; - $string .= PHP_EOL . Indent::_(2) . $tab . "}"; - } - } - else - { - $string = PHP_EOL . Indent::_(2) . $tab . "//" - . Line::_(__Line__, __Class__) . " Check if " - . $ter['state_key'] - . " is a string or numeric value."; - $string .= PHP_EOL . Indent::_(2) . $tab - . "\$checkValue = " . $ter['state_key'] . ";"; - $string .= PHP_EOL . Indent::_(2) . $tab - . "if (isset(\$checkValue) && " - . "Super_" . "__1f28cb53_60d9_4db1_b517_3c7dc6b429ef___Power::check(\$checkValue))"; - $string .= PHP_EOL . Indent::_(2) . $tab . "{"; - $string .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "\$query->where('" - . $ter['table_key'] . " " . $ter['operator'] - . " ' . \$db->quote(\$checkValue));"; - $string .= PHP_EOL . Indent::_(2) . $tab . "}"; - $string .= PHP_EOL . Indent::_(2) . $tab - . "elseif (is_numeric(\$checkValue))"; - $string .= PHP_EOL . Indent::_(2) . $tab . "{"; - $string .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "\$query->where('" - . $ter['table_key'] . " " . $ter['operator'] - . " ' . \$checkValue);"; - $string .= PHP_EOL . Indent::_(2) . $tab . "}"; - // check if empty is allowed - if (!isset($ter['empty']) || !$ter['empty']) - { - $string .= PHP_EOL . Indent::_(2) . $tab - . "else"; - $string .= PHP_EOL . Indent::_(2) . $tab . "{"; - $string .= PHP_EOL . Indent::_(2) . $tab - . Indent::_(1) . "return false;"; - $string .= PHP_EOL . Indent::_(2) . $tab . "}"; - } - } - break; - case 9: - case 10: - // COM_COMPONENTBUILDER_DYNAMIC_GET_ARRAY_VALUE - // COM_COMPONENTBUILDER_DYNAMIC_GET_REPEATABLE_VALUE - $string = ""; - // set needed fields to filter after query - CFactory::_('Compiler.Builder.Site.Field.Decode.Filter')-> - set(CFactory::_('Config')->build_target . '.' . $path, $ter); - break; - case 11: - // COM_COMPONENTBUILDER_DYNAMIC_GET_OTHER - if (strpos($as, '(') !== false) - { - // TODO (for now we only fix extra sql methods here) - list($dump, $as) = array_map( - 'trim', explode('(', $as) - ); - $field = trim(str_replace(')', '', $field)); - } - $string = PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$query->where('" . $ter['table_key'] . " " - . $ter['operator'] . " " . $ter['state_key'] - . "');"; - break; - } - // only add if the filter is set - if (StringHelper::check($string)) - { - // sort where - if ($as === 'a' || CFactory::_('Compiler.Builder.Site.Main.Get')-> - exists(CFactory::_('Config')->build_target . '.' . $code . '.' . $as)) - { - $filters .= $string; - } - elseif ($as !== 'a') - { - CFactory::_('Compiler.Builder.Other.Filter')-> - set(CFactory::_('Config')->build_target . '.' . $code . '.' . $as . '.' . $field, $string);; - } - } - } - } - - return $filters; - } - - public function setCustomViewGroup(&$group, &$code, $tab = '') - { - $grouping = ''; - if (ArrayHelper::check($group)) - { - foreach ($group as $gr) - { - list($as, $field) = array_map( - 'trim', explode('.', (string) $gr['table_key']) - ); - // set the string - $string = "\$query->group('" . $gr['table_key'] . "');"; - // sort where - if ($as === 'a' || CFactory::_('Compiler.Builder.Site.Main.Get')-> - exists(CFactory::_('Config')->build_target . '.' . $code . '.' . $as)) - { - $grouping .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . $string; - } - else - { - CFactory::_('Compiler.Builder.Other.Group')->set( - CFactory::_('Config')->build_target . '.' . $code . '.' . $as . '.' . $field, - PHP_EOL . Indent::_(2) . $string - ); - } - } - } - - return $grouping; - } - - public function setCustomViewOrder(&$order, &$code, $tab = '') - { - $ordering = ''; - if (ArrayHelper::check($order)) - { - foreach ($order as $or) - { - list($as, $field) = array_map( - 'trim', explode('.', (string) $or['table_key']) - ); - // check if random - if ('RAND' === $or['direction']) - { - // set the string - $string = "\$query->order('RAND()');"; - } - else - { - // set the string - $string = "\$query->order('" . $or['table_key'] . " " - . $or['direction'] . "');"; - } - // sort where - if ($as === 'a' || CFactory::_('Compiler.Builder.Site.Main.Get')-> - exists(CFactory::_('Config')->build_target . '.' . $code . '.' . $as)) - { - $ordering .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . $string; - } - else - { - CFactory::_('Compiler.Builder.Other.Order')->set( - CFactory::_('Config')->build_target . '.' . $code . '.' . $as . '.' . $field, - PHP_EOL . Indent::_(2) . $string - ); - } - } - } - - return $ordering; - } - - public function setCustomViewWhere(&$where, &$code, $tab = '') - { - $wheres = ''; - if (ArrayHelper::check($where)) - { - foreach ($where as $whe) - { - $as = ''; - $field = ''; - $value = ''; - list($as, $field) = array_map( - 'trim', explode('.', (string) $whe['table_key']) - ); - if (is_numeric($whe['value_key'])) - { - $value = " " . $whe['value_key'] . "');"; - } - elseif (strpos((string) $whe['value_key'], '$') !== false) - { - if ($whe['operator'] === 'IN' - || $whe['operator'] === 'NOT IN') - { - $value = " (' . implode(',', " . $whe['value_key'] - . ") . ')');"; - } - else - { - $value = " ' . \$db->quote(" . $whe['value_key'] - . "));"; - } - } - elseif (strpos((string) $whe['value_key'], '.') !== false) - { - if (strpos((string) $whe['value_key'], "'") !== false) - { - $value = " ' . \$db->quote(" . $whe['value_key'] - . "));"; - } - else - { - $value = " " . $whe['value_key'] . "');"; - } - } - elseif (StringHelper::check($whe['value_key'])) - { - $value = " " . $whe['value_key'] . "');"; - } - // only load if there is a value - if (StringHelper::check($value)) - { - $tabe = ''; - if ($as === 'a') - { - $tabe = $tab; - } - // set the string - if ($whe['operator'] === 'IN' - || $whe['operator'] === 'NOT IN') - { - $string = "if (isset(" . $whe['value_key'] . ") && " - . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(" - . $whe['value_key'] . "))"; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) - . "{"; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(2) - . "//" . Line::_(__Line__, __Class__) . " Get where " - . $whe['table_key'] . " is " . $whe['value_key']; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(2) - . "\$query->where('" . $whe['table_key'] . " " - . $whe['operator'] . $value; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) - . "}"; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) - . "else"; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) - . "{"; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(2) - . "return false;"; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) - . "}"; - } - else - { - $string = "//" . Line::_(__Line__, __Class__) - . " Get where " . $whe['table_key'] . " is " - . $whe['value_key']; - $string .= PHP_EOL . Indent::_(1) . $tabe . Indent::_(1) - . "\$query->where('" . $whe['table_key'] . " " - . $whe['operator'] . $value; - } - // sort where - if ($as === 'a' || CFactory::_('Compiler.Builder.Site.Main.Get')-> - exists(CFactory::_('Config')->build_target . '.' . $code . '.' . $as)) - { - $wheres .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . $string; - } - elseif ($as !== 'a') - { - CFactory::_('Compiler.Builder.Other.Where')->set( - CFactory::_('Config')->build_target . '.' . $code . '.' . $as . '.' . $field, - PHP_EOL . Indent::_(2) . $string - ); - } - } - } - } - - return $wheres; - } - - public function setCustomViewGlobals(&$global, $string, $as, $tab = '') - { - $globals = ''; - if (ArrayHelper::check($global)) - { - $as = array_unique($as); - foreach ($global as $glo) - { - if (in_array($glo['as'], $as)) - { - switch ($glo['type']) - { - case 1: - // SET STATE - $value = "\$this->setState('" . $glo['as'] . "." - . $glo['name'] . "', " . $string . "->" - . $glo['key'] . ");"; - break; - case 2: - // SET THIS - $value = "\$this->" . $glo['as'] . "_" - . $glo['name'] . " = " . $string . "->" - . $glo['key'] . ";"; - break; - } - // only add if the filter is set - if (StringHelper::check($value)) - { - $globals .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "//" . Line::_(__Line__, __Class__) - . " set the global " . $glo['name'] . " value." - . PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . $value; - } - } - } - } - - return $globals; + return CFactory::_('Dynamicget.Queries')->get($gets, $code, $tab, $type); } /** - * @param $string - * @param string $type + * Get the Custom View Field Decode Filter code block. * - * @return mixed + * @param array $get The GET metadata for the current field. + * @param array $filters The filters to apply on the field. + * @param string $string The variable name representing the current object. + * @param string $removeString The variable name for object removal context. + * @param string $code The custom view identifier code. + * @param string $tab The tab level for indent formatting. + * + * @return string The generated PHP filter code block. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.FilterColumn')->get(...) + */ + public function setCustomViewFieldDecodeFilter($get, $filters, $string, $removeString, $code, $tab): string + { + return CFactory::_('Dynamicget.FilterColumn')->get($get, $filters, $string, $removeString, $code, $tab); + } + + /** + * Generate the decode logic for a column in the custom view. + * + * @param array $get The get array with view configuration. + * @param array $checker Field decode configuration. + * @param string $string The variable representing the row object. + * @param string $code The calling context code string. + * @param string $tab Optional indentation tab prefix. + * + * @return string The generated decode logic. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.DecodeColumn')->get(...) + */ + public function setCustomViewFieldDecode($get, $checker, $string, $code, $tab = ''): string + { + return CFactory::_('Dynamicget.DecodeColumn')->get($get, $checker, $string, $code, $tab); + } + + /** + * Get the content preparation plugin logic for a field. + * + * @param array $get The get array passed in. + * @param array $checker The checker structure containing field info. + * @param string $string The string name for the object. + * @param string $code The code to use as fallback context. + * @param string $tab Indentation tab prefix. + * + * @return string The content preparation PHP string. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.FieldonContentPrepare')->get(...) + */ + public function setCustomViewFieldonContentPrepareChecker($get, $checker, $string, $code, $tab = ''): string + { + return CFactory::_('Dynamicget.FieldonContentPrepare')->get($get, $checker, $string, $code, $tab); + } + + /** + * Check if custom view fields contain UIKit components that must be loaded. + * + * This method iterates through the given checker array, determines whether the + * field should have UIKit components loaded based on the selection criteria, + * and appends the relevant code for inclusion. + * + * @param array $get The "get" array containing view configuration data. + * @param array $checker The array of fields and their configurations to check. + * @param string $string The string variable name or object reference in the generated code. + * @param string $code The code identifier used for generating unique load keys. + * @param string $tab Optional indentation tab for formatting generated code. + * + * @return string The generated PHP code string for UIKit component inclusion. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.UikitLoader')->get(...) + */ + public function setCustomViewFieldUikitChecker($get, $checker, $string, $code, $tab = ''): string + { + return CFactory::_('Dynamicget.UikitLoader')->get($get, $checker, $string, $code, $tab); + } + + /** + * Get the custom view custom join code. + * + * @param array $gets The array of join definitions. + * @param string $string The target variable name in generated code. + * @param string $code The code identifier for the join. + * @param array $asBucket The array of already processed join aliases. + * @param string $tab The indentation tab string for formatting (optional). + * + * @return string The generated custom join code block or an empty string. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.CustomJoin')->get(...) + */ + public function setCustomViewCustomJoin($gets, $string, $code, $asBucket, $tab = '') + { + return CFactory::_('Dynamicget.CustomJoin')->get($gets, $string, $code, $asBucket, $tab); + } + + /** + * Determine whether a join should be processed as a separate join. + * + * @param array $default The join structure details (passed by reference). + * @param array $get The current join definition (passed by reference). + * @param array $asBucket The list of already processed join aliases (passed by reference). + * + * @return bool True if the join should be processed separately, false otherwise. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.CustomJoin')->check(...) + */ + public function checkJoint($default, $get, $asBucket): bool + { + return CFactory::_('Dynamicget.CustomJoin')->check($default, $get, $asBucket); + } + + /** + * Build the dynamic query filters for a custom view. + * + * @param array $filter The filter configuration array. + * @param string $code The code representing the view context. + * @param string $tab The indentation tab string. + * + * @return string The generated filter query strings. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.QueryFilter')->get(...) + */ + public function setCustomViewFilter($filter, $code, $tab = ''): string + { + return CFactory::_('Dynamicget.QueryFilter')->get($filter, $code, $tab); + } + + /** + * Generate GROUP BY code for the query. + * + * @param array $group The grouping configuration array. + * @param string $code The component code. + * @param string $tab The indentation tab characters. + * + * @return string The generated GROUP BY code. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.QueryGroup')->get(...) + */ + public function setCustomViewGroup($group, $code, $tab = ''): string + { + return CFactory::_('Dynamicget.QueryGroup')->get($group, $code, $tab); + } + + /** + * Build the ordering part of a query for a custom view. + * + * @param array $order The ordering rules array (passed by reference). + * @param string $code The code identifier (passed by reference). + * @param string $tab The tab indentation. + * + * @return string The generated ordering query part. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.QueryOrder')->get(...) + */ + public function setCustomViewOrder($order, $code, $tab = ''): string + { + return CFactory::_('Dynamicget.QueryOrder')->get($order, $code, $tab); + } + + /** + * Process and build WHERE clauses for a given custom view. + * + * @param array $where The WHERE clause definitions. + * @param string $code The code identifier for the view. + * @param string $tab Optional tab/indentation prefix. + * + * @return string The generated WHERE clauses as a string. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.QueryWhere')->get(...) + */ + public function setCustomViewWhere($where, $code, $tab = ''): string + { + return CFactory::_('Dynamicget.QueryWhere')->get($where, $code, $tab); + } + + /** + * Generate PHP code for setting custom view global values. + * + * @param array $global The list of global configuration items. + * @param string $string The base string reference to the data source. + * @param array $as The list of aliases to process. + * @param string $tab The tab indentation string (optional). + * + * @return string The generated PHP code for setting global values. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.Globals')->get(...) + */ + public function setCustomViewGlobals($global, $string, $as, $tab = ''): string + { + return CFactory::_('Dynamicget.Globals')->get($global, $string, $as, $tab); + } + + /** + * Remove the alias (AS) portion from a dot-notation string. + * + * @param string $string The input string possibly containing a dot (e.g. `a.name`). + * + * @return string The portion after the dot or the original string if no dot found. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.JoinStructure')->getFieldName(...); */ public function removeAsDot($string, $type = '') { - if (strpos((string) $string, '.') !== false) - { - list($dump, $field) = array_map('trim', explode('.', (string) $string)); - } - else - { - $field = $string; - } - - return $field; + return CFactory::_('Dynamicget.JoinStructure')->getFieldName($string); } /** @@ -3250,502 +2370,33 @@ class Interpretation extends Fields } /** - * @param $get - * @param $code - * @param string $tab - * @param string $type + * Get the dynamic get item method. * - * @return string + * @param mixed $get The get object. + * @param string $code The code string. + * @param string $tab The tab spacing. + * @param string $type The type (main|custom). + * + * @return string The generated PHP code block. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.GetItem')->get(...) */ - public function setCustomViewGetItem(&$get, &$code, $tab = '', $type = 'main') + public function setCustomViewGetItem($get, $code, $tab = '', $type = 'main'): string { - if (ObjectHelper::check($get)) - { - // set the site decription switches - foreach (CFactory::_('Config')->cryption_types as $cryptionType) - { - CFactory::_('Compiler.Builder.Site.Decrypt')->set("{$cryptionType}.{$code}", false); - } - // start the get Item - $getItem = ''; - // set before item php - if (isset($get->add_php_before_getitem) - && $get->add_php_before_getitem == 1 - && isset($get->php_before_getitem) - && StringHelper::check( - $get->php_before_getitem - )) - { - $getItem .= CFactory::_('Placeholder')->update_( - $get->php_before_getitem - ); - } - // start loadin the get Item - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" - . Line::_(__Line__, __Class__) . " Get a db connection."; - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDbo();"; - } - else - { - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$db = \$this->getDatabase();"; - } - $getItem .= PHP_EOL . PHP_EOL . $tab . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " Create a new query object."; - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$query = \$db->getQuery(true);"; - // set main get query - $getItem .= $this->setCustomViewQuery($get->main_get, $code, $tab); - // setup filters - if (isset($get->filter)) - { - $getItem .= $this->setCustomViewFilter( - $get->filter, $code, $tab - ); - } - // setup Where - if (isset($get->where)) - { - $getItem .= $this->setCustomViewWhere($get->where, $code, $tab); - } - // setup ordering - if (isset($get->order)) - { - $getItem .= $this->setCustomViewOrder($get->order, $code, $tab); - } - // setup grouping - if (isset($get->group)) - { - $getItem .= $this->setCustomViewGroup($get->group, $code, $tab); - } - // db set query data placeholder - $getItem .= Placefix::_h("DB_SET_QUERY_DATA") ; - // set after item php - if (isset($get->add_php_after_getitem) - && $get->add_php_after_getitem == 1 - && isset($get->php_after_getitem) - && StringHelper::check($get->php_after_getitem)) - { - $getItem .= CFactory::_('Placeholder')->update_( - $get->php_after_getitem - ); - } - // check the getItem string to see if we should still add set query to data - if (strpos($getItem, '$data =') === false) - { - // get ready to get query - $setQuery[Placefix::_h("DB_SET_QUERY_DATA")] = - PHP_EOL . PHP_EOL . $tab . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " Reset the query using our newly populated query object."; - $setQuery[Placefix::_h("DB_SET_QUERY_DATA")] .= - PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$db->setQuery(\$query);"; - $setQuery[Placefix::_h("DB_SET_QUERY_DATA")] .= - PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" - . Line::_(__Line__, __Class__) - . " Load the results as a stdClass object."; - $setQuery[Placefix::_h("DB_SET_QUERY_DATA")] .= - PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$data = \$db->loadObject();"; - // add the db set query to data - } - else - { - // remove our placeholder - $setQuery[Placefix::_h("DB_SET_QUERY_DATA")] = ''; - } - // add the db set query to data - $getItem = str_replace( - array_keys($setQuery), - array_values($setQuery), $getItem - ); - $getItem .= PHP_EOL . PHP_EOL . $tab . Indent::_(2) - . "if (empty(\$data))"; - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "{"; - if ($type === 'main') - { - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) - . "\$app = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getApplication();"; - $langKeyWoord = CFactory::_('Config')->lang_prefix . '_' - . StringHelper::safe( - 'Not found or access denied', 'U' - ); - CFactory::_('Language')->set( - CFactory::_('Config')->lang_target, $langKeyWoord, 'Not found, or access denied.' - ); - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " If no data is found redirect to default page and show warning."; - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) - . "\$app->enqueueMessage(Joomla__"."_ba6326ef_cb79_4348_80f4_ab086082e3c5___Power::_('" . $langKeyWoord - . "'), 'warning');"; - if ('site' === CFactory::_('Config')->build_target) - { - // check that the default and the redirect page is not the same - if (CFactory::_('Compiler.Builder.Content.One')->exists('SITE_DEFAULT_VIEW') - && CFactory::_('Compiler.Builder.Content.One')->get('SITE_DEFAULT_VIEW') != $code) - { - $redirectString = "Joomla__"."_d4c76099_4c32_408a_8701_d0a724484dfd___Power::_('index.php?option=com_" - . CFactory::_('Config')->component_code_name . "&view=" - . CFactory::_('Compiler.Builder.Content.One')->get('SITE_DEFAULT_VIEW') . "')"; - } - else - { - $redirectString = 'Joomla__'.'_eecc143e_b5cf_4c33_ba4d_97da1df61422___Power::root()'; - } - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) - . "\$app->redirect(" . $redirectString . ");"; - } - else - { - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) - . "\$app->redirect('index.php?option=com_" - . CFactory::_('Config')->component_code_name . "');"; - } - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) - . "return false;"; - } - else - { - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(2) - . "return false;"; - } - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "}"; - // dispatcher placeholder - $getItem .= Placefix::_h("DISPATCHER") ; - if (ArrayHelper::check($get->main_get)) - { - $asBucket = []; - foreach ($get->main_get as $main_get) - { - if (isset($main_get['key']) && isset($main_get['as'])) - { - // build path - $path = $code . '.' . $main_get['key'] . '.' . $main_get['as']; - - $decodeChecker = CFactory::_('Compiler.Builder.Site.Field.Data')->get('decode.' . $path); - if (ArrayHelper::check($decodeChecker)) - { - // set decoding of needed fields - $getItem .= $this->setCustomViewFieldDecode( - $main_get, $decodeChecker, '$data', $code, - $tab - ); - } - - $decodeFilter = CFactory::_('Compiler.Builder.Site.Field.Decode.Filter')-> - get(CFactory::_('Config')->build_target . '.' . $path); - if (ArrayHelper::check($decodeFilter)) - { - // also filter fields if needed - $getItem .= $this->setCustomViewFieldDecodeFilter( - $main_get, $decodeFilter, '$data', '$data', - $code, $tab - ); - } - - $contentprepareChecker = CFactory::_('Compiler.Builder.Site.Field.Data')-> - get('textareas.' . $path); - if (ArrayHelper::check($contentprepareChecker)) - { - // set contentprepare checkers on needed fields - $getItem .= $this->setCustomViewFieldonContentPrepareChecker( - $main_get, $contentprepareChecker, '$data', - $code, $tab - ); - } - - $uikitChecker = CFactory::_('Compiler.Builder.Site.Field.Data')->get('uikit.' . $path); - if (ArrayHelper::check($uikitChecker)) - { - // set uikit checkers on needed fields - $getItem .= $this->setCustomViewFieldUikitChecker( - $main_get, $uikitChecker, '$data', $code, - $tab - ); - } - - $asBucket[] = $main_get['as']; - } - } - } - // set the scripts - $Component = CFactory::_('Compiler.Builder.Content.One')->get('Component'); - $script = ''; - foreach (CFactory::_('Config')->cryption_types as $cryptionType) - { - if (CFactory::_('Compiler.Builder.Site.Decrypt')->get("{$cryptionType}.{$code}", false)) - { - if ('expert' !== $cryptionType) - { - $script .= PHP_EOL . PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . "//" . Line::_(__Line__, __Class__) - . " Get the " . $cryptionType . " encryption."; - $script .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$" . $cryptionType . "key = " . $Component - . "Helper::getCryptKey('" . $cryptionType . "');"; - $script .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "//" . Line::_(__Line__, __Class__) - . " Get the encryption object."; - $script .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$" . $cryptionType . " = new Super_" . "__99175f6d_dba8_4086_8a65_5c4ec175e61d___Power(\$" - . $cryptionType . "key);"; - } - elseif (CFactory::_('Compiler.Builder.Model.' . ucfirst($cryptionType). '.Field.Initiator')-> - exists("{$code}.get")) - { - foreach (CFactory::_('Compiler.Builder.Model.' . ucfirst($cryptionType). '.Field.Initiator')-> - get("{$code}.get") as $block) - { - $script .= PHP_EOL . Indent::_(1) . implode( - PHP_EOL . Indent::_(1), $block - ); - } - } - } - } - $getItem = $script . $getItem; - // setup Globals - $getItem .= $this->setCustomViewGlobals( - $get->global, '$data', $asBucket, $tab - ); - // setup the custom gets that returns multiple values - $getItem .= $this->setCustomViewCustomJoin( - $get->custom_get, '$data', $code, $asBucket, $tab - ); - // set calculations - if ($get->addcalculation == 1) - { - $get->php_calculation = (array) explode( - PHP_EOL, (string) CFactory::_('Placeholder')->update_( - $get->php_calculation - ) - ); - $getItem .= PHP_EOL . Indent::_(1) . $tab - . Indent::_(1) . implode( - PHP_EOL . Indent::_(1) . $tab . Indent::_(1), - $get->php_calculation - ); - } - if ($type === 'custom') - { - // return the object - $getItem .= PHP_EOL . PHP_EOL . Indent::_(1) . $tab . Indent::_( - 1 - ) . "//" . Line::_(__Line__, __Class__) - . " return data object."; - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "return \$data;"; - } - else - { - // set the object - $getItem .= PHP_EOL . PHP_EOL . Indent::_(1) . $tab . Indent::_( - 1 - ) . "//" . Line::_(__Line__, __Class__) - . " set data object to item."; - $getItem .= PHP_EOL . Indent::_(1) . $tab . Indent::_(1) - . "\$this->_item[\$pk] = \$data;"; - } - // only update if dispacher placholder is found - if (strpos($getItem, (string) Placefix::_h('DISPATCHER')) - !== false) - { - // check if the dispather should be added - if (!isset($this->JEventDispatcher) - || !ArrayHelper::check( - $this->JEventDispatcher - )) - { - $this->JEventDispatcher = array(Placefix::_h('DISPATCHER') => ''); - } - $getItem = str_replace( - array_keys($this->JEventDispatcher), - array_values($this->JEventDispatcher), $getItem - ); - } - - return $getItem; - } - - return PHP_EOL . Indent::_(1) . $tab . Indent::_(1) . "//" - . Line::_(__Line__, __Class__) . "add your custom code here."; + return CFactory::_('Dynamicget.GetItem')->get($get, $code, $tab, $type); } - public function setCustomViewCustomMethods($main_view, $code) + /** + * Get the required data to generate dynamicget methods. + * + * @param array|object $mainView The main view data + * @param string $code The component code + * + * @return string The generated methods + * @deprecated 5.1.2 use CFactory::_('Dynamicget.Methods')->get(...) + */ + public function setCustomViewCustomMethods($mainView, $code): string { - $methods = ''; - // then set the needed custom methods - if (ArrayHelper::check($main_view) - && isset($main_view['settings']) - && ObjectHelper::check($main_view['settings']) - && isset($main_view['settings']->custom_get)) - { - $_dynamic_get = $main_view['settings']->custom_get; - } - elseif (ObjectHelper::check($main_view) - && isset($main_view->custom_get)) - { - $_dynamic_get = $main_view->custom_get; - } - // check if we have an array - if (isset($_dynamic_get) - && ArrayHelper::check( - $_dynamic_get - )) - { - // start dynamic build - foreach ($_dynamic_get as $view) - { - // fix alias to use in code - $view->code = StringHelper::safe($code); - $view->Code = StringHelper::safe( - $view->code, 'F' - ); - $view->CODE = StringHelper::safe( - $view->code, 'U' - ); - $main = ''; - if ($view->gettype == 3) - { - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - // SITE_GET_ITEM <<>> - $main .= PHP_EOL . PHP_EOL . Indent::_(2) - . "if (!isset(\$this->initSet) || !\$this->initSet)"; - $main .= PHP_EOL . Indent::_(2) . "{"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->user = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getUser();"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->userId = \$this->user->get('id');"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->guest = \$this->user->get('guest');"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->groups = \$this->user->get('groups');"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->authorisedGroups = \$this->user->getAuthorisedGroups();"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->levels = \$this->user->getAuthorisedViewLevels();"; - $main .= PHP_EOL . Indent::_(3) . "\$this->initSet = true;"; - $main .= PHP_EOL . Indent::_(2) . "}"; - } - $main .= $this->setCustomViewGetItem( - $view, $view->code, '', 'custom' - ); - $type - = 'mixed item data object on success, false on failure.'; - } - elseif ($view->gettype == 4) - { - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - $main .= PHP_EOL . PHP_EOL . Indent::_(2) - . "if (!isset(\$this->initSet) || !\$this->initSet)"; - $main .= PHP_EOL . Indent::_(2) . "{"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->user = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getUser();"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->userId = \$this->user->get('id');"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->guest = \$this->user->get('guest');"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->groups = \$this->user->get('groups');"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->authorisedGroups = \$this->user->getAuthorisedGroups();"; - $main .= PHP_EOL . Indent::_(3) - . "\$this->levels = \$this->user->getAuthorisedViewLevels();"; - $main .= PHP_EOL . Indent::_(3) . "\$this->initSet = true;"; - $main .= PHP_EOL . Indent::_(2) . "}"; - } - $main .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " Get the global params"; - $main .= PHP_EOL . Indent::_(2) - . "\$globalParams = ComponentHelper::getParams('com_" - . CFactory::_('Config')->component_code_name . "', true);"; - // set php before listquery - if (isset($view->add_php_getlistquery) - && $view->add_php_getlistquery == 1 - && isset($view->php_getlistquery) - && StringHelper::check( - $view->php_getlistquery - )) - { - $main .= CFactory::_('Placeholder')->update_( - $view->php_getlistquery - ); - } - // SITE_GET_LIST_QUERY <<>> - $main .= $this->setCustomViewListQuery( - $view, $view->code, false - ); - // set before items php - if (isset($view->add_php_before_getitems) - && $view->add_php_before_getitems == 1 - && isset($view->php_before_getitems) - && StringHelper::check( - $view->php_before_getitems - )) - { - $main .= CFactory::_('Placeholder')->update_( - $view->php_before_getitems - ); - } - // load the object list - $main .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " Reset the query using our newly populated query object."; - $main .= PHP_EOL . Indent::_(2) - . "\$db->setQuery(\$query);"; - $main .= PHP_EOL . Indent::_(2) - . "\$items = \$db->loadObjectList();"; - $main .= PHP_EOL . PHP_EOL . Indent::_(2) - . "if (empty(\$items))"; - $main .= PHP_EOL . Indent::_(2) . "{"; - $main .= PHP_EOL . Indent::_(3) . "return false;"; - $main .= PHP_EOL . Indent::_(2) . "}"; - // SITE_GET_ITEMS <<>> - $main .= $this->setCustomViewGetItems($view, $view->code); - // set after items php - if (isset($view->add_php_after_getitems) - && $view->add_php_after_getitems == 1 - && isset($view->php_after_getitems) - && StringHelper::check( - $view->php_after_getitems - )) - { - $main .= CFactory::_('Placeholder')->update_( - $view->php_after_getitems - ); - } - $main .= PHP_EOL . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " return items"; - $main .= PHP_EOL . Indent::_(2) . "return \$items;"; - $type - = 'mixed An array of objects on success, false on failure.'; - } - // load the main mehtod - $methods .= $this->setMainCustomMehtod( - $main, $view->getcustom, $type - ); - // SITE_CUSTOM_METHODS <<>> - $methods .= $this->setCustomViewCustomItemMethods( - $view, $view->code - ); - } - } - // load uikit get method - if (ArrayHelper::check($main_view) - && isset($main_view['settings'])) - { - $methods .= $this->setUikitGetMethod(); - } - - return $methods; + return CFactory::_('Dynamicget.Methods')->get($mainView, $code); } public function setUikitHelperMethods() @@ -3872,692 +2523,93 @@ class Interpretation extends Fields return ''; } - public function setUikitGetMethod() + /** + * Build and return the PHP method definition for retrieving the UIkit components. + * + * This method dynamically generates the source code for a `getUikitComp()` method + * if the configured UIkit version is either `1` or `2`. The generated method + * checks if the `$this->uikitComp` property is set and valid, and returns it; + * otherwise, it returns `false`. + * + * @return string The generated PHP code for the `getUikitComp()` method, or an + * empty string if the UIkit version is not 1 or 2. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.UikitLoader')->getUikitComp(...) + */ + public function setUikitGetMethod(): string { - $method = ''; - // only load for uikit version 2 - if (2 == CFactory::_('Config')->uikit || 1 == CFactory::_('Config')->uikit) - { - // build uikit get method - $method .= PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; - $method .= PHP_EOL . Indent::_(1) - . " * Get the uikit needed components"; - $method .= PHP_EOL . Indent::_(1) . " *"; - $method .= PHP_EOL . Indent::_(1) - . " * @return mixed An array of objects on success."; - $method .= PHP_EOL . Indent::_(1) . " *"; - $method .= PHP_EOL . Indent::_(1) . " */"; - $method .= PHP_EOL . Indent::_(1) - . "public function getUikitComp()"; - $method .= PHP_EOL . Indent::_(1) . "{"; - $method .= PHP_EOL . Indent::_(2) - . "if (isset(\$this->uikitComp) && " - . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$this->uikitComp))"; - $method .= PHP_EOL . Indent::_(2) . "{"; - $method .= PHP_EOL . Indent::_(3) . "return \$this->uikitComp;"; - $method .= PHP_EOL . Indent::_(2) . "}"; - $method .= PHP_EOL . Indent::_(2) . "return false;"; - $method .= PHP_EOL . Indent::_(1) . "}"; - } - - return $method; - } - - public function setMainCustomMehtod(&$body, $nAme, $type) - { - $method = ''; - if (StringHelper::check($body)) - { - // build custom method - $method .= PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; - $method .= PHP_EOL . Indent::_(1) . " * Custom Method"; - $method .= PHP_EOL . Indent::_(1) . " *"; - $method .= PHP_EOL . Indent::_(1) . " * @return " . $type; - $method .= PHP_EOL . Indent::_(1) . " *"; - $method .= PHP_EOL . Indent::_(1) . " */"; - $method .= PHP_EOL . Indent::_(1) . "public function " . $nAme - . "()"; - $method .= PHP_EOL . Indent::_(1) . "{" . $body; - $method .= PHP_EOL . Indent::_(1) . "}"; - } - - return $method; - } - - public function setCustomViewCustomItemMethods(&$main_get, $code) - { - $methods = ''; - $this->JEventDispatcher = ''; - // first set the needed item/s methods - if (ObjectHelper::check($main_get)) - { - if (isset($main_get->custom_get) - && ArrayHelper::check($main_get->custom_get)) - { - foreach ($main_get->custom_get as $get) - { - // set the site decription switch - foreach (CFactory::_('Config')->cryption_types as $cryptionType) - { - CFactory::_('Compiler.Builder.Site.Decrypt')->set("{$cryptionType}.{$code}", false); - } - // set the method defaults - if (($default = $this->setCustomViewMethodDefaults($get, $code)) !== false) - { - // build custom method - $methods .= PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; - $methods .= PHP_EOL . Indent::_(1) - . " * Method to get an array of " . $default['name'] - . " Objects."; - $methods .= PHP_EOL . Indent::_(1) . " *"; - $methods .= PHP_EOL . Indent::_(1) - . " * @return mixed An array of " - . $default['name'] - . " Objects on success, false on failure."; - $methods .= PHP_EOL . Indent::_(1) . " *"; - $methods .= PHP_EOL . Indent::_(1) . " */"; - $methods .= PHP_EOL . Indent::_(1) - . "public function get" . $default['methodName'] - . "(\$" . $default['on_field'] . ")"; - $methods .= PHP_EOL . Indent::_(1) . "{" . Placefix::_h("CRYPT") ; - $methods .= PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " Get a db connection."; - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - $methods .= PHP_EOL . Indent::_(2) - . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDbo();"; - } - else - { - $methods .= PHP_EOL . Indent::_(2) - . "\$db = \$this->getDatabase();"; - } - $methods .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " Create a new query object."; - $methods .= PHP_EOL . Indent::_(2) - . "\$query = \$db->getQuery(true);"; - $methods .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " Get from " - . $get['selection']['table'] . " as " - . $default['as']; - $methods .= PHP_EOL . Indent::_(2) - . $get['selection']['select']; - $methods .= PHP_EOL . Indent::_(2) . '$query->from(' - . $get['selection']['from'] . ');'; - // set the string - if ($get['operator'] === 'IN' - || $get['operator'] === 'NOT IN') - { - $methods .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " Check if \$" - . $default['on_field'] - . " is an array with values."; - $methods .= PHP_EOL . Indent::_(2) . "\$array = (" - . "Super_" . "__4b225c51_d293_48e4_b3f6_5136cf5c3f18___Power::check(\$" - . $default['on_field'] - . ", true)) ? json_decode(\$" - . $default['on_field'] . ",true) : \$" - . $default['on_field'] . ";"; - $methods .= PHP_EOL . Indent::_(2) - . "if (isset(\$array) && " - . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$array, true))"; - $methods .= PHP_EOL . Indent::_(2) . "{"; - $methods .= PHP_EOL . Indent::_(3) - . "\$query->where('" . $get['join_field'] . " " - . $get['operator'] - . " (' . implode(',', \$array) . ')');"; - $methods .= PHP_EOL . Indent::_(2) . "}"; - $methods .= PHP_EOL . Indent::_(2) . "else"; - $methods .= PHP_EOL . Indent::_(2) . "{"; - $methods .= PHP_EOL . Indent::_(3) - . "return false;"; - $methods .= PHP_EOL . Indent::_(2) . "}"; - } - else - { - $methods .= PHP_EOL . Indent::_(2) - . "\$query->where('" . $get['join_field'] . " " - . $get['operator'] . " ' . \$db->quote(\$" - . $default['on_field'] . "));"; - } - // check if other queries should be loaded - foreach (CFactory::_('Compiler.Builder.Other.Query')-> - get(CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . $default['as'], []) - as $query) - { - $methods .= $query; - } - // add any other filter that was set - foreach (CFactory::_('Compiler.Builder.Other.Filter')-> - get(CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . $default['as'], []) - as $field => $string) - { - $methods .= $string; - } - // add any other where that was set - foreach (CFactory::_('Compiler.Builder.Other.Where')-> - get(CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . $default['as'], []) - as $field => $string) - { - $methods .= $string; - } - // add any other order that was set - foreach (CFactory::_('Compiler.Builder.Other.Order')-> - get(CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . $default['as'], []) - as $field => $string) - { - $methods .= $string; - } - // add any other grouping that was set - foreach (CFactory::_('Compiler.Builder.Other.Group')-> - get(CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . $default['as'], []) - as $field => $string) - { - $methods .= $string; - } - $methods .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " Reset the query using our newly populated query object."; - $methods .= PHP_EOL . Indent::_(2) - . "\$db->setQuery(\$query);"; - $methods .= PHP_EOL . Indent::_(2) . "\$db->execute();"; - $methods .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " check if there was data returned"; - $methods .= PHP_EOL . Indent::_(2) - . "if (\$db->getNumRows())"; - $methods .= PHP_EOL . Indent::_(2) . "{"; - // set dispatcher placeholder - $methods .= Placefix::_h("DISPATCHER"); - // build path - $path = $default['code'] . '.' . $get['key'] . '.' . $default['as']; - // set decoding of needed fields - $decodeChecker = CFactory::_('Compiler.Builder.Site.Field.Data')->get('decode.' . $path); - // also filter fields if needed - $decodeFilter = CFactory::_('Compiler.Builder.Site.Field.Decode.Filter')-> - get(CFactory::_('Config')->build_target . '.' . $path); - // set uikit checkers on needed fields - $uikitChecker = CFactory::_('Compiler.Builder.Site.Field.Data')->get('uikit.' . $path); - // set content prepare on needed fields - $contentprepareChecker = CFactory::_('Compiler.Builder.Site.Field.Data')-> - get('textareas.' . $path); - // set placeholder values - $placeholders = [ - Placefix::_h('TAB') => Indent::_(2), - Placefix::_h('STRING') => '$item' - ]; - // set joined values - $joinedChecker = CFactory::_('Compiler.Builder.Other.Join')-> - get(CFactory::_('Config')->build_target . '.' . $default['code'] . '.' . $default['as']); - if ($decodeChecker !== null || $uikitChecker !== null - || $decodeFilter !== null || $contentprepareChecker !== null - || $joinedChecker !== null) - { - $decoder = ''; - if ($decodeChecker !== null && ArrayHelper::check($decodeChecker)) - { - // also filter fields if needed - $decoder = $this->setCustomViewFieldDecode( - $get, $decodeChecker, '$item', - $default['code'], Indent::_(2) - ); - } - $decoder_filter = ''; - if ($decodeFilter !== null && ArrayHelper::check($decodeFilter)) - { - $decoder_filter - = $this->setCustomViewFieldDecodeFilter( - $get, $decodeFilter, '$item', '$items[$nr]', - $default['code'], Indent::_(2) - ); - } - $contentprepare = ''; - if ($contentprepareChecker !== null && ArrayHelper::check($contentprepareChecker)) - { - $contentprepare - = $this->setCustomViewFieldonContentPrepareChecker( - $get, $contentprepareChecker, '$item', - $default['code'], Indent::_(2) - ); - } - $uikit = ''; - if ($uikitChecker !== null && ArrayHelper::check($uikitChecker)) - { - $uikit = $this->setCustomViewFieldUikitChecker( - $get, $uikitChecker, '$item', - $default['code'], Indent::_(2) - ); - } - $joine = ''; - if ($joinedChecker !== null && ArrayHelper::check($joinedChecker)) - { - foreach ($joinedChecker as $joinedString) - { - $joine .= CFactory::_('Placeholder')->update( - $joinedString, $placeholders - ); - } - } - if (StringHelper::check($decoder) || StringHelper::check($contentprepare) - || StringHelper::check($uikit) || StringHelper::check($decoder_filter) - || StringHelper::check($joine)) - { - $methods .= PHP_EOL . Indent::_(3) - . "\$items = \$db->loadObjectList();"; - $methods .= PHP_EOL . PHP_EOL . Indent::_(3) - . "//" . Line::_(__Line__, __Class__) - . " Convert the parameter fields into objects."; - $methods .= PHP_EOL . Indent::_(3) - . "foreach (\$items as \$nr => &\$item)"; - $methods .= PHP_EOL . Indent::_(3) . "{"; - if (StringHelper::check($decoder)) - { - $methods .= $decoder; - } - if (StringHelper::check($decoder_filter)) - { - $methods .= $decoder_filter; - } - if (StringHelper::check($contentprepare)) - { - $methods .= $contentprepare; - } - if (StringHelper::check($uikit)) - { - $methods .= $uikit; - } - if (StringHelper::check($joine)) - { - $methods .= $joine; - } - $methods .= PHP_EOL . Indent::_(3) . "}"; - $methods .= PHP_EOL . Indent::_(3) - . "return \$items;"; - } - else - { - $methods .= PHP_EOL . Indent::_(3) - . "return \$db->loadObjectList();"; - } - } - else - { - $methods .= PHP_EOL . Indent::_(3) - . "return \$db->loadObjectList();"; - } - $methods .= PHP_EOL . Indent::_(2) . "}"; - $methods .= PHP_EOL . Indent::_(2) . "return false;"; - $methods .= PHP_EOL . Indent::_(1) . "}"; - - // set the script if it was found - $Component = CFactory::_('Compiler.Builder.Content.One')->get('Component'); - $script = ''; - foreach (CFactory::_('Config')->cryption_types as $cryptionType) - { - if (CFactory::_('Compiler.Builder.Site.Decrypt')->get("{$cryptionType}.{$code}", false)) - { - if ('expert' !== $cryptionType) - { - $script .= PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " Get the " - . $cryptionType . " encryption."; - $script .= PHP_EOL . Indent::_(2) . "\$" - . $cryptionType . "key = " . $Component - . "Helper::getCryptKey('" - . $cryptionType . "');"; - $script .= PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " Get the encryption object."; - $script .= PHP_EOL . Indent::_(2) . "\$" - . $cryptionType - . " = new Super_" . "__99175f6d_dba8_4086_8a65_5c4ec175e61d___Power(\$" - . $cryptionType . "key);" . PHP_EOL; - } - elseif (CFactory::_('Compiler.Builder.Model.' . ucfirst($cryptionType). '.Field.Initiator')-> - exists("{$code}.get")) - { - foreach (CFactory::_('Compiler.Builder.Model.' . ucfirst($cryptionType). '.Field.Initiator')-> - exists("{$code}.get") as $block) - { - $script .= PHP_EOL . Indent::_(2) . implode( - PHP_EOL . Indent::_(2), $block - ); - } - } - } - } - $methods = str_replace( - Placefix::_h('CRYPT'), $script, $methods - ); - } - } - // insure the crypt placeholder is removed - if (StringHelper::check($methods)) - { - $methods = str_replace( - Placefix::_h('CRYPT'), '', $methods - ); - } - } - } - // only update if dispacher placholder is found - if (strpos($methods, (string) Placefix::_h('DISPATCHER')) !== false) - { - // check if the dispather should be added - if (!isset($this->JEventDispatcher) - || !ArrayHelper::check($this->JEventDispatcher)) - { - $this->JEventDispatcher = array(Placefix::_h('DISPATCHER') => ''); - } - $methods = str_replace( - array_keys($this->JEventDispatcher), - array_values($this->JEventDispatcher), $methods - ); - } - // insure the crypt placeholder is removed - if (StringHelper::check($methods)) - { - return $methods . PHP_EOL; - } - - return ''; - } - - public function setCustomViewMethodDefaults($get, $code) - { - if (isset($get['key']) && isset($get['as'])) - { - $key = substr( - (string) StringHelper::safe( - preg_replace('/[0-9]+/', '', md5((string) $get['key'])), 'F' - ), 0, 4 - ); - $method['on_field'] = (isset($get['on_field'])) - ? $this->removeAsDot($get['on_field']) : null; - $method['join_field'] = (isset($get['join_field'])) - ? StringHelper::safe( - $this->removeAsDot($get['join_field']) - ) : null; - $method['Join_field'] = (isset($method['join_field'])) - ? StringHelper::safe($method['join_field'], 'F') - : null; - $method['name'] = StringHelper::safe( - $get['selection']['name'], 'F' - ); - $method['code'] = StringHelper::safe($code); - $method['AS'] = StringHelper::safe( - $get['as'], 'U' - ); - $method['as'] = StringHelper::safe( - $get['as'] - ); - $method['valueName'] = $method['on_field'] . $method['Join_field'] - . $method['name'] . $method['AS']; - $method['methodName'] = StringHelper::safe( - $method['on_field'], 'F' - ) . $method['Join_field'] . $method['name'] . $key . '_' - . $method['AS']; - - // return - return $method; - } - - return false; - } - - public function setCustomViewListQuery(&$get, $code, $return = true) - { - if (ObjectHelper::check($get)) - { - if ($get->pagination == 1) - { - $getItem = PHP_EOL . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Get a db connection."; - } - else - { - $getItem = PHP_EOL . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) - . " Make sure all records load, since no pagination allowed."; - $getItem .= PHP_EOL . Indent::_(2) - . "\$this->setState('list.limit', 0);"; - $getItem .= PHP_EOL . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Get a db connection."; - } - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - $getItem .= PHP_EOL . Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDbo();"; - } - else - { - $getItem .= PHP_EOL . Indent::_(2) . "\$db = \$this->getDatabase();"; - } - $getItem .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " Create a new query object."; - $getItem .= PHP_EOL . Indent::_(2) - . "\$query = \$db->getQuery(true);"; - // set main get query - $getItem .= $this->setCustomViewQuery($get->main_get, $code); - // check if there is any custom script - $getItem .= CFactory::_('Customcode.Dispenser')->get( - CFactory::_('Config')->build_target . '_php_getlistquery', $code, '', - PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Filtering.", true - ); - // setup filters - if (isset($get->filter)) - { - $getItem .= $this->setCustomViewFilter($get->filter, $code); - } - // setup where - if (isset($get->where)) - { - $getItem .= $this->setCustomViewWhere($get->where, $code); - } - // setup ordering - if (isset($get->order)) - { - $getItem .= $this->setCustomViewOrder($get->order, $code); - } - // setup grouping - if (isset($get->group)) - { - $getItem .= $this->setCustomViewGroup($get->group, $code); - } - if ($return) - { - // return the query object - $getItem .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " return the query object" - . PHP_EOL . Indent::_(2) . "return \$query;"; - } - - return $getItem; - } - - return PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) - . "add your custom code here."; + return CFactory::_('Dynamicget.UikitLoader')->getUikitComp(); } /** - * @param $get - * @param $code + * Get the main custom method block. * - * @return string + * @param string $body The PHP code body + * @param string $name The function name + * @param string $type The doc return type + * + * @return string The built method block + * @deprecated 5.1.2 use CFactory::_('Dynamicget.Methods')->getMethod(...) */ - public function setCustomViewGetItems(&$get, $code) + public function setMainCustomMehtod($body, $name, $type): string { - $getItem = ''; - // set the site decrypt switch - foreach (CFactory::_('Config')->cryption_types as $cryptionType) - { - CFactory::_('Compiler.Builder.Site.Decrypt')->set("{$cryptionType}.{$code}", false); - } - // set the component name - $Component = CFactory::_('Compiler.Builder.Content.One')->get('Component'); - // start load the get item - if (ObjectHelper::check($get)) - { - $getItem .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) - . " Insure all item fields are adapted where needed."; - $getItem .= PHP_EOL . Indent::_(2) . "if (" - . "Super_" . "__0a59c65c_9daf_4bc9_baf4_e063ff9e6a8a___Power::check(\$items))"; - $getItem .= PHP_EOL . Indent::_(2) . "{"; - $getItem .= Placefix::_h("DISPATCHER") ; - $getItem .= PHP_EOL . Indent::_(3) - . "foreach (\$items as \$nr => &\$item)"; - $getItem .= PHP_EOL . Indent::_(3) . "{"; - $getItem .= PHP_EOL . Indent::_(4) . "//" . Line::_(__Line__, __Class__) - . " Always create a slug for sef URL's"; - $getItem .= PHP_EOL . Indent::_(4) - . "\$item->slug = (\$item->id ?? '0') . (isset(\$item->alias) ? ':' . \$item->alias : '');"; - if (isset($get->main_get) - && ArrayHelper::check( - $get->main_get - )) - { - $asBucket = []; - foreach ($get->main_get as $main_get) - { - // build path - $path = $code . '.' . $main_get['key'] . '.' . $main_get['as']; + return CFactory::_('Dynamicget.Methods')->getMethod($body, $name, $type); + } - $decodeChecker = CFactory::_('Compiler.Builder.Site.Field.Data')->get('decode.' . $path); - if (ArrayHelper::check($decodeChecker)) - { - // set decoding of needed fields - $getItem .= $this->setCustomViewFieldDecode( - $main_get, $decodeChecker, "\$item", $code, - Indent::_(2) - ); - } + /** + * Get the dynamic get custom item methods. + * + * @param mixed $mainGet The main get object. + * @param string $code The code string. + * + * @return string The generated methods code. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.CustomGetMethods')->get(...) + */ + public function setCustomViewCustomItemMethods($mainGet, $code) + { + return CFactory::_('Dynamicget.CustomGetMethods')->get($mainGet, $code); + } - // also filter fields if needed - $decodeFilter = CFactory::_('Compiler.Builder.Site.Field.Decode.Filter')-> - get(CFactory::_('Config')->build_target . '.' . $path); - if (ArrayHelper::check($decodeFilter)) - { - $getItem .= $this->setCustomViewFieldDecodeFilter( - $main_get, $decodeFilter, "\$item", - '$items[$nr]', $code, Indent::_(2) - ); - } + /** + * Get the default method structure for a custom view join. + * + * @param array $get The method definition array. + * @param string $code The code snippet related to the method. + * + * @return array|null The normalized method array or null on failure. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.JoinStructure')->get(...) + */ + public function setCustomViewMethodDefaults($get, $code): ?array + { + return CFactory::_('Dynamicget.JoinStructure')->get($get, $code); + } - $contentprepareChecker = CFactory::_('Compiler.Builder.Site.Field.Data')->get('textareas.' . $path); - if (ArrayHelper::check($contentprepareChecker)) - { - // set contentprepare checkers on needed fields - $getItem .= $this->setCustomViewFieldonContentPrepareChecker( - $main_get, $contentprepareChecker, "\$item", - $code, Indent::_(2) - ); - } + /** + * Build the custom view list query code block. + * + * @param object $get The GET configuration object. + * @param string $code The current code name. + * @param bool $return Whether to include `return $query;`. + * + * @return string The full PHP code block as a string. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.ListQuery')->get(...) + */ + public function setCustomViewListQuery($get, $code, $return = true) + { + return CFactory::_('Dynamicget.ListQuery')->get($get, $code, $return); + } - $uikitChecker = CFactory::_('Compiler.Builder.Site.Field.Data')->get('uikit.' . $path); - if (ArrayHelper::check($uikitChecker)) - { - // set uikit checkers on needed fields - $getItem .= $this->setCustomViewFieldUikitChecker( - $main_get, $uikitChecker, "\$item", $code, - Indent::_(2) - ); - } - - $asBucket[] = $main_get['as']; - } - } - // only update if dispacher placholder is found - if (strpos($getItem, (string) Placefix::_h('DISPATCHER')) - !== false) - { - // check if the dispather should be added - if (!isset($this->JEventDispatcher) - || !ArrayHelper::check( - $this->JEventDispatcher - )) - { - $this->JEventDispatcher = array(Placefix::_h('DISPATCHER') => ''); - } - $getItem = str_replace( - array_keys($this->JEventDispatcher), - array_values($this->JEventDispatcher), $getItem - ); - } - // setup Globals - $getItem .= $this->setCustomViewGlobals( - $get->global, '$item', $asBucket, Indent::_(2) - ); - // setup the custom gets that returns multipal values - $getItem .= $this->setCustomViewCustomJoin( - $get->custom_get, "\$item", $code, $asBucket, Indent::_(2) - ); - // set calculations - if ($get->addcalculation == 1) - { - $get->php_calculation = (array) explode( - PHP_EOL, (string) $get->php_calculation - ); - if (ArrayHelper::check($get->php_calculation)) - { - $_tmp = PHP_EOL . Indent::_(4) . implode( - PHP_EOL . Indent::_(4), $get->php_calculation - ); - $getItem .= CFactory::_('Placeholder')->update_( - $_tmp - ); - } - } - $getItem .= PHP_EOL . Indent::_(3) . "}"; - $getItem .= PHP_EOL . Indent::_(2) . "}"; - // remove empty foreach - if (strlen($getItem) <= 100) - { - $getItem = PHP_EOL; - } - } - - // set the script if found - $script = ''; - foreach (CFactory::_('Config')->cryption_types as $cryptionType) - { - if (CFactory::_('Compiler.Builder.Site.Decrypt')->get("{$cryptionType}.{$code}", false)) - { - if ('expert' !== $cryptionType) - { - $script .= PHP_EOL . PHP_EOL . Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " Get the " . $cryptionType - . " encryption."; - $script .= PHP_EOL . Indent::_(2) . "\$" . $cryptionType - . "key = " . $Component . "Helper::getCryptKey('" - . $cryptionType . "');"; - $script .= PHP_EOL . Indent::_(2) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Get the encryption object."; - $script .= PHP_EOL . Indent::_(2) . "\$" . $cryptionType - . " = new Super_" . "__99175f6d_dba8_4086_8a65_5c4ec175e61d___Power(\$" . $cryptionType . "key);"; - } - elseif (CFactory::_('Compiler.Builder.Model.' . ucfirst($cryptionType). '.Field.Initiator')-> - exists("{$code}.get")) - { - foreach (CFactory::_('Compiler.Builder.Model.' . ucfirst($cryptionType). '.Field.Initiator')-> - get("{$code}.get") as $block) - { - $script .= PHP_EOL . Indent::_(2) . implode( - PHP_EOL . Indent::_(2), $block - ); - } - } - } - } - - return $script . $getItem; + /** + * Generate the GetItems code block for the dynamicget. + * + * @param object $get The get object. + * @param string $code The component code. + * + * @return string The resulting PHP code string. + * @deprecated 5.1.2 use CFactory::_('Dynamicget.GetItems')->get(...) + */ + public function setCustomViewGetItems($get, $code) + { + return CFactory::_('Dynamicget.GetItems')->get($get, $code); } /** @@ -5437,7 +3489,7 @@ class Interpretation extends Fields return PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_( __LINE__,__CLASS__ ) . " Add View JavaScript File" . PHP_EOL . Indent::_(2) - . $this->setIncludeLibScript($path); + . CFactory::_('Library.IncludeHelper')->get($path); } return ''; @@ -5841,7 +3893,7 @@ class Interpretation extends Fields if (($data = CFactory::_('Compiler.Builder.Library.Manager')-> get(CFactory::_('Config')->build_target . '.' . $code)) !== null) { - foreach ($data as $id => $true) + foreach ($data as $id => $data_item) { // get the library $library = CFactory::_('Registry')->get("builder.libraries.$id", null); @@ -5862,7 +3914,7 @@ class Interpretation extends Fields elseif (is_object($library) && isset($library->how)) { - $setter .= $this->setLibraryDocument($id); + $setter .= CFactory::_('Library.Document')->get($id); } } } @@ -5875,291 +3927,45 @@ class Interpretation extends Fields return $setter; } + /** + * Get the Library document loading code. + * + * @param string $id The libary id/guid + * + * @deprecated 5.1.2 CFactory::_('Library.Document')->get(...); + */ protected function setLibraryDocument($id) { - // get the library - $library = CFactory::_('Registry')->get("builder.libraries.$id", null); - // make sure we have an object - if (is_object($library)) - { - if (isset($library->how) && 2 == $library->how - && isset($library->conditions) - && ArrayHelper::check( - $library->conditions - )) - { - // build document with the conditions values - $this->setLibraryDocConditions( - $id, $this->setLibraryScripts($id, false) - ); - } - elseif (isset($library->how) && 1 == $library->how) - { - // build document to allways add all files and urls - $this->setLibraryScripts($id); - } - // check if the document was build - if (isset($library->document) - && StringHelper::check( - $library->document - )) - { - return PHP_EOL . PHP_EOL . $library->document; - } - } - - return ''; + // set notice that we could not get a valid string from the target + $this->app->enqueueMessage( + Text::sprintf('COM_COMPONENTBUILDER_HR_HTHREES_WARNINGHTHREE', __CLASS__), 'Error' + ); + $this->app->enqueueMessage( + Text::sprintf( + 'Use of a deprecated method (%s)!', __METHOD__ + ), 'Error' + ); } - protected function setLibraryDocConditions($id, $scripts) + /** + * get Library Include string + * + * @param string $path The path to the library + * @param array|null $pathInfo The path info if already set + * + * @deprecated 5.1.2 CFactory::_('Library.IncludeHelper')->get(...); + */ + protected function setIncludeLibScript(string $path, ?array $pathInfo = null) { - // Start script builder for library files - if (!isset($this->libwarning[$id])) - { - // set the warning only once - $this->libwarning[$id] = true; - - // get the library - $library = CFactory::_('Registry')->get("builder.libraries.$id", null); - - $this->app->enqueueMessage( - Text::_('COM_COMPONENTBUILDER_HR_HTHREECONDITIONAL_SCRIPT_WARNINGHTHREE'), 'Warning' - ); - - // message with name - if (is_object($library) && isset($library->name)) - { - $this->app->enqueueMessage( - Text::sprintf( - 'The conditional script builder for %s is not ready, sorry!', - $library->name - ), 'Warning' - ); - } - else - { - $this->app->enqueueMessage( - Text::_( - 'The conditional script builder for ID:%s is not ready, sorry!', - $id - ), 'Warning' - ); - } - } - } - - protected function setLibraryScripts($id, $buildDoc = true) - { - $scripts = []; - // get the library - $library = CFactory::_('Registry')->get("builder.libraries.$id", null); - // check that we have a library - if (is_object($library)) - { - // load the urls if found - if (isset($library->urls) - && ArrayHelper::check($library->urls)) - { - // set all the files - foreach ($library->urls as $url) - { - // if local path is set, then use it first - if (isset($url['path'])) - { - // update the root path - $path = $this->getScriptRootPath($url['path']); - // load document script - $scripts[md5((string) $url['path'])] = $this->setIncludeLibScript( - $path - ); - // load url also if not building document - if (!$buildDoc) - { - // load document script - $scripts[md5((string) $url['url'])] = $this->setIncludeLibScript( - $url['url'], false - ); - } - } - else - { - // load document script - $scripts[md5((string) $url['url'])] = $this->setIncludeLibScript( - $url['url'], false - ); - } - } - } - // load the local files if found - if (isset($library->files) - && ArrayHelper::check($library->files)) - { - // set all the files - foreach ($library->files as $file) - { - $path = '/' . trim((string) $file['path'], '/'); - // check if path has new file name (has extetion) - $pathInfo = pathinfo($path); - // update the root path - $_path = $this->getScriptRootPath($path); - if (isset($pathInfo['extension']) && $pathInfo['extension']) - { - // load document script - $scripts[md5($path)] = $this->setIncludeLibScript( - $_path, false, $pathInfo - ); - } - else - { - // load document script - $scripts[md5($path . '/' . trim((string) $file['file'], '/'))] - = $this->setIncludeLibScript( - $_path . '/' . trim((string) $file['file'], '/') - ); - } - } - } - // load the local folders if found - if (isset($library->folders) - && ArrayHelper::check( - $library->folders - )) - { - // get all the file paths - $files = []; - foreach ($library->folders as $folder) - { - if (isset($folder['path']) && isset($folder['folder'])) - { - $path = '/' . trim((string)$folder['path'], '/'); - if (isset($folder['rename']) && 1 == $folder['rename']) - { - if ($_paths = FileHelper::getPaths( - CFactory::_('Utilities.Paths')->component_path . $path - )) - { - $files[$path] = $_paths; - } - } - else - { - $path = $path . '/' . trim((string)$folder['folder'], '/'); - if ($_paths = FileHelper::getPaths( - CFactory::_('Utilities.Paths')->component_path . $path - )) - { - $files[$path] = $_paths; - } - } - } - } - // now load the script - if (ArrayHelper::check($files)) - { - foreach ($files as $root => $paths) - { - // update the root path - $_root = $this->getScriptRootPath($root); - // load per path - foreach ($paths as $path) - { - $scripts[md5($root . '/' . trim((string)$path, '/'))] - = $this->setIncludeLibScript( - $_root . '/' . trim((string)$path, '/') - ); - } - } - } - } - } - - // if there was any code added to document then set globally - if ($buildDoc && ArrayHelper::check($scripts)) - { - CFactory::_('Registry')->set("builder.libraries.{$id}.document", Indent::_(2) . "//" - . Line::_(__Line__, __Class__) . " always load these files." - . PHP_EOL . Indent::_(2) . implode( - PHP_EOL . Indent::_(2), $scripts - ) - ); - - // success - return true; - } - elseif (ArrayHelper::check($scripts)) - { - return $scripts; - } - - return false; - } - - protected function setIncludeLibScript($path, $local = true, - $pathInfo = false - ) - { - // insure we have the path info - if (!$pathInfo) - { - $pathInfo = pathinfo((string) $path); - } - // use the path info to build the script - if (isset($pathInfo['extension']) && $pathInfo['extension']) - { - switch ($pathInfo['extension']) - { - case 'js': - return 'Html::_(\'script\', "' . ltrim($path, '/') - . '", [\'version\' => \'auto\']);'; - break; - case 'css': - case 'less': - return 'Html::_(\'stylesheet\', "' - . ltrim($path, '/') . '", [\'version\' => \'auto\']);'; - break; - case 'php': - if (strpos((string) $path, 'http') === false) - { - return 'require_once("' . $path . '");'; - } - break; - } - } - - return ''; - } - - protected function getScriptRootPath($root) - { - if (strpos((string) $root, '/media/') !== false - && strpos((string) $root, '/admin/') === false - && strpos((string) $root, '/site/') === false) - { - return str_replace( - '/media/', '/media/com_' . CFactory::_('Config')->component_code_name . '/', (string) $root - ); - } - elseif (strpos((string) $root, '/media/') === false - && strpos((string) $root, '/admin/') !== false - && strpos((string) $root, '/site/') === false) - { - return str_replace( - '/admin/', - '/administrator/components/com_' . CFactory::_('Config')->component_code_name - . '/', (string) $root - ); - } - elseif (strpos((string) $root, '/media/') === false - && strpos((string) $root, '/admin/') === false - && strpos((string) $root, '/site/') !== false) - { - return str_replace( - '/site/', '/components/com_' . CFactory::_('Config')->component_code_name . '/', - (string) $root - ); - } - - return $root; + // set notice that we could not get a valid string from the target + $this->app->enqueueMessage( + Text::sprintf('COM_COMPONENTBUILDER_HR_HTHREES_WARNINGHTHREE', __CLASS__), 'Error' + ); + $this->app->enqueueMessage( + Text::sprintf( + 'Use of a deprecated method (%s)!', __METHOD__ + ), 'Error' + ); } public function setUikitLoader(&$view) @@ -16536,7 +14342,7 @@ class Interpretation extends Fields CFactory::_('Compiler.Builder.Content.Multi')->set($nameListCode . '|ADMIN_ADD_JAVASCRIPT_FILE', PHP_EOL . PHP_EOL . Indent::_(2) . "//" . Line::_( __LINE__,__CLASS__ ) . " Add List View JavaScript File" . PHP_EOL . Indent::_(2) - . $this->setIncludeLibScript($_path) + . CFactory::_('Library.IncludeHelper')->get($_path) ); } else @@ -17770,7 +15576,7 @@ class Interpretation extends Fields } else { - $function[] = Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(\Joomla\Database\DatabaseInterface::class);"; + $function[] = Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(Joomla__"."_7bd29d76_73c9_4c07_a5da_4f7a32aff78f___Power::class);"; } $function[] = PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) @@ -17904,7 +15710,7 @@ class Interpretation extends Fields } else { - $function[] = Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(\Joomla\Database\DatabaseInterface::class);"; + $function[] = Indent::_(2) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getContainer()->get(Joomla__"."_7bd29d76_73c9_4c07_a5da_4f7a32aff78f___Power::class);"; } $function[] = PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) @@ -20478,101 +18284,29 @@ class Interpretation extends Fields return $fields; } + /** + * Get the generated call snippet that invokes the check-in method. + * + * @return string The code that calls the generated method. + * @deprecated 5.1 Use CFactory::_('Architecture.Model.CheckInNow')->getCall(); + */ public function setCheckinCall() { - $call = PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) - . " Check in items"; - $call .= PHP_EOL . Indent::_(2) . "\$this->checkInNow();" . PHP_EOL; - - return $call; + return CFactory::_('Architecture.Model.CheckInNow')->getCall(); } + /** + * Build the full `checkInNow()` method code for the given view/table. + * + * @param string $view The view/table suffix (e.g. 'items'). + * @param string $component The component name (without 'com_'). + * + * @return string The full method code as a string. + * @deprecated 5.1 Use CFactory::_('Architecture.Model.CheckInNow')->getMethod(....); + */ public function setAutoCheckin($view, $component) { - $checkin = PHP_EOL . PHP_EOL . Indent::_(1) . "/**"; - $checkin .= PHP_EOL . Indent::_(1) - . " * Build an SQL query to checkin all items left checked out longer then a set time."; - $checkin .= PHP_EOL . Indent::_(1) . " *"; - $checkin .= PHP_EOL . Indent::_(1) . " * @return bool"; - $checkin .= PHP_EOL . Indent::_(1) . " * @since 3.2.0"; - $checkin .= PHP_EOL . Indent::_(1) . " */"; - $checkin .= PHP_EOL . Indent::_(1) . "protected function checkInNow(): bool"; - $checkin .= PHP_EOL . Indent::_(1) . "{"; - $checkin .= PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) - . " Get set check in time"; - $checkin .= PHP_EOL . Indent::_(2) - . "\$time = ComponentHelper::getParams('com_" . $component - . "')->get('check_in');"; - $checkin .= PHP_EOL . PHP_EOL . Indent::_(2) . "if (\$time)"; - $checkin .= PHP_EOL . Indent::_(2) . "{"; - $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Get a db connection."; - if (CFactory::_('Config')->get('joomla_version', 3) == 3) - { - $checkin .= PHP_EOL . Indent::_(3) . "\$db = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDbo();"; - } - else - { - $checkin .= PHP_EOL . Indent::_(3) . "\$db = \$this->getDatabase();"; - } - $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_(__Line__, __Class__) - . " Reset query."; - $checkin .= PHP_EOL . Indent::_(3) . "\$query = \$db->getQuery(true);"; - $checkin .= PHP_EOL . Indent::_(3) . "\$query->select('*');"; - $checkin .= PHP_EOL . Indent::_(3) - . "\$query->from(\$db->quoteName('#__" . $component . "_" . $view - . "'));"; - $checkin .= PHP_EOL . Indent::_(3) . "//" . Line::_(__Line__, __Class__) - . " Only select items that are checked out."; - $checkin .= PHP_EOL . Indent::_(3) - . "\$query->where(\$db->quoteName('checked_out') . '!=0');"; - Indent::_(3) . "//" . Line::_(__Line__, __Class__) - . " Query only to see if we have a rows"; - $checkin .= PHP_EOL . Indent::_(3) . "\$db->setQuery(\$query, 0, 1);"; - $checkin .= PHP_EOL . Indent::_(3) . "\$db->execute();"; - $checkin .= PHP_EOL . Indent::_(3) . "if (\$db->getNumRows())"; - $checkin .= PHP_EOL . Indent::_(3) . "{"; - $checkin .= PHP_EOL . Indent::_(4) . "//" . Line::_(__Line__, __Class__) - . " Get Yesterdays date."; - $checkin .= PHP_EOL . Indent::_(4) - . "\$date = Joomla__"."_39403062_84fb_46e0_bac4_0023f766e827___Power::getDate()->modify(\$time)->toSql();"; - $checkin .= PHP_EOL . Indent::_(4) . "//" . Line::_(__Line__, __Class__) - . " Reset query."; - $checkin .= PHP_EOL . Indent::_(4) . "\$query = \$db->getQuery(true);"; - $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Fields to update."; - $checkin .= PHP_EOL . Indent::_(4) . "\$fields = array("; - $checkin .= PHP_EOL . Indent::_(5) - . "\$db->quoteName('checked_out_time') . '=\'0000-00-00 00:00:00\'',"; - $checkin .= PHP_EOL . Indent::_(5) - . "\$db->quoteName('checked_out') . '=0'"; - $checkin .= PHP_EOL . Indent::_(4) . ");"; - $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Conditions for which records should be updated."; - $checkin .= PHP_EOL . Indent::_(4) . "\$conditions = array("; - $checkin .= PHP_EOL . Indent::_(5) - . "\$db->quoteName('checked_out') . '!=0', "; - $checkin .= PHP_EOL . Indent::_(5) - . "\$db->quoteName('checked_out_time') . '<\''.\$date.'\''"; - $checkin .= PHP_EOL . Indent::_(4) . ");"; - $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "//" . Line::_( - __LINE__,__CLASS__ - ) . " Check table."; - $checkin .= PHP_EOL . Indent::_(4) - . "\$query->update(\$db->quoteName('#__" . $component . "_" . $view - . "'))->set(\$fields)->where(\$conditions); "; - $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) - . "\$db->setQuery(\$query);"; - $checkin .= PHP_EOL . PHP_EOL . Indent::_(4) . "return \$db->execute();"; - $checkin .= PHP_EOL . Indent::_(3) . "}"; - $checkin .= PHP_EOL . Indent::_(2) . "}"; - $checkin .= PHP_EOL . PHP_EOL . Indent::_(2) . "return false;"; - $checkin .= PHP_EOL . Indent::_(1) . "}"; - - return $checkin; + return CFactory::_('Architecture.Model.CheckInNow')->getMethod($view, $component); } public function setGetItemsMethodStringFix($nameSingleCode, $nameListCode, @@ -23050,528 +20784,82 @@ class Interpretation extends Fields return $matches[1]; } - public function getModCode(&$module) + /** + * get Module Main/Dispatcher Class + * + * @param object $module The module object + * + * @return string The fields set in xml + * @deprecated 5.1.2 CFactory::_('Architecture.Module.Dispatcher')->get(...); + */ + public function getModCode($module): string { - // get component helper string - $Helper = CFactory::_('Compiler.Builder.Content.One')->get('Component') . 'Helper'; - $component = CFactory::_('Compiler.Builder.Content.One')->get('component'); - $_helper = ''; - // get libraries code - $libraries = array(Placefix::_('MOD_LIBRARIES') => $this->getModLibCode($module)); - $code = CFactory::_('Placeholder')->update($module->mod_code, $libraries); - // check if component helper class should be added - if (strpos((string) $code, $Helper . '::') !== false - && strpos( - (string) $code, - "/components/com_" . $component . "/helpers/" . $component - . ".php" - ) === false) - { - $_helper = '//' . Line::_(__Line__, __Class__) - . ' Include the component helper functions only once'; - $_helper .= PHP_EOL . "JLoader::register('" . $Helper - . "', JPATH_ADMINISTRATOR . '/components/com_" . $component - . "/helpers/" . $component . ".php');"; - } - - return CFactory::_('Placeholder')->update($_helper . PHP_EOL . $code . PHP_EOL, CFactory::_('Compiler.Builder.Content.One')->allActive()); + return CFactory::_('Architecture.Module.Dispatcher')->get($module); } - public function getModDefault(&$module, &$key) + /** + * get Module Default HTML code + * + * @param object $module The module object + * + * @return string The default html code + * @deprecated 5.1.2 CFactory::_('Architecture.Module.Template')->default(...); + */ + public function getModDefault($module, $key): string { - // first add the header - $default = PHP_EOL . $module->default_header . PHP_EOL . '?>'; - // add any css from the fields - $default .= CFactory::_('Customcode.Dispenser')->get( - 'css_views', $key, PHP_EOL . '' . PHP_EOL - ); - // now add the body - $default .= PHP_EOL . $module->default . PHP_EOL; - // add any JavaScript from the fields - $default .= CFactory::_('Customcode.Dispenser')->get( - 'views_footer', $key, - PHP_EOL . '' . PHP_EOL - ); - - // return the default content for the model default area - return CFactory::_('Placeholder')->update($default, CFactory::_('Compiler.Builder.Content.One')->allActive()); + return CFactory::_('Architecture.Module.Template')->default($module, $key); } - public function setModTemplates(&$module) + /** + * set Module extra templates + * + * @param object $module The module object + * + * @return void + * @deprecated 5.1.2 CFactory::_('Architecture.Module.Template')->extra(...); + */ + public function setModTemplates($module): void { - if (($data_ = CFactory::_('Compiler.Builder.Template.Data')-> - get(CFactory::_('Config')->build_target . '.' . $module->code_name)) !== null) - { - foreach ($data_ as $template => $data) - { - $header = $data['php_view'] ?? ''; - $body = $data['html'] ?? ''; - $default = PHP_EOL . $header . PHP_EOL . '?>'; - $default .= PHP_EOL . $body; - $TARGET = StringHelper::safe("MODDEFAULT_{$template}", 'U'); - CFactory::_('Compiler.Builder.Content.Multi')->set($module->key . '|' . $TARGET, - CFactory::_('Placeholder')->update( - $default, CFactory::_('Compiler.Builder.Content.One')->allActive() - ) - ); - } - } + CFactory::_('Architecture.Module.Template')->extra($module); } - public function getModHelperCode(&$module) + /** + * get Module Helper Class code + * + * @param object $module The module object + * + * @return string The helper class code + * @deprecated 5.1.2 CFactory::_('Architecture.Module.Helper')->get(...); + */ + public function getModHelperCode($module): string { - return - CFactory::_('Placeholder')->update($module->class_helper_header . PHP_EOL . - $module->class_helper_type . $module->class_helper_name . PHP_EOL - . '{' . PHP_EOL . - $module->class_helper_code . PHP_EOL . - "}" . PHP_EOL, CFactory::_('Compiler.Builder.Content.One')->allActive()); + return CFactory::_('Architecture.Module.Helper')->get($module); } - public function getModLibCode(&$module) + /** + * get Module library loading code + * + * @param object $module The module object + * + * @return string The loading code + * @deprecated 5.1.2 CFactory::_('Architecture.Module.Library')->get(...); + */ + public function getModLibCode($module): string { - $setter = ''; - if (($data_ = CFactory::_('Compiler.Builder.Library.Manager')-> - get($module->key . '.' . $module->code_name)) !== null) - { - $setter .= '//' . Line::_(__Line__, __Class__) - . 'get the document object'; - $setter .= PHP_EOL . '$document = Joomla__'.'_39403062_84fb_46e0_bac4_0023f766e827___Power::getDocument();'; - foreach ($data_ as $id => $true) - { - // get the library - $library = CFactory::_('Registry')->get("builder.libraries.$id", null); - if (is_object($library) - && isset($library->document) - && StringHelper::check( - $library->document - )) - { - $setter .= PHP_EOL . $library->document; - } - elseif (is_object($library) - && isset($library->how)) - { - $setter .= $this->setLibraryDocument($id); - } - } - } - // check if we have string - if (StringHelper::check($setter)) - { - return CFactory::_('Placeholder')->update( CFactory::_('Placeholder')->update_( - str_replace( - '$this->document->', '$document->', - implode( - PHP_EOL, - array_map( - 'trim', - (array) explode(PHP_EOL, $setter) - ) - ) - ) - ), CFactory::_('Compiler.Builder.Content.One')->allActive()); - } - - return ''; + return CFactory::_('Architecture.Module.Library')->get($module); } - public function getModuleMainXML(&$module) + /** + * get Module Main XML + * + * @param object $module The module object + * + * @return string The xml + * @deprecated 5.1.2 CFactory::_('Architecture.Module.MainXML')->get(...); + */ + public function getModuleMainXML($module): string { - // set the custom table key - $dbkey = 'yyy'; - // build the xml - $xml = ''; - // search if we must add the component path - $add_component_path = false; - // build the config fields - $config_fields = []; - if (isset($module->config_fields) - && ArrayHelper::check( - $module->config_fields - )) - { - $add_scripts_field = true; - foreach ($module->config_fields as $field_name => $fieldsets) - { - foreach ($fieldsets as $fieldset => $fields) - { - // get the field set - $xmlFields = CFactory::_('Compiler.Creator.Fieldset.Extension')->get( - $module, $fields, $dbkey - ); - // check if the custom script field must be set - if ($add_scripts_field && $module->add_scripts_field) - { - // get the custom script field - $xmlFields .= PHP_EOL . Indent::_(2) - . ""; - // don't add it again - $add_scripts_field = false; - } - // make sure the xml is set and a string - if (isset($xmlFields) - && StringHelper::check($xmlFields)) - { - $config_fields[$field_name . $fieldset] = $xmlFields; - } - $dbkey++; - // check if the fieldset path requiers component paths - if (!$add_component_path - && isset( - $module->fieldsets_paths[$field_name . $fieldset] - ) - && $module->fieldsets_paths[$field_name . $fieldset] - == 1) - { - $add_component_path = true; - } - } - } - } - // switch to add the language xml - $addLang = []; - // now build the language files - if (CFactory::_('Language')->exist($module->key)) - { - // get model lang content - $langContent = CFactory::_('Language')->getTarget($module->key); - // Trigger Event: jcb_ce_onBeforeBuildModuleLang - CFactory::_('Event')->trigger( - 'jcb_ce_onBeforeBuildModuleLang', [&$module, &$langContent] - ); - // get other languages - $values = array_unique($langContent); - // get the other lang strings if there is any - CFactory::_('Compiler.Builder.Multilingual')->set('modules', - CFactory::_('Language.Multilingual')->get($values) - ); - // start the modules language bucket (must rest every time) - $langTag = CFactory::_('Config')->get('lang_tag', 'en-GB'); - CFactory::_('Compiler.Builder.Languages')->set( - "modules.{$langTag}.all", - $langContent - ); - CFactory::_('Language')->setTarget($module->key, null); - // update insert the current lang in to DB - CFactory::_('Language.Set')->execute($values, $module->guid, 'modules'); - // remove old unused language strings - CFactory::_('Language.Purge')->execute($values, $module->guid, 'modules'); - $total = count($values); - unset($values); - - // Trigger Event: jcb_ce_onBeforeBuildModuleLangFiles - CFactory::_('Event')->trigger( - 'jcb_ce_onBeforeBuildModuleLangFiles', [&$module] - ); - - // now we insert the values into the files - if (CFactory::_('Compiler.Builder.Languages')->IsArray('modules')) - { - foreach (CFactory::_('Compiler.Builder.Languages')->get('modules') as $tag => $areas) - { - // trim the tag - $tag = trim($tag); - foreach ($areas as $area => $languageStrings) - { - $file_name = $tag . '.' . $module->file_name . '.ini'; - // check if language should be added - if (CFactory::_('Language.Translation')->check( - $tag, $languageStrings, $total, - $file_name - )) - { - $lang = array_map( - fn($langstring, $placeholder) => $placeholder . '="' . $langstring . '"', - array_values($languageStrings), - array_keys($languageStrings) - ); - // set path - $path = $module->folder_path . '/language/' . $tag . '/'; - // create path if not exist - if (!is_dir($path)) - { - Folder::create($path); - // count the folder created - CFactory::_('Utilities.Counter')->folder++; - } - // add to language files (for now we add all to both TODO) - CFactory::_('Utilities.File')->write( - $path . $file_name, - implode(PHP_EOL, $lang) - ); - CFactory::_('Utilities.File')->write( - $path . $tag . '.' . $module->file_name - . '.sys.ini', - implode(PHP_EOL, $lang) - ); - // set the line counter - CFactory::_('Utilities.Counter')->line += count( - (array) $lang - ); - unset($lang); - // trigger to add language - $addLang[$tag] = $tag; - } - } - } - } - } - // get all files and folders in module folder - $files = Folder::files($module->folder_path); - $folders = Folder::folders($module->folder_path); - // the files/folders to ignore - $ignore = array('sql', 'language', 'script.php', - $module->file_name . '.xml', - $module->file_name . '.php'); - // should the scriptfile be added - if ($module->add_install_script) - { - $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(1) - . 'script.php'; - } - // should the sql install be added - if ($module->add_sql) - { - $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(2) . ''; - $xml .= PHP_EOL . Indent::_(3) - . 'sql/mysql/install.sql'; - $xml .= PHP_EOL . Indent::_(2) . ''; - $xml .= PHP_EOL . Indent::_(1) . ''; - } - // should the sql uninstall be added - if ($module->add_sql_uninstall) - { - $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(2) . ''; - $xml .= PHP_EOL . Indent::_(3) - . 'sql/mysql/uninstall.sql'; - $xml .= PHP_EOL . Indent::_(2) . ''; - $xml .= PHP_EOL . Indent::_(1) . ''; - } - // should the language xml be added - if (ArrayHelper::check($addLang)) - { - $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(1) - . ''; - // load all the language files to xml - foreach ($addLang as $addTag) - { - $xml .= PHP_EOL . Indent::_(2) . '' . $addTag . '/' . $addTag . '.' - . $module->file_name . '.ini'; - $xml .= PHP_EOL . Indent::_(2) . '' . $addTag . '/' . $addTag . '.' - . $module->file_name . '.sys.ini'; - } - $xml .= PHP_EOL . Indent::_(1) . ''; - } - // add the module files - $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(2) . '' . $module->file_name - . '.php'; - // add other files found - if (ArrayHelper::check($files)) - { - foreach ($files as $file) - { - // only add what is not ignored - if (!in_array($file, $ignore)) - { - $xml .= PHP_EOL . Indent::_(2) . '' . $file - . ''; - } - } - } - // add language folder - if (ArrayHelper::check($addLang)) - { - $xml .= PHP_EOL . Indent::_(2) . 'language'; - } - // add sql folder - if ($module->add_sql || $module->add_sql_uninstall) - { - $xml .= PHP_EOL . Indent::_(2) . 'sql'; - } - // add other files found - if (ArrayHelper::check($folders)) - { - foreach ($folders as $folder) - { - // only add what is not ignored - if (!in_array($folder, $ignore)) - { - $xml .= PHP_EOL . Indent::_(2) . '' . $folder - . ''; - } - } - } - $xml .= PHP_EOL . Indent::_(1) . ''; - // now add the Config Params if needed - if (ArrayHelper::check($config_fields)) - { - $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; - // only add if part of the component field types path is required - if ($add_component_path) - { - // add path to module rules and custom fields - $xml .= PHP_EOL . Indent::_(1) . 'get('joomla_version', 3) == 3) - { - $xml .= PHP_EOL . Indent::_(2) - . 'addrulepath="/administrator/components/com_' - . CFactory::_('Config')->component_code_name . '/models/rules"'; - $xml .= PHP_EOL . Indent::_(2) - . 'addfieldpath="/administrator/components/com_' - . CFactory::_('Config')->component_code_name . '/models/fields"'; - } - else - { - $xml .= PHP_EOL . Indent::_(3) - . 'addruleprefix="' . CFactory::_('Config')->namespace_prefix - . '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace') - . '\Administrator\Rule"'; - $xml .= PHP_EOL . Indent::_(3) - . 'addfieldprefix="' . CFactory::_('Config')->namespace_prefix - . '\Component\\' . CFactory::_('Compiler.Builder.Content.One')->get('ComponentNamespace') - . '\Administrator\Field">'; - } - $xml .= PHP_EOL . Indent::_(1) . '>'; - } - else - { - $xml .= PHP_EOL . Indent::_(1) . ''; - } - // add the fields - foreach ($module->config_fields as $field_name => $fieldsets) - { - $xml .= PHP_EOL . Indent::_(1) . ''; - foreach ($fieldsets as $fieldset => $fields) - { - // default to the field set name - $label = $fieldset; - if (isset($module->fieldsets_label[$field_name . $fieldset])) - { - $label = $module->fieldsets_label[$field_name . $fieldset]; - } - // add path to module rules and custom fields - if (isset($module->fieldsets_paths[$field_name . $fieldset]) - && ($module->fieldsets_paths[$field_name . $fieldset] == 2 - || $module->fieldsets_paths[$field_name . $fieldset] == 3)) - { - if ($module->target == 2) - { - if (!isset($module->add_rule_path[$field_name . $fieldset])) - { - $module->add_rule_path[$field_name . $fieldset] = - '/administrator/modules/' - . $module->file_name . '/rules'; - } - - if (!isset($module->add_field_path[$field_name . $fieldset])) - { - $module->add_field_path[$field_name . $fieldset] = - '/administrator/modules/' - . $module->file_name . '/fields'; - } - } - else - { - if (!isset($module->add_rule_path[$field_name . $fieldset])) - { - $module->add_rule_path[$field_name . $fieldset] = - '/modules/' . $module->file_name - . '/rules'; - } - - if (!isset($module->add_field_path[$field_name . $fieldset])) - { - $module->add_field_path[$field_name . $fieldset] = - '/modules/' . $module->file_name - . '/fields'; - } - } - } - // add path to module rules and custom fields - if (isset($module->add_rule_path[$field_name . $fieldset]) - || isset($module->add_field_path[$field_name . $fieldset])) - { - - $xml .= PHP_EOL . Indent::_(1) . ''; - - $xml .= PHP_EOL . Indent::_(1) . '
add_rule_path[$field_name . $fieldset])) - { - $xml .= PHP_EOL . Indent::_(2) - . 'addrulepath="' . $module->add_rule_path[$field_name . $fieldset] . '"'; - } - - if (isset($module->add_field_path[$field_name . $fieldset])) - { - $xml .= PHP_EOL . Indent::_(2) - . 'addfieldpath="' . $module->add_field_path[$field_name . $fieldset] . '"'; - } - - $xml .= PHP_EOL . Indent::_(1) . '>'; - } - else - { - $xml .= PHP_EOL . Indent::_(1) . '
'; - } - // load the fields - if (isset($config_fields[$field_name . $fieldset])) - { - $xml .= $config_fields[$field_name . $fieldset]; - unset($config_fields[$field_name . $fieldset]); - } - $xml .= PHP_EOL . Indent::_(1) . '
'; - } - $xml .= PHP_EOL . Indent::_(1) . ''; - } - $xml .= PHP_EOL . Indent::_(1) . ''; - } - // set update server if found - if ($module->add_update_server) - { - $xml .= PHP_EOL . PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(1) . ''; - $xml .= PHP_EOL . Indent::_(2) - . '' . $module->update_server_url - . ''; - $xml .= PHP_EOL . Indent::_(1) . ''; - } - - return $xml; + return CFactory::_('Architecture.Module.MainXML')->get($module); } /** @@ -23582,7 +20870,7 @@ class Interpretation extends Fields * @return string The fields set in xml * @deprecated 3.4 CFactory::_('Architecture.Plugin.Extension')->get(...); */ - public function getPluginMainClass(&$plugin) + public function getPluginMainClass($plugin) { return CFactory::_('Architecture.Plugin.Extension')->get($plugin); } @@ -23595,7 +20883,7 @@ class Interpretation extends Fields * @return string The xml * @deprecated 3.4 CFactory::_('Architecture.Plugin.MainXML')->get(...); */ - public function getPluginMainXML(&$plugin) + public function getPluginMainXML($plugin) { return CFactory::_('Architecture.Plugin.MainXML')->get($plugin); } @@ -23608,7 +20896,7 @@ class Interpretation extends Fields * @return string * @deprecated 3.4 (line 393 private Compiler.Power.Infusion->code()) */ - public function getPowerCode(&$power) + public function getPowerCode($power) { $code = []; // set the name space diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Model/CheckInNowInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Model/CheckInNowInterface.php new file mode 100644 index 000000000..1fe7ccb5a --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Model/CheckInNowInterface.php @@ -0,0 +1,41 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model; + + +/** + * Check In Now Interface + * + * @since 5.1.2 + */ +interface CheckInNowInterface +{ + /** + * Get the generated call snippet that invokes the check-in method. + * + * @return string The code that calls the generated method. + * @since 5.1.2 + */ + public function getCall(): string; + + /** + * Build the full `checkInNow()` method code for the given view/table. + * + * @param string $view The view/table suffix (e.g. 'items'). + * @param string $component The component name (without 'com_'). + * + * @return string The full method code as a string. + * @since 5.1.2 + */ + public function getMethod($view, $component): string; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/DispatcherInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/DispatcherInterface.php new file mode 100644 index 000000000..0c09ac704 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/DispatcherInterface.php @@ -0,0 +1,32 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module; + + +/** + * Module Dispatcher Interface + * + * @since 5.1.2 + */ +interface DispatcherInterface +{ + /** + * Get the updated placeholder content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return string The updated placeholder content. + * @since 5.1.2 + */ + public function get(object $module): string; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/HelperInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/HelperInterface.php new file mode 100644 index 000000000..3fb918860 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/HelperInterface.php @@ -0,0 +1,42 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module; + + +/** + * Module Helper Code Interface + * + * @since 5.1.2 + */ +interface HelperInterface +{ + /** + * Get Module Helper Class code + * + * @param object $module The module object + * + * @return string The helper class code + * @since 5.1.2 + */ + public function get(object $module): string; + + /** + * Get Module Helper Header code + * + * @param object $module The module object + * + * @return string The helper header code + * @since 5.1.2 + */ + public function header(object $module): string; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/LibraryInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/LibraryInterface.php new file mode 100644 index 000000000..c500550e4 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/LibraryInterface.php @@ -0,0 +1,32 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module; + + +/** + * Module Library Interface + * + * @since 5.1.2 + */ +interface LibraryInterface +{ + /** + * Get the module's library loading code. + * + * @param object $module The module object + * + * @return string The generated code to load libraries into the document. + * @since 5.1.2 + */ + public function get(object $module): string; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/ProviderInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/ProviderInterface.php new file mode 100644 index 000000000..a2f1ed725 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/ProviderInterface.php @@ -0,0 +1,33 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module; + + +/** + * Module Provider Interface + * + * @since 5.1.2 + */ +interface ProviderInterface +{ + /** + * Get the updated placeholder content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return string The updated placeholder content. + * + * @since 5.0.2 + */ + public function get(object $module): string; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/TemplateInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/TemplateInterface.php new file mode 100644 index 000000000..5d12c1c3b --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/TemplateInterface.php @@ -0,0 +1,43 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module; + + +/** + * Module Template Interface + * + * @since 5.1.2 + */ +interface TemplateInterface +{ + /** + * Get the updated placeholder default template content for the given module. + * + * @param object $module The module object containing the necessary data. + * @param string $key The dispenser key for this given module. + * + * @return string The updated placeholder content. + * @since 5.1.2 + */ + public function default(object $module, string $key): string; + + /** + * Get the updated placeholder extra template content for the given module. + * + * @param object $module The module object containing the necessary data. + * + * @return void + * @since 5.1.2 + */ + public function extra(object $module): void; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/Architecture/Module/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/ModuleDataInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/ModuleDataInterface.php new file mode 100644 index 000000000..64b55e137 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Interfaces/ModuleDataInterface.php @@ -0,0 +1,52 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Interfaces; + + +/** + * Module Data Interface + * + * @since 5.1.2 + */ +interface ModuleDataInterface +{ + /** + * Get the Joomla Module/s + * + * @param int|string|null $module The module id/guid + * + * @return object|array|null if ID|GUID found it returns object, if no ID|GUID given it returns all set + * @since 3.2.0 + */ + public function get($module = null); + + /** + * Check if the Joomla Module/s exists + * + * @param int|string|null $module The module id|guid + * + * @return bool if ID|GUID found it returns true, if no ID|GUID given it returns true if any are set + * @since 3.2.0 + */ + public function exists($module = null): bool; + + /** + * Set the module + * + * @param mixed $module The module ID/GUID + * + * @return bool true on success + * @since 5.0.4 + */ + public function set($module): bool; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/Header.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/Header.php index 708acc34d..a1691b384 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/Header.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/Header.php @@ -122,6 +122,25 @@ final class Header implements HeaderInterface */ protected array $headers = []; + /** + * List of disallowed context strings. + * + * @var array + * @since 5.1.2 + */ + protected array $disallowedContexts = [ + 'admin.helper', + 'site.helper', + 'plugin.extension.header', + 'plugin.provider.header', + 'module.provider.header', + 'module.dispatcher.header', + 'module.dynamicgets.header', + 'module.helper.header', + 'module.default.template.header', + 'module.extra.template.header', + ]; + /** * The Namespace Prefix * @@ -200,7 +219,7 @@ final class Header implements HeaderInterface $headers = $this->getHeaders($context); // add to all except the helper classes - if ('admin.helper' !== $context && 'site.helper' !== $context && 'plugin.extension.header' !== $context && 'plugin.provider.header' !== $context) + if ($this->isAllowedContext($context)) { $target = 'Administrator'; if ($this->config->get('build_target', 'admin') === 'site') @@ -554,6 +573,29 @@ final class Header implements HeaderInterface $headers[] = 'use Joomla\CMS\Form\Field\###FORM_EXTENDS###;'; break; + case 'module.provider.header': + $headers = []; + $headers[] = 'use Joomla\CMS\Extension\Service\Provider\HelperFactory;'; + $headers[] = 'use Joomla\CMS\Extension\Service\Provider\Module;'; + $headers[] = 'use Joomla\CMS\Extension\Service\Provider\ModuleDispatcherFactory;'; + $headers[] = 'use Joomla\DI\ServiceProviderInterface;'; + $headers[] = 'use Joomla\DI\Container;'; + break; + case 'module.dispatcher.header': + $headers = []; + $headers[] = 'use Joomla\CMS\Dispatcher\AbstractModuleDispatcher;'; + $headers[] = 'use Joomla\CMS\Helper\HelperFactoryAwareInterface;'; + $headers[] = 'use Joomla\CMS\Helper\HelperFactoryAwareTrait;'; + break; + case 'module.dynamicgets.header': + $headers = []; + $headers[] = 'use Joomla\CMS\Application\CMSApplicationInterface;'; + $headers[] = 'use Joomla\Database\DatabaseAwareInterface;'; + $headers[] = 'use Joomla\Database\DatabaseAwareTrait;'; + $headers[] = 'use Joomla\Registry\Registry;'; + $headers[] = 'use Joomla\Input\Input;'; + break; + case 'plugin.extension.header': $headers = []; break; @@ -588,6 +630,22 @@ final class Header implements HeaderInterface $this->headers[$context] = $headers; return $headers; + } + + /** + * Determine if the given context is allowed. + * + * Returns true if the context is not in the disallowed list, + * false if the context is disallowed. + * + * @param string $context The context string to evaluate. + * + * @return bool True if allowed, false if disallowed. + * @since 5.1.2 + */ + protected function isAllowedContext(string $context): bool + { + return !in_array($context, $this->disallowedContexts, true); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/History.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/History.php index 1a0c2f846..30f6088c0 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/History.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/History.php @@ -12,11 +12,10 @@ namespace VDM\Joomla\Componentbuilder\Compiler\JoomlaFive; -use Joomla\CMS\Factory; -use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler; +use Joomla\Database\DatabaseInterface; +use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Utilities\JsonHelper; use VDM\Joomla\Utilities\ArrayHelper; -use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HistoryInterface; @@ -44,23 +43,25 @@ final class History implements HistoryInterface protected Config $config; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 - */ - protected $db; + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; /** * Constructor * - * @param Config|null $config The compiler config object. + * @param Config $config The compiler config object. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ - public function __construct(?Config $config = null) + public function __construct(Config $config, DatabaseInterface $db) { - $this->config = $config ?: Compiler::_('Config'); - $this->db = Factory::getDbo(); + $this->config = $config; + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFour/Header.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFour/Header.php index 8d3658b09..e7fb66f4b 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFour/Header.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFour/Header.php @@ -122,6 +122,25 @@ final class Header implements HeaderInterface */ protected array $headers = []; + /** + * List of disallowed context strings. + * + * @var array + * @since 5.1.2 + */ + protected array $disallowedContexts = [ + 'admin.helper', + 'site.helper', + 'plugin.extension.header', + 'plugin.provider.header', + 'module.provider.header', + 'module.dispatcher.header', + 'module.dynamicgets.header', + 'module.helper.header', + 'module.default.template.header', + 'module.extra.template.header', + ]; + /** * The Namespace Prefix * @@ -200,7 +219,7 @@ final class Header implements HeaderInterface $headers = $this->getHeaders($context); // add to all except the helper classes - if ('admin.helper' !== $context && 'site.helper' !== $context && 'plugin.extension.header' !== $context && 'plugin.provider.header' !== $context) + if ($this->isAllowedContext($context)) { $target = 'Administrator'; if ($this->config->get('build_target', 'admin') === 'site') @@ -554,6 +573,29 @@ final class Header implements HeaderInterface $headers[] = 'use Joomla\CMS\Form\Field\###FORM_EXTENDS###;'; break; + case 'module.provider.header': + $headers = []; + $headers[] = 'use Joomla\CMS\Extension\Service\Provider\HelperFactory;'; + $headers[] = 'use Joomla\CMS\Extension\Service\Provider\Module;'; + $headers[] = 'use Joomla\CMS\Extension\Service\Provider\ModuleDispatcherFactory;'; + $headers[] = 'use Joomla\DI\ServiceProviderInterface;'; + $headers[] = 'use Joomla\DI\Container;'; + break; + case 'module.dispatcher.header': + $headers = []; + $headers[] = 'use Joomla\CMS\Dispatcher\AbstractModuleDispatcher;'; + $headers[] = 'use Joomla\CMS\Helper\HelperFactoryAwareInterface;'; + $headers[] = 'use Joomla\CMS\Helper\HelperFactoryAwareTrait;'; + break; + case 'module.dynamicgets.header': + $headers = []; + $headers[] = 'use Joomla\CMS\Application\CMSApplicationInterface;'; + $headers[] = 'use Joomla\Database\DatabaseAwareInterface;'; + $headers[] = 'use Joomla\Database\DatabaseAwareTrait;'; + $headers[] = 'use Joomla\Registry\Registry;'; + $headers[] = 'use Joomla\Input\Input;'; + break; + case 'plugin.extension.header': $headers = []; break; @@ -588,6 +630,22 @@ final class Header implements HeaderInterface $this->headers[$context] = $headers; return $headers; + } + + /** + * Determine if the given context is allowed. + * + * Returns true if the context is not in the disallowed list, + * false if the context is disallowed. + * + * @param string $context The context string to evaluate. + * + * @return bool True if allowed, false if disallowed. + * @since 5.1.2 + */ + protected function isAllowedContext(string $context): bool + { + return !in_array($context, $this->disallowedContexts, true); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFour/History.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFour/History.php index 04126729a..459afc1fe 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFour/History.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFour/History.php @@ -12,11 +12,10 @@ namespace VDM\Joomla\Componentbuilder\Compiler\JoomlaFour; -use Joomla\CMS\Factory; -use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler; +use Joomla\Database\DatabaseInterface; +use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Utilities\JsonHelper; use VDM\Joomla\Utilities\ArrayHelper; -use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HistoryInterface; @@ -44,23 +43,25 @@ final class History implements HistoryInterface protected Config $config; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 - */ - protected $db; + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; /** * Constructor * - * @param Config|null $config The compiler config object. + * @param Config $config The compiler config object. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ - public function __construct(?Config $config = null) + public function __construct(Config $config, DatabaseInterface $db) { - $this->config = $config ?: Compiler::_('Config'); - $this->db = Factory::getDbo(); + $this->config = $config; + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaPower.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaPower.php index 0a854e69f..ee136e1dd 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaPower.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaPower.php @@ -13,6 +13,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler; use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Language\Text; use VDM\Joomla\Componentbuilder\Compiler\Config; @@ -131,11 +132,12 @@ final class JoomlaPower implements PowerInterface protected Superpower $superpower; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.1 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Database object to query local DB @@ -152,19 +154,21 @@ final class JoomlaPower implements PowerInterface * @param Customcode $customcode The compiler customcode object. * @param Gui $gui The compiler customcode gui object. * @param Superpower $superpower The JCB superpower object. + * @param DatabaseInterface $db The Joomla Database Class. * * @throws \Exception * @since 3.2.1 */ public function __construct(Config $config, Placeholder $placeholder, - Customcode $customcode, Gui $gui, Superpower $superpower) + Customcode $customcode, Gui $gui, Superpower $superpower, DatabaseInterface $db) { $this->config = $config; $this->placeholder = $placeholder; $this->customcode = $customcode; $this->gui = $gui; $this->superpower = $superpower; - $this->db = Factory::getDbo(); + $this->db = $db; + $this->app = Factory::getApplication(); } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaPower/Extractor.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaPower/Extractor.php index 71835a2fb..af72bdfa3 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaPower/Extractor.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaPower/Extractor.php @@ -12,6 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\JoomlaPower; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Utilities\JsonHelper; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Power\ExtractorInterface; use VDM\Joomla\Componentbuilder\Compiler\Power\Extractor as ExtendingExtractor; @@ -66,13 +67,14 @@ final class Extractor extends ExtendingExtractor implements ExtractorInterface /** * Constructor. * - * @param int $targetVersion The targeted Joomla version. + * @param DatabaseInterface $db The Joomla Database class. + * @param int $targetVersion The targeted Joomla version. * * @since 3.2.1 */ - public function __construct(int $targetVersion) + public function __construct(DatabaseInterface $db, int $targetVersion) { - parent::__construct(); + parent::__construct($db); $this->targetVersion = $targetVersion; } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/History.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/History.php index c94a42730..5b29c0670 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/History.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaThree/History.php @@ -12,11 +12,10 @@ namespace VDM\Joomla\Componentbuilder\Compiler\JoomlaThree; -use Joomla\CMS\Factory; -use VDM\Joomla\Componentbuilder\Compiler\Factory as Compiler; +use Joomla\Database\DatabaseInterface; +use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Utilities\JsonHelper; use VDM\Joomla\Utilities\ArrayHelper; -use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HistoryInterface; @@ -44,23 +43,25 @@ final class History implements HistoryInterface protected Config $config; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 - */ - protected $db; + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; /** * Constructor * - * @param Config|null $config The compiler config object. + * @param Config $config The compiler config object. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ - public function __construct(?Config $config = null) + public function __construct(Config $config, DatabaseInterface $db) { - $this->config = $config ?: Compiler::_('Config'); - $this->db = Factory::getDbo(); + $this->config = $config; + $this->db = $db; } /** @@ -224,7 +225,6 @@ final class History implements HistoryInterface // run the update return $this->db->updateObject('#__ucm_history', $object, 'version_id'); - } - + } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Data.php new file mode 100644 index 000000000..705892a83 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Data.php @@ -0,0 +1,1075 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFive; + + +use Joomla\CMS\Factory; +use Joomla\CMS\Filter\OutputFilter; +use Joomla\Database\DatabaseInterface; +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Customcode; +use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Language; +use VDM\Joomla\Componentbuilder\Compiler\Field; +use VDM\Joomla\Componentbuilder\Compiler\Field\Name as Fieldname; +use VDM\Joomla\Componentbuilder\Compiler\Model\Filesfolders; +use VDM\Joomla\Componentbuilder\Compiler\Model\Libraries; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Data as Dynamicget; +use VDM\Joomla\Componentbuilder\Compiler\Templatelayout\Data as Templatelayout; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\String\ClassfunctionHelper; +use VDM\Joomla\Utilities\JsonHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\GetHelper; +use VDM\Joomla\Utilities\GuidHelper; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface; + + +/** + * Joomla Module Data Class + * + * @since 5.1.2 + */ +final class Data implements ModuleDataInterface +{ + /** + * Compiler Joomla Plugins Data + * + * @var array + * @since 3.2.0 + */ + protected array $data = []; + + /** + * Tracking GUID index + * + * @var array + * @since 5.0.4 + */ + protected array $index = []; + + /** + * The Config Class. + * + * @var Config + * @since 3.2.0 + */ + protected Config $config; + + /** + * The Customcode Class. + * + * @var Customcode + * @since 3.2.0 + */ + protected Customcode $customcode; + + /** + * The Gui Class. + * + * @var Gui + * @since 3.2.0 + */ + protected Gui $gui; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 3.2.0 + */ + protected Placeholder $placeholder; + + /** + * The Language Class. + * + * @var Language + * @since 3.2.0 + */ + protected Language $language; + + /** + * The Field Class. + * + * @var Field + * @since 3.2.0 + */ + protected Field $field; + + /** + * The Name Class. + * + * @var Fieldname + * @since 3.2.0 + */ + protected Fieldname $fieldname; + + /** + * The Filesfolders Class. + * + * @var Filesfolders + * @since 3.2.0 + */ + protected Filesfolders $filesfolders; + + /** + * The Libraries Class. + * + * @var Libraries + * @since 3.2.0 + */ + protected Libraries $libraries; + + /** + * The Data Class. + * + * @var Dynamicget + * @since 3.2.0 + */ + protected Dynamicget $dynamicget; + + /** + * The Data Class. + * + * @var Templatelayout + * @since 3.2.0 + */ + protected Templatelayout $templatelayout; + + /** + * Joomla Database Class. + * + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Customcode $customcode The Customcode Class. + * @param Gui $gui The Gui Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param Language $language The Language Class. + * @param Field $field The Field Class. + * @param Fieldname $fieldname The Name Class. + * @param Filesfolders $filesfolders The Filesfolders Class. + * @param Libraries $libraries The Libraries Class. + * @param Dynamicget $dynamicget The Data Class. + * @param Templatelayout $templatelayout The Data Class. + * @param DatabaseInterface $db The Joomla Database Class. + * + * @since 3.2.0 + */ + public function __construct(Config $config, Customcode $customcode, Gui $gui, + Placeholder $placeholder, Language $language, + Field $field, Fieldname $fieldname, + Filesfolders $filesfolders, Libraries $libraries, + Dynamicget $dynamicget, Templatelayout $templatelayout, + DatabaseInterface $db) + { + $this->config = $config; + $this->customcode = $customcode; + $this->gui = $gui; + $this->placeholder = $placeholder; + $this->language = $language; + $this->field = $field; + $this->fieldname = $fieldname; + $this->filesfolders = $filesfolders; + $this->libraries = $libraries; + $this->dynamicget = $dynamicget; + $this->templatelayout = $templatelayout; + $this->db = $db; + } + + /** + * Get the Joomla Module/s + * + * @param int|string|null $module The module id/guid + * + * @return object|array|null if ID|GUID found it returns object, if no ID|GUID given it returns all set + * @since 3.2.0 + */ + public function get($module = null) + { + if ($module === null && $this->exists()) + { + return $this->data; + } + elseif ($this->exists($module)) + { + $id = $this->index[$module]; + return $this->data[$id]; + } + + return null; + } + + /** + * Check if the Joomla Module/s exists + * + * @param int|string|null $module The module id|guid + * + * @return bool if ID|GUID found it returns true, if no ID|GUID given it returns true if any are set + * @since 3.2.0 + */ + public function exists($module = null): bool + { + if ($module === null) + { + return ArrayHelper::check($this->data); + } + elseif (isset($this->index[$module])) + { + return true; + } + + return $this->set($module); + } + + /** + * Set the module + * + * @param mixed $module The module ID/GUID + * + * @return bool true on success + * @since 5.0.4 + */ + public function set($module): bool + { + if (!GuidHelper::valid($module) && !is_numeric($module)) + { + return false; + } + elseif (isset($this->index[$module])) + { + return true; + } + + if (GuidHelper::valid($module)) + { + $query = $this->getQuery($module, 'guid'); + } + else + { + $query = $this->getQuery($module); + } + + $data = $this->getData($query); + + if ($data !== null) + { + $this->data[$data->id] = $data; + $this->index[$data->id] = $data->id; + $this->index[$data->guid] = $data->id; + + return true; + } + + return false; + } + + /** + * get current plugin data query + * + * @param mixed $value The plugin ID/GUID + * @param string $key The type of value + * + * @return string The plugin data query + * @since 5.0.4 + */ + private function getQuery($value, string $key = 'id') + { + // Create a new query object. + $query = $this->db->getQuery(true); + + $query->select('a.*'); + $query->select( + $this->db->quoteName( + array( + 'f.addfiles', + 'f.addfolders', + 'f.addfilesfullpath', + 'f.addfoldersfullpath', + 'f.addurls', + 'u.version_update', + 'u.id' + ), array( + 'addfiles', + 'addfolders', + 'addfilesfullpath', + 'addfoldersfullpath', + 'addurls', + 'version_update', + 'version_update_id' + ) + ) + ); + // from these tables + $query->from('#__componentbuilder_joomla_module AS a'); + $query->join( + 'LEFT', $this->db->quoteName( + '#__componentbuilder_joomla_module_updates', 'u' + ) . ' ON (' . $this->db->quoteName('a.guid') . ' = ' + . $this->db->quoteName('u.joomla_module') . ')' + ); + $query->join( + 'LEFT', $this->db->quoteName( + '#__componentbuilder_joomla_module_files_folders_urls', 'f' + ) . ' ON (' . $this->db->quoteName('a.guid') . ' = ' + . $this->db->quoteName('f.joomla_module') . ')' + ); + $query->where($this->db->quoteName('a.' . $key) . ' = ' . $this->db->quote($value)); + $query->where($this->db->quoteName('a.published') . ' >= 1'); + + return $query; + } + + /** + * get module data + * + * @param string $query The module query + * + * @return object|null The module data + * @since 5.0.4 + */ + private function getData($query): ?object + { + $this->db->setQuery($query); + $this->db->execute(); + if ($this->db->getNumRows()) + { + // get the module data + $module = $this->db->loadObject(); + $id = $module->id; + + // tweak system to set stuff to the module domain + $_backup_target = $this->config->build_target; + $_backup_lang = $this->config->lang_target; + $_backup_langPrefix = $this->config->lang_prefix; + + // set some keys + $module->target_type = 'M0dUl3'; + $module->key = $module->id . '_' . $module->target_type; + + // update to point to module + $this->config->build_target = $module->key; + $this->config->lang_target = $module->key; + + // set version if not set + if (empty($module->module_version)) + { + $module->module_version = '1.0.0'; + } + + // set target client + if ($module->target == 2) + { + $module->target_client = 'administrator'; + $module->target_client_namespace = 'Administrator'; + } + else + { + // default is site area + $module->target_client = 'site'; + $module->target_client_namespace = 'Site'; + } + + // set GUI mapper + $guiMapper = [ + 'table' => 'joomla_module', + 'id' => (int) $id, + 'type' => 'php' + ]; + + // update the name if it has dynamic values + $module->name = $this->placeholder->update_( + $this->customcode->update($module->name) + ); + + // set safe class function name + $module->code_name = ClassfunctionHelper::safe( + $module->name + ); + + // alias of code name + $module->class_name = ucfirst( + $module->code_name + ); + + // set module namespace + $module->namespace = $module->class_name; + + // set official name + $module->official_name = StringHelper::safe( + $module->name, 'W' + ); + $this->config->set('lang_prefix', 'MOD_' . strtoupper((string) $module->code_name)); + + // set lang prefix + $module->lang_prefix = $this->config->lang_prefix; + + // set module class name + $module->class_helper_name = ucfirst((string) $module->code_name) + . 'Helper'; + $module->class_data_name = ucfirst((string) $module->code_name) + . 'Data'; + + // set module install class name + $module->installer_class_name = 'mod_' . ucfirst( + (string) $module->code_name + ) . 'InstallerScript'; + + // set module folder name + $module->folder_name = 'mod_' . strtolower((string) $module->code_name); + + // set the zip name + $module->zip_name = $module->folder_name . '_v' . str_replace( + '.', '_', (string) $module->module_version + ) . '__J' . $this->config->joomla_version; + + // set module file name + $module->file_name = $module->folder_name; + + // set module context + $module->context = $module->file_name . '.' . $module->id; + + // set official_name lang strings + $this->language->set( + $module->key, $this->config->lang_prefix, $module->official_name + ); + + // set some placeholder for this module + $this->placeholder->set('Module_name', $module->official_name); + $this->placeholder->set('Module', ucfirst( + (string) $module->code_name + )); + $this->placeholder->set('module', strtolower( + (string) $module->code_name + )); + $this->placeholder->set('module.version', $module->module_version); + $this->placeholder->set('module_version', str_replace( + '.', '_', (string) $module->module_version + )); + // set description (TODO) add description field to module + if (!isset($module->description) + || !StringHelper::check( + $module->description + )) + { + $module->description = ''; + } + else + { + $module->description = $this->placeholder->update_( + $this->customcode->update($module->description) + ); + $this->language->set( + $module->key, $module->lang_prefix . '_DESCRIPTION', + $module->description + ); + $module->description = '

' . $module->description + . '

'; + } + + // get author name + $project_author = $this->config->project_author; + + // set the description + $module->xml_description = "

" . $module->official_name + . " (v." . $module->module_version + . ")

" + . $module->description . "

Created by " . trim( + (string) OutputFilter::cleanText($project_author) + ) . "
Development started " + . Factory::getDate($module->created)->format("jS F, Y") + . "

"; + + // set xml description + $this->language->set( + $module->key, $module->lang_prefix . '_XML_DESCRIPTION', + $module->xml_description + ); + + // update the readme if set + if ($module->addreadme == 1 && !empty($module->readme)) + { + $module->readme = $this->placeholder->update_( + $this->customcode->update(base64_decode((string) $module->readme)) + ); + } + else + { + $module->addreadme = 0; + unset($module->readme); + } + + // get the custom_get + $module->custom_get = (isset($module->custom_get) + && JsonHelper::check($module->custom_get)) + ? json_decode((string) $module->custom_get, true) : null; + + if (ArrayHelper::check($module->custom_get)) + { + $module->custom_get = $this->dynamicget->get( + $module->custom_get, $module->key, $module->key + ); + } + else + { + $module->custom_get = null; + } + + // set helper class details + if ($module->add_class_helper >= 1 + && StringHelper::check( + $module->class_helper_code + )) + { + if ($module->add_class_helper_header == 1 + && StringHelper::check( + $module->class_helper_header + )) + { + // set GUI mapper field + $guiMapper['field'] = 'class_helper_header'; + // base64 Decode code + $module->class_helper_header = PHP_EOL + . $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode( + (string) $module->class_helper_header + ) + ) + ), + $guiMapper + ) . PHP_EOL; + } + else + { + $module->add_class_helper_header = 0; + $module->class_helper_header = ''; + } + // set GUI mapper field + $guiMapper['field'] = 'class_helper_code'; + // base64 Decode code + $module->class_helper_code = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->class_helper_code) + ) + ), + $guiMapper + ); + // set class type + if ($module->add_class_helper == 2) + { + $module->class_helper_type = 'abstract class '; + } + else + { + $module->class_helper_type = 'class '; + } + } + else + { + $module->add_class_helper = 0; + $module->class_helper_code = ''; + $module->class_helper_header = ''; + } + + // base64 Decode layout_data + if (isset($module->layout_data) + && StringHelper::check($module->layout_data)) + { + // set GUI mapper field + $guiMapper['field'] = 'layout_data'; + $module->layout_data = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->layout_data) + ) + ), + $guiMapper + ); + + // check if we have template or layouts to load + $this->templatelayout->set( + $module->layout_data , $module->code_name + ); + } + else + { + $module->layout_data = ''; + } + + // base64 Decode mod_code + if (isset($module->mod_code) + && StringHelper::check($module->mod_code)) + { + // set GUI mapper field + $guiMapper['field'] = 'mod_code'; + $module->mod_code = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->mod_code) + ) + ), + $guiMapper + ); + + // check if we have template or layouts to load + $this->templatelayout->set( + $module->mod_code , $module->code_name + ); + } + else + { + $module->mod_code = "// get the module class sfx"; + $module->mod_code .= PHP_EOL + . "\$moduleclass_sfx = htmlspecialchars(\$params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8');"; + $module->mod_code .= PHP_EOL . "// load the default Tmpl"; + $module->mod_code .= PHP_EOL + . "require JModuleHelper::getLayoutPath('mod_" + . strtolower((string) $module->code_name) + . "', \$params->get('layout', 'default'));"; + } + + // base64 Decode default header + if (isset($module->default_header) + && StringHelper::check( + $module->default_header + ) && $module->add_default_header == 1) + { + // set GUI mapper field + $guiMapper['field'] = 'default_header'; + $module->default_header = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->default_header) + ) + ), + $guiMapper + ); + } + else + { + $module->add_default_header = 0; + $module->default_header = ''; + } + + // base64 Decode default + if (isset($module->default) + && StringHelper::check($module->default)) + { + // set GUI mapper field + $guiMapper['field'] = 'default'; + $guiMapper['type'] = 'html'; + $module->default = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->default) + ) + ), + $guiMapper + ); + + // check if we have template or layouts to load + $this->templatelayout->set( + $module->default , $module->code_name + ); + } + else + { + $module->default = '

No Tmpl set

'; + } + + // start the config array + $module->config_fields = []; + // create the form arrays + $module->form_files = []; + $module->fieldsets_label = []; + $module->fieldsets_paths = []; + $module->add_rule_path = []; + $module->add_field_path = []; + // set global fields rule to default component path + $module->fields_rules_paths = 1; + // set the fields data + $module->fields = (isset($module->fields) + && JsonHelper::check($module->fields)) + ? json_decode((string) $module->fields, true) : null; + if (ArrayHelper::check($module->fields)) + { + // ket global key + $key = $module->key; + $dynamic_fields = array('fieldset' => 'basic', + 'fields_name' => 'params', + 'file' => 'config'); + foreach ($module->fields as $n => &$form) + { + if (isset($form['fields']) + && ArrayHelper::check( + $form['fields'] + )) + { + // make sure the dynamic_field is set to dynamic_value by default + foreach ( + $dynamic_fields as $dynamic_field => + $dynamic_value + ) + { + if (!isset($form[$dynamic_field]) + || !StringHelper::check( + $form[$dynamic_field] + )) + { + $form[$dynamic_field] = $dynamic_value; + } + else + { + if ('fields_name' === $dynamic_field + && strpos((string) $form[$dynamic_field], '.') + !== false) + { + $form[$dynamic_field] + = $form[$dynamic_field]; + } + else + { + $form[$dynamic_field] + = StringHelper::safe( + $form[$dynamic_field] + ); + } + } + } + // check if field is external form file + if (!isset($form['module']) || $form['module'] != 1) + { + // now build the form key + $unique = $form['file'] . $form['fields_name'] + . $form['fieldset']; + } + else + { + // now build the form key + $unique = $form['fields_name'] + . $form['fieldset']; + } + // set global fields rule path switches + if ($module->fields_rules_paths == 1 + && isset($form['fields_rules_paths']) + && $form['fields_rules_paths'] == 2) + { + $module->fields_rules_paths = 2; + } + // set where to path is pointing + $module->fieldsets_paths[$unique] + = $form['fields_rules_paths']; + // check for extra rule paths + if (isset($form['addrulepath']) + && ArrayHelper::check($form['addrulepath'])) + { + foreach ($form['addrulepath'] as $add_rule_path) + { + if (StringHelper::check($add_rule_path['path'])) + { + $module->add_rule_path[$unique] = $add_rule_path['path']; + } + } + } + // check for extra field paths + if (isset($form['addfieldpath']) + && ArrayHelper::check($form['addfieldpath'])) + { + foreach ($form['addfieldpath'] as $add_field_path) + { + if (StringHelper::check($add_field_path['path'])) + { + $module->add_field_path[$unique] = $add_field_path['path']; + } + } + } + // add the label if set to lang + if (isset($form['label']) + && StringHelper::check( + $form['label'] + )) + { + $module->fieldsets_label[$unique] + = $this->language->key($form['label']); + } + // build the fields + $form['fields'] = array_map( + function ($field) use ($key, $unique) { + // make sure the alias and title is 0 + $field['alias'] = 0; + $field['title'] = 0; + // set the field details + $this->field->set( + $field, $key, $key, $unique + ); + // update the default if set + if (StringHelper::check( + $field['custom_value'] + ) + && isset($field['settings'])) + { + if (($old_default + = GetHelper::between( + $field['settings']->xml, + 'default="', '"', false + )) !== false) + { + // replace old default + $field['settings']->xml + = str_replace( + 'default="' . $old_default + . '"', 'default="' + . $field['custom_value'] . '"', + (string) $field['settings']->xml + ); + } + else + { + // add the default (hmmm not ideal but okay it should work) + $field['settings']->xml + = 'default="' + . $field['custom_value'] . '" ' + . $field['settings']->xml; + } + } + unset($field['custom_value']); + + // return field + return $field; + }, array_values($form['fields']) + ); + // check if field is external form file + if (!isset($form['module']) || $form['module'] != 1) + { + // load the form file + if (!isset($module->form_files[$form['file']])) + { + $module->form_files[$form['file']] + = []; + } + if (!isset($module->form_files[$form['file']][$form['fields_name']])) + { + $module->form_files[$form['file']][$form['fields_name']] + = []; + } + if (!isset($module->form_files[$form['file']][$form['fields_name']][$form['fieldset']])) + { + $module->form_files[$form['file']][$form['fields_name']][$form['fieldset']] + = []; + } + // do some house cleaning (for fields) + foreach ($form['fields'] as $field) + { + // so first we lock the field name in + $this->fieldname->get( + $field, $module->key, $unique + ); + // add the fields to the global form file builder + $module->form_files[$form['file']][$form['fields_name']][$form['fieldset']][] + = $field; + } + // remove form + unset($module->fields[$n]); + } + else + { + // load the config form + if (!isset($module->config_fields[$form['fields_name']])) + { + $module->config_fields[$form['fields_name']] + = []; + } + if (!isset($module->config_fields[$form['fields_name']][$form['fieldset']])) + { + $module->config_fields[$form['fields_name']][$form['fieldset']] + = []; + } + // do some house cleaning (for fields) + foreach ($form['fields'] as $field) + { + // so first we lock the field name in + $this->fieldname->get( + $field, $module->key, $unique + ); + // add the fields to the config builder + $module->config_fields[$form['fields_name']][$form['fieldset']][] + = $field; + } + // remove form + unset($module->fields[$n]); + } + } + else + { + unset($module->fields[$n]); + } + } + } + unset($module->fields); + + // set files and folders + $this->filesfolders->set($module); + + // set libraries + $this->libraries->set($module->code_name, $module); + + // add PHP in module install + $module->add_install_script = true; + $addScriptMethods = [ + 'php_script', + 'php_preflight', + 'php_postflight', + 'php_method' + ]; + $addScriptTypes = [ + 'install', + 'update', + 'uninstall' + ]; + // the next are php placeholders + $guiMapper['type'] = 'php'; + foreach ($addScriptMethods as $scriptMethod) + { + foreach ($addScriptTypes as $scriptType) + { + if (isset($module->{'add_' . $scriptMethod . '_' . $scriptType}) + && $module->{'add_' . $scriptMethod . '_' . $scriptType} == 1 + && StringHelper::check( + $module->{$scriptMethod . '_' . $scriptType} + )) + { + // set GUI mapper field + $guiMapper['field'] = $scriptMethod . '_' . $scriptType; + $module->{$scriptMethod . '_' . $scriptType} = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode( + (string) $module->{$scriptMethod . '_' . $scriptType} + ) + ) + ), + $guiMapper + ); + } + else + { + unset($module->{$scriptMethod . '_' . $scriptType}); + $module->{'add_' . $scriptMethod . '_' . $scriptType} = 0; + } + } + } + + // add_sql + if ($module->add_sql == 1 + && StringHelper::check($module->sql)) + { + $module->sql = $this->placeholder->update_( + $this->customcode->update(base64_decode((string) $module->sql)) + ); + } + else + { + unset($module->sql); + $module->add_sql = 0; + } + + // add_sql_uninstall + if ($module->add_sql_uninstall == 1 + && StringHelper::check( + $module->sql_uninstall + )) + { + $module->sql_uninstall = $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->sql_uninstall) + ) + ); + } + else + { + unset($module->sql_uninstall); + $module->add_sql_uninstall = 0; + } + + // update the URL of the update_server if set + if ($module->add_update_server == 1 + && StringHelper::check( + $module->update_server_url + )) + { + $module->update_server_url = $this->placeholder->update_( + $this->customcode->update($module->update_server_url) + ); + } + + // add the update/sales server FTP details if that is the expected protocol + $serverArray = array('update_server', 'sales_server'); + foreach ($serverArray as $server) + { + if ($module->{'add_' . $server} == 1 + && is_numeric( + $module->{$server} + ) + && $module->{$server} > 0) + { + // get the server protocol + $module->{$server . '_protocol'} + = GetHelper::var( + 'server', (int) $module->{$server}, 'id', 'protocol' + ); + } + else + { + $module->{$server} = 0; + // only change this for sales server (update server can be added locally to the zip file) + if ('sales_server' === $server) + { + $module->{'add_' . $server} = 0; + } + $module->{$server . '_protocol'} = 0; + } + } + + // set the update server stuff (TODO) + // update_server_xml_path + // update_server_xml_file_name + + // rest globals + $this->config->build_target = $_backup_target; + $this->config->lang_target = $_backup_lang; + $this->config->lang_prefix = $_backup_langPrefix; + + $this->placeholder->remove('Module_name'); + $this->placeholder->remove('Module'); + $this->placeholder->remove('module'); + $this->placeholder->remove('module.version'); + $this->placeholder->remove('module_version'); + + return $module; + } + + return null; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Infusion.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Infusion.php new file mode 100644 index 000000000..50629da11 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Infusion.php @@ -0,0 +1,435 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFive; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\ProviderInterface as Provider; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\DispatcherInterface as Dispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\TemplateInterface as Template; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\HelperInterface as Helper; +use VDM\Joomla\Componentbuilder\Interfaces\Architecture\Module\MainXMLInterface as MainXML; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface as Data; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HeaderInterface as Header; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\GetScriptInterface as InstallScript; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Componentbuilder\Compiler\Creator\FieldsetExtension; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Methods; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Componentbuilder\Interfaces\Module\InfusionInterface; + + +/** + * Joomla 5 module Infusion Class + * + * @since 5.1.2 + */ +final class Infusion implements InfusionInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Provider Class. + * + * @var Provider + * @since 5.1.2 + */ + protected Provider $provider; + + /** + * The Dispatcher Class. + * + * @var Dispatcher + * @since 5.1.2 + */ + protected Dispatcher $dispatcher; + + /** + * The Template Class. + * + * @var Template + * @since 5.1.2 + */ + protected Template $template; + + /** + * The Helper Class. + * + * @var Helper + * @since 5.1.2 + */ + protected Helper $helper; + + /** + * The MainXML Class. + * + * @var MainXML + * @since 5.1.2 + */ + protected MainXML $mainxml; + + /** + * The ModuleData Class. + * + * @var Data + * @since 5.1.2 + */ + protected Data $data; + + /** + * The Header Class. + * + * @var Header + * @since 5.1.2 + */ + protected Header $header; + + /** + * The Event Class. + * + * @var Event + * @since 5.1.2 + */ + protected Event $event; + + /** + * The Install Class. + * + * @var InstallScript + * @since 5.1.2 + */ + protected InstallScript $installscript; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.2 + */ + protected ContentMulti $contentmulti; + + /** + * The FieldsetExtension Class. + * + * @var FieldsetExtension + * @since 5.1.2 + */ + protected FieldsetExtension $fieldsetextension; + + /** + * The Methods Class. + * + * @var Methods + * @since 5.1.2 + */ + protected Methods $methods; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Provider $provider The Provider Class. + * @param Dispatcher $dispatcher The Dispatcher Class. + * @param Template $template The Template Class. + * @param Helper $helper The Helper Class. + * @param MainXML $mainxml The MainXML Class. + * @param Data $data The ModuleData Class. + * @param Header $header The Header Class. + * @param Event $event The Event Class. + * @param InstallScript $installscript The GetScript Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * @param FieldsetExtension $fieldsetextension The FieldsetExtension Class. + * @param Methods $methods The Methods Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Provider $provider, Dispatcher $dispatcher, + Template $template, Helper $helper, MainXML $mainxml, + Data $data, Header $header, Event $event, + InstallScript $installscript, ContentMulti $contentmulti, + FieldsetExtension $fieldsetextension, Methods $methods) + { + $this->config = $config; + $this->provider = $provider; + $this->dispatcher = $dispatcher; + $this->template = $template; + $this->helper = $helper; + $this->mainxml = $mainxml; + $this->data = $data; + $this->header = $header; + $this->event = $event; + $this->installscript = $installscript; + $this->contentmulti = $contentmulti; + $this->fieldsetextension = $fieldsetextension; + $this->methods = $methods; + } + + /** + * Infuse the module data into the content. + * + * @return void + * @since 5.1.2 + */ + public function set(): void + { + if (!$this->data->exists()) + { + return; + } + + foreach ($this->data->get() as $module) + { + if (!ObjectHelper::check($module)) + { + continue; + } + + $this->triggerBeforeInfusionEvent($module); + $this->setModuleConfiguration($module); + $this->setProviderCode($module); + $this->setDispatcherCode($module); + $this->setDynamicGets($module); + $this->setHelperCode($module); + $this->setDefaultTemplates($module); + $this->setInstallScript($module); + $this->setFieldsets($module); + $this->setMainXml($module); + $this->triggerAfterInfusionEvent($module); + } + } + + /** + * Set core configuration from module data. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setModuleConfiguration(object $module): void + { + $this->config->build_target = $module->key; + $this->config->lang_target = $module->key; + $this->config->set('lang_prefix', $module->lang_prefix); + } + + /** + * Set the provider provider code. + * + * @param object $module The module object being processed. + * + * @return void + * @since 5.1.2 + */ + protected function setProviderCode($module): void + { + $header = trim((string) ($this->header->get('module.provider.header', $module->class_name) ?? '')); + if ($header !== '') + { + $header = PHP_EOL . PHP_EOL . $header; + } + $this->contentmulti->set("{$module->key}|PROVIDER_CLASS_HEADER", $header); + + $providerContent = $this->provider->get($module); + $this->contentmulti->set("{$module->key}|PROVIDER_CLASS", $providerContent); + } + + /** + * Set dispatcher-generated module code. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDispatcherCode(object $module): void + { + $header = trim((string) ($this->header->get('module.dispatcher.header', $module->class_name) ?? '')); + if ($header !== '') + { + $header = PHP_EOL . PHP_EOL . $header; + } + $this->contentmulti->set("{$module->key}|DISPATCHER_CLASS_HEADER", $header); + + $code = $this->dispatcher->get($module); + $this->contentmulti->set("{$module->key}|DISPATCHER_CLASS", $code); + } + + /** + * Set dynamically generated get methods (dynamicGets). + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDynamicGets(object $module): void + { + if ($module->custom_get) + { + $header = trim((string) ($this->header->get('module.dynamicgets.header', $module->class_name) ?? '')); + if ($header !== '') + { + $header = PHP_EOL . PHP_EOL . $header; + } + $this->contentmulti->set("{$module->key}|DYNAMICGETS_HEADER", $header); + + $code = $this->methods->get($module, $module->key); + $this->contentmulti->set("{$module->key}|DYNAMICGETS", $code); + } + } + + /** + * Set helper class code if enabled. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setHelperCode(object $module): void + { + if ($module->add_class_helper >= 1) + { + $header = trim((string) ($this->header->get('module.helper.header', $module->class_name) ?? '')); + $header .= $this->helper->header($module); + if (!empty($header)) + { + $header = PHP_EOL . PHP_EOL . trim($header); + } + $this->contentmulti->set("{$module->key}|HELPER_CLASS_HEADER", $header); + + $code = $this->helper->get($module); + $this->contentmulti->set("{$module->key}|HELPER_CLASS", $code); + } + } + + /** + * Set default and extra templates. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDefaultTemplates(object $module): void + { + $header = trim((string) ($this->header->get('module.default.template.header', $module->class_name) ?? '')); + if ($header !== '') + { + $header = PHP_EOL . PHP_EOL . $header; + } + $this->contentmulti->set("{$module->key}|MODDEFAULT_HEADER", $header); + + $header_code = $this->template->header($module); + $this->contentmulti->set("{$module->key}|MODDEFAULT_HEADER_CODE", $header_code); + + $code = $this->template->default($module, $module->key); + $this->contentmulti->set("{$module->key}|MODDEFAULT", $code); + + $this->template->extra($module); + } + + /** + * Set install script content if required. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setInstallScript(object $module): void + { + if ($module->add_install_script) + { + $this->contentmulti->set("{$module->key}|INSTALLCLASS", + $this->installscript->get($module)); + } + } + + /** + * Set all fieldset content based on form files. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setFieldsets(object $module): void + { + if (!isset($module->form_files) || !ArrayHelper::check($module->form_files)) + { + return; + } + + foreach ($module->form_files as $file => $files) + { + foreach ($files as $field_name => $fieldsets) + { + foreach ($fieldsets as $fieldset => $fields) + { + $key = "{$module->key}|FIELDSET_{$file}{$field_name}{$fieldset}"; + $content = $this->fieldsetextension->get($module, $fields); + $this->contentmulti->set($key, $content); + } + } + } + } + + /** + * Set main XML configuration content. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setMainXml(object $module): void + { + $this->contentmulti->set("{$module->key}|MAINXML", $this->mainxml->get($module)); + } + + /** + * Trigger before-infusion event. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function triggerBeforeInfusionEvent(object &$module): void + { + $this->event->trigger('jcb_ce_onBeforeInfuseModuleData', [&$module]); + } + + /** + * Trigger after-infusion event. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function triggerAfterInfusionEvent(object &$module): void + { + $this->event->trigger('jcb_ce_onAfterInfuseModuleData', [&$module]); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Structure.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Structure.php new file mode 100644 index 000000000..981fb318d --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/Structure.php @@ -0,0 +1,1264 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFive; + + +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface as Module; +use VDM\Joomla\Componentbuilder\Compiler\Component; +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Registry; +use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Counter; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Folder; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\File; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Files; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Builder\TemplateData; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\FileHelper; +use VDM\Joomla\Componentbuilder\Interfaces\Module\StructureInterface; + + +/** + * Joomla Module Structure Builder Class + * + * @since 5.1.2 + */ +final class Structure implements StructureInterface +{ + /** + * The Data Class. + * + * @var Module + * @since 5.1.2 + */ + protected Module $module; + + /** + * The Component Class. + * + * @var Component + * @since 5.1.2 + */ + protected Component $component; + + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Registry Class. + * + * @var Registry + * @since 5.1.2 + */ + protected Registry $registry; + + /** + * The Dispenser Class. + * + * @var Dispenser + * @since 5.1.2 + */ + protected Dispenser $dispenser; + + /** + * The EventInterface Class. + * + * @var Event + * @since 5.1.2 + */ + protected Event $event; + + /** + * The Counter Class. + * + * @var Counter + * @since 5.1.2 + */ + protected Counter $counter; + + /** + * The Folder Class. + * + * @var Folder + * @since 5.1.2 + */ + protected Folder $folder; + + /** + * The File Class. + * + * @var File + * @since 5.1.2 + */ + protected File $file; + + /** + * The Files Class. + * + * @var Files + * @since 5.1.2 + */ + protected Files $files; + + /** + * The TemplateData Class. + * + * @var TemplateData + * @since 5.1.2 + */ + protected TemplateData $templatedata; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.0.0 + */ + protected Placeholder $placeholder; + + /** + * The Namespace Prefix + * + * @var string + * @since 5.0.0 + */ + protected string $NamespacePrefix; + + /** + * The Component Namespace (in code) + * + * @var string + * @since 3.2.0 + */ + protected string $ComponentNamespace; + + /** + * Constructor. + * + * @param Module $module The Data Class. + * @param Component $component The Component Class. + * @param Config $config The Config Class. + * @param Registry $registry The Registry Class. + * @param Dispenser $dispenser The Dispenser Class. + * @param Event $event The EventInterface Class. + * @param Counter $counter The Counter Class. + * @param Folder $folder The Folder Class. + * @param File $file The File Class. + * @param Files $files The Files Class. + * @param TemplateData $templatedata The TemplateData Class. + * @param Placeholder $placeholder The Placeholder Class. + * + * @since 5.1.2 + */ + public function __construct(Module $module, Component $component, Config $config, + Registry $registry, Dispenser $dispenser, Event $event, + Counter $counter, Folder $folder, File $file, + Files $files, TemplateData $templatedata, Placeholder $placeholder) + { + $this->module = $module; + $this->component = $component; + $this->config = $config; + $this->registry = $registry; + $this->dispenser = $dispenser; + $this->event = $event; + $this->counter = $counter; + $this->folder = $folder; + $this->file = $file; + $this->files = $files; + $this->templatedata = $templatedata; + $this->placeholder = $placeholder; + + // set some global values + $this->NamespacePrefix = $this->placeholder->get('NamespacePrefix'); + $this->ComponentNamespace = $this->placeholder->get('ComponentNamespace'); + } + + /** + * Build the Modules files, folders, url's and config + * + * @return void + * @since 5.1.2 + */ + public function build() + { + if ($this->module->exists()) + { + $component_context = $this->config->component_context; + $modules = $this->module->get(); + + // Trigger Event: jcb_ce_onBeforeSetModules + $this->event->trigger( + 'jcb_ce_onBeforeBuildModules', + array(&$component_context, &$modules) + ); + + foreach ($modules as $module) + { + if (ObjectHelper::check($module) + && isset($module->folder_name) + && StringHelper::check($module->folder_name)) + { + // module path + $this->modulePath($module); + + // set the module paths + $this->registry->set('dynamic_paths.' . $module->key, $module->folder_path); + + // make sure there is no old build + $this->folder->remove($module->folder_path); + + // create the main module folder + $this->folder->create($module->folder_path); + + // set service provider class file + $this->setServiceProviderClassFile($module); + + // set dispatcher class file + $this->setDispatcherClassFile($module); + + // create the dynamic gets file + $this->setDynamicGets($module); + + // set helper file + $this->setHelperFile($module); + + // set main xml file + $this->setMainXmlFile($module); + + // set tmpl folder + $this->folder->create($module->folder_path . '/tmpl'); + + // set default file + $this->setDefaultFile($module); + + // set custom default files + $this->setTemplateFiles($module); + + // set install script if needed + $this->setInstallScript($module); + + // set readme if found + $this->setReadme($module); + + // set the CSS and JavaScript in form + $this->setCssJsForm($module); + + // set rules folders if needed + if (isset($module->fields_rules_paths) + && $module->fields_rules_paths == 2) + { + // create rules folder + $this->folder->create($module->folder_path . '/src/Rule'); + + // create fields folder + $this->folder->create($module->folder_path . '/src/Field'); + } + + // set forms folder/files if needed + $this->setForms($module); + + // set SQL stuff if needed + $this->setSQL($module); + + // create the language folder + $this->folder->create($module->folder_path . '/language'); + + // also create the lang tag folder + $this->folder->create( + $module->folder_path . '/language/' . $this->config->get('lang_tag', 'en-GB') + ); + + // check if this module has files + $this->setFiles($module); + + // check if this module has folders + $this->setFolders($module); + + // check if this module has urls + $this->setUrls($module); + } + } + } + } + + /** + * get the module xml template + * + * @param object $module The module object + * + * @return string + * @since 5.1.2 + */ + protected function getXML(object $module): string + { + $xml = ''; + $xml .= PHP_EOL . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . $module->lang_prefix . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('BUILDDATE') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('AUTHOR') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('AUTHOREMAIL') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('AUTHORWEBSITE') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('COPYRIGHT') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('LICENSE') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . $module->module_version . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . "{$this->NamespacePrefix}\\Module\\{$module->namespace}" . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . $module->lang_prefix . '_XML_DESCRIPTION'; + $xml .= Placefix::_h('MAINXML'); + $xml .= PHP_EOL . ''; + + return $xml; + } + + /** + * get the module admin custom script field + * + * @param object $module + * @param array $fieldScriptBucket + * + * @return string + * @since 5.1.2 + * + */ + protected function getCustomScriptField(object $module, array $fieldScriptBucket): string + { + $form_field_class = []; + $form_field_class[] = Placefix::_h('BOM') . PHP_EOL; + $form_field_class[] = PHP_EOL . "use Joomla\CMS\Form\FormField;"; + $form_field_class[] = "use Joomla\CMS\Factory;"; + $form_field_class[] = PHP_EOL . "//" . Line::_(__Line__, __Class__) + . " No direct access to this file"; + $form_field_class[] = "defined('_JEXEC') or die('Restricted access');"; + $form_field_class[] = PHP_EOL + . "class {$module->class_name}engine extends FormField"; + $form_field_class[] = "{"; + $form_field_class[] = Indent::_(1) + . "protected \$type = '{$module->code_name}engine';"; + $form_field_class[] = PHP_EOL . Indent::_(1) + . "protected function getLabel()"; + $form_field_class[] = Indent::_(1) . "{"; + $form_field_class[] = Indent::_(2) . "return;"; + $form_field_class[] = Indent::_(1) . "}"; + $form_field_class[] = PHP_EOL . Indent::_(1) + . "protected function getInput()"; + $form_field_class[] = Indent::_(1) . "{"; + $form_field_class[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__) + . " Get the document"; + $form_field_class[] = Indent::_(2) + . "\$document = Factory::getApplication()->getDocument();"; + $form_field_class[] = implode(PHP_EOL, $fieldScriptBucket); + $form_field_class[] = Indent::_(2) . "return; // noting for now :)"; + $form_field_class[] = Indent::_(1) . "}"; + $form_field_class[] = "}"; + + return implode(PHP_EOL, $form_field_class); + } + + /** + * Set the module path + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function modulePath(object &$module): void + { + $module->folder_path = $this->config->get( + 'compiler_path', JPATH_ADMINISTRATOR . '/components/com_componentbuilder/compiler' + ) . '/' . $module->folder_name; + } + + /** + * Set the service provider class file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setServiceProviderClassFile(object $module): void + { + // create services folder + $this->folder->create($module->folder_path . '/services'); + + $file_details = [ + 'path' => $module->folder_path . '/services/provider.php', + 'name' => 'provider.php', + 'zip' => 'services/provider.php' + ]; + + $this->file->write( + $file_details['path'], + 'files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + + /** + * set the dispatcher class path + * + * @param object $module The Module object + * + * @return void + * @since 5.1.2 + */ + protected function setDispatcherClassFile(object $module): void + { + // create extension folder + $this->folder->create($module->folder_path . '/src/Dispatcher'); + + $file_details = [ + 'path' => $module->folder_path . '/src/Dispatcher/Dispatcher.php', + 'name' => 'Dispatcher.php', + 'zip' => 'src/Dispatcher/Dispatcher.php' + ]; + + $this->file->write( + $file_details['path'], + 'NamespacePrefix}\\Module\\{$module->namespace}\\{$module->target_client_namespace}\\Dispatcher;" . + Placefix::_h('DISPATCHER_CLASS_HEADER') . + PHP_EOL . PHP_EOL . '// No direct access to this file' . PHP_EOL . + "defined('_JEXEC') or die('Restricted access');" . + PHP_EOL . PHP_EOL . + Placefix::_h('DISPATCHER_CLASS') + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + + /** + * Set the dynamic gets file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDynamicGets(object $module): void + { + if ($module->custom_get) + { + // create helper folder + $this->folder->create($module->folder_path . '/src/Helper/'); + + $file_details = [ + 'path' => "{$module->folder_path}/src/Helper/{$module->class_data_name}.php", + 'name' => '{$module->class_data_name}.php', + 'zip' => "src/Helper/{$module->class_data_name}.php" + ]; + + $this->file->write( + $file_details['path'], + 'NamespacePrefix}\\Module\\{$module->namespace}\\{$module->target_client_namespace}\\Helper;" . + Placefix::_h('DYNAMICGETS_HEADER') . + PHP_EOL . PHP_EOL . '// No direct access to this file' . PHP_EOL . + "defined('_JEXEC') or die('Restricted access');" . + PHP_EOL . PHP_EOL . '/**' . PHP_EOL . ' * Module ' . $module->official_name . ' Data Helper' + . PHP_EOL . ' */' . PHP_EOL . "final class " . $module->class_data_name . " implements DatabaseAwareInterface" + . PHP_EOL . "{" + + . PHP_EOL . Indent::_(1) . 'use DatabaseAwareTrait;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' *' . Line::_(__LINE__, __CLASS__) . ' The module instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var \stdClass' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $module;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * The application instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var CMSApplicationInterface' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $app;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * The input instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var Input' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $input;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * The params instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var Registry' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $params;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * The template instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var string' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $template;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * Module ' . $module->official_name . ' constructor.' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @param array $config The config' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'public function __construct(array $config)' + . PHP_EOL . Indent::_(1) . '{' + . PHP_EOL . Indent::_(2) . '$this->module = $config[\'module\'] ?? null;' + . PHP_EOL . Indent::_(2) . '$this->app = $config[\'app\'] ?? null;' + . PHP_EOL . Indent::_(2) . '$this->input = $config[\'input\'] ?? null;' + . PHP_EOL . Indent::_(2) . '$this->params = $config[\'params\'] ?? null;' + . PHP_EOL . Indent::_(2) . '$this->template = $config[\'template\'] ?? null;' + . PHP_EOL . Indent::_(1) . '}' + + . Placefix::_h('DYNAMICGETS') + + . PHP_EOL . "}" + . PHP_EOL + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the helper file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setHelperFile(object $module): void + { + if ($module->add_class_helper >= 1) + { + // create helper folder + $this->folder->create($module->folder_path . '/src/Helper/'); + + $file_details = [ + 'path' => "{$module->folder_path}/src/Helper/{$module->class_helper_name}.php", + 'name' => '{$module->class_helper_name}.php', + 'zip' => "src/Helper/{$module->class_helper_name}.php" + ]; + + $this->file->write( + $file_details['path'], + 'NamespacePrefix}\\Module\\{$module->namespace}\\{$module->target_client_namespace}\\Helper;" . + Placefix::_h('HELPER_CLASS_HEADER') . + PHP_EOL . PHP_EOL . '// No direct access to this file' . PHP_EOL . + "defined('_JEXEC') or die('Restricted access');" . + PHP_EOL . Placefix::_h('HELPER_CLASS') + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the main XML file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setMainXmlFile(object $module): void + { + $file_details = [ + 'path' => $module->folder_path . '/' . $module->file_name . '.xml', + 'name' => $module->file_name . '.xml', + 'zip' => $module->file_name . '.xml' + ]; + + $this->file->write( + $file_details['path'], + $this->getXML($module) + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + + /** + * Set the main default template file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDefaultFile(object $module): void + { + $file_details = [ + 'path' => $module->folder_path . '/tmpl/default.php', + 'name' => 'default.php', + 'zip' => 'tmpl/default.php' + ]; + + $this->file->write( + $file_details['path'], + '' . + Placefix::_h('MODDEFAULT') + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + + /** + * Set the additional template files + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setTemplateFiles(object $module): void + { + if (($data_ = $this->templatedata-> + get($module->key . '.' . $module->code_name)) !== null) + { + foreach ($data_ as $template => $data) + { + $file_details = [ + 'path' => $module->folder_path . "/tmpl/default_{$template}.php", + 'name' => "default_{$template}.php", + 'zip' => "tmpl/default_{$template}.php" + ]; + + $this->file->write( + $file_details['path'], + '' . + Placefix::_h(StringHelper::safe("MODDEFAULT_{$template}", 'U')) + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + } + + /** + * Set the install script file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setInstallScript(object $module): void + { + if ($module->add_install_script) + { + $file_details = [ + 'path' => $module->folder_path . '/script.php', + 'name' => 'script.php', + 'zip' => 'script.php' + ]; + + $this->file->write( + $file_details['path'], + 'files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the readme file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setReadme(object $module): void + { + if ($module->addreadme) + { + $file_details = [ + 'path' => $module->folder_path . '/README.md', + 'name' => 'README.md', + 'zip' => 'README.md' + ]; + + $this->file->write($file_details['path'], $module->readme); + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the css and javascript in form + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setCssJsForm(object $module): void + { + // check if we have custom fields needed for scripts + $field_script_bucket = []; + + // add any css from the fields + $this->setCssForm($module, $field_script_bucket); + + // add any JavaScript from the fields + $this->setJsForm($module, $field_script_bucket); + + // add the custom script field + if (!empty($field_script_bucket)) + { + $file_details = [ + 'path' => $module->folder_path . "/src/Field/{$module->class_name}engine.php", + 'name' => "{$module->class_name}engine.php", + 'zip' => "src/Field/{$module->class_name}engine.php" + ]; + + $this->file->write( + $file_details['path'], + $this->getCustomScriptField( + $module, + $field_script_bucket + ) + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the css in form + * + * @param object $module + * @param array $bucket + * + * @return void + * @since 5.1.2 + */ + protected function setCssForm(object $module, array &$bucket): void + { + if (($css = $this->dispenser->get('css_view', $module->key)) !== null && + StringHelper::check($css)) + { + // make sure this script does not have PHP + if (strpos((string) $css, 'folder->create($module->folder_path . '/assets/css'); + + // add the CSS file + $file_details = [ + 'path' => $module->folder_path . "/assets/css/{$module->class_name}engine.css", + 'name' => "{$module->class_name}engine.css", + 'zip' => "assets/css/{$module->class_name}engine.css" + ]; + + $this->file->write( + $file_details['path'], + Placefix::_h('BOM') . PHP_EOL + . PHP_EOL . $css + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + + // add the field script + $bucket[] = Indent::_(2) . "//" + . Line::_(__Line__, __Class__) . " Custom CSS"; + $bucket[] = Indent::_(2) + . "Html::_('stylesheet', '" + . "modules/{$module->folder_name}" + . "/assets/css/{$module->class_name}engine.css', ['version' => 'auto', 'relative' => true]);"; + } + } + } + + /** + * Set the javascript in form + * + * @param object $module + * @param array $bucket + * + * @return void + * @since 5.1.2 + */ + protected function setJsForm(object $module, array &$bucket): void + { + if (($javascript = $this->dispenser->get('view_footer', $module->key)) !== null + && StringHelper::check($javascript)) + { + // make sure this script does not have PHP + if (strpos((string) $javascript, 'folder->create($module->folder_path . '/assets/js'); + + // add the CSS file + $file_details = [ + 'path' => $module->folder_path . "/assets/js/{$module->class_name}engine.js", + 'name' => "{$module->class_name}engine.js", + 'zip' => "assets/js/{$module->class_name}engine.js" + ]; + + $this->file->write( + $file_details['path'], + Placefix::_h('BOM') . PHP_EOL + . PHP_EOL . $javascript + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + + // add the field script + $bucket[] = Indent::_(2) . "//" + . Line::_(__Line__, __Class__) . " Custom JS"; + $bucket[] = Indent::_(2) + . "Html::_('script', '" + . "/modules/{$module->folder_name}" + . "/assets/js/{$module->class_name}engine.js', ['version' => 'auto', 'relative' => true]);"; + } + } + } + + /** + * Set the form folders and files as needed + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setForms(object $module): void + { + if (isset($module->form_files) + && ArrayHelper::check($module->form_files)) + { + // create forms folder + $this->folder->create($module->folder_path . '/forms'); + + // set the template files + foreach ($module->form_files as $file => $fields) + { + // set file details + $file_details = [ + 'path' => $module->folder_path . '/forms/' . $file . '.xml', + 'name' => $file . '.xml', + 'zip' => 'forms/' . $file . '.xml' + ]; + + // build basic XML + $xml = ''; + $xml .= PHP_EOL . ''; + + // search if we must add the component path + $add_component_path = false; + foreach ($fields as $field_name => $fieldsets) + { + if (!$add_component_path) + { + foreach ($fieldsets as $fieldset => $field) + { + if (!$add_component_path + && isset($module->fieldsets_paths[$file . $field_name . $fieldset]) + && $module->fieldsets_paths[$file . $field_name . $fieldset] == 1) + { + $add_component_path = true; + } + } + } + } + + // only add if part of the component field types path is required + if ($add_component_path) + { + $xml .= PHP_EOL . ''; + } + else + { + $xml .= PHP_EOL . '
'; + } + + // add the fields + foreach ($fields as $field_name => $fieldsets) + { + // check if we have an double fields naming set + $field_name_inner = ''; + $field_name_outer = $field_name; + if (strpos((string)$field_name, '.') !== false) + { + $field_names = explode('.', (string)$field_name); + if (count((array)$field_names) == 2) + { + $field_name_outer = $field_names[0]; + $field_name_inner = $field_names[1]; + } + } + $xml .= PHP_EOL . Indent::_(1) + . ''; + foreach ($fieldsets as $fieldset => $field) + { + // default to the field set name + $label = $fieldset; + if (isset($module->fieldsets_label[$file . $field_name . $fieldset])) + { + $label = $module->fieldsets_label[$file . $field_name . $fieldset]; + } + + // add path to module rules and custom fields + if (isset($module->fieldsets_paths[$file . $field_name . $fieldset]) + && ($module->fieldsets_paths[$file . $field_name . $fieldset] == 2 + || $module->fieldsets_paths[$file . $field_name . $fieldset] == 3)) + { + if ($module->target == 2) + { + if (!isset($module->add_rule_path[$file . $field_name . $fieldset])) + { + $module->add_rule_path[$file . $field_name . $fieldset] = + "{$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\Administrator\\Rule"; + } + + if (!isset($module->add_field_path[$file . $field_name . $fieldset])) + { + $module->add_field_path[$file . $field_name . $fieldset] = + "{$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\Administrator\\Field"; + } + } + else + { + if (!isset($module->add_rule_path[$file . $field_name . $fieldset])) + { + $module->add_rule_path[$file . $field_name . $fieldset] = + "{$this->NamespacePrefix}\\Module\\{$module->namespace}\\Rule"; + } + + if (!isset($module->add_field_path[$file . $field_name . $fieldset])) + { + $module->add_field_path[$file . $field_name . $fieldset] = + "{$this->NamespacePrefix}\\Module\\{$module->namespace}\\Field"; + } + } + } + + // add path to module rules and custom fields + if (isset($module->add_rule_path[$file . $field_name . $fieldset]) + || isset($module->add_field_path[$file . $field_name . $fieldset])) + { + + $xml .= PHP_EOL . Indent::_(1) . ''; + + $xml .= PHP_EOL . Indent::_(1) . '
add_rule_path[$file . $field_name . $fieldset])) + { + $xml .= PHP_EOL . Indent::_(2) + . 'addruleprefix="' . $module->add_rule_path[$file . $field_name . $fieldset] . '"'; + } + + if (isset($module->add_field_path[$file . $field_name . $fieldset])) + { + $xml .= PHP_EOL . Indent::_(2) + . 'addfieldprefix="' . $module->add_field_path[$file . $field_name . $fieldset] . '"'; + } + + $xml .= PHP_EOL . Indent::_(1) . '>'; + } + else + { + $xml .= PHP_EOL . Indent::_(1) . '
'; + } + + // check if we have an inner field set + if (StringHelper::check($field_name_inner)) + { + $xml .= PHP_EOL . Indent::_(1) + . ''; + } + + // add the placeholder of the fields + $xml .= Placefix::_h('FIELDSET_' . $file . $field_name . $fieldset); + + // check if we have an inner field set + if (StringHelper::check($field_name_inner)) + { + $xml .= PHP_EOL . Indent::_(1) + . ''; + } + $xml .= PHP_EOL . Indent::_(1) + . '
'; + } + $xml .= PHP_EOL . Indent::_(1) . ''; + } + $xml .= PHP_EOL . ''; + + // add xml to file + $this->file->write($file_details['path'], $xml); + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + } + + /** + * Set the sql stuff + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setSQL(object $module): void + { + if ($module->add_sql || $module->add_sql_uninstall) + { + // create SQL folder + $this->folder->create($module->folder_path . '/sql'); + + // create mysql folder + $this->folder->create( + $module->folder_path . '/sql/mysql' + ); + + // now set the install file + if ($module->add_sql) + { + $this->file->write( + $module->folder_path . '/sql/mysql/install.sql', + $module->sql + ); + + // count the file created + $this->counter->file++; + } + + // now set the uninstall file + if ($module->add_sql_uninstall) + { + $this->file->write( + $module->folder_path + . '/sql/mysql/uninstall.sql', + $module->sql_uninstall + ); + + // count the file created + $this->counter->file++; + } + } + } + + /** + * Set the files + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setFiles(object $module): void + { + if (isset($module->files) + && ArrayHelper::check($module->files)) + { + // add to component files + foreach ($module->files as $file) + { + // set the pathfinder + $file['target_type'] = $module->target_type; + $file['target_id'] = $module->id; + + $this->component->appendArray('files', $file); + } + } + } + + /** + * Set the folders + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setFolders(object $module): void + { + if (isset($module->folders) + && ArrayHelper::check($module->folders)) + { + // add to component folders + foreach ($module->folders as $folder) + { + // set the pathfinder + $folder['target_type'] = $module->target_type; + $folder['target_id'] = $module->id; + + $this->component->appendArray('folders', $folder); + } + } + } + + /** + * Set the urls + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setUrls(object &$module): void + { + if (isset($module->urls) + && ArrayHelper::check($module->urls)) + { + // add to component urls + foreach ($module->urls as &$url) + { + // should we add the local folder + if (isset($url['type']) && $url['type'] > 1 + && isset($url['url']) + && StringHelper::check($url['url'])) + { + // set file name + $fileName = basename((string)$url['url']); + + // get the file contents + $data = FileHelper::getContent( + $url['url'] + ); + + // build sub path + if (strpos($fileName, '.js') !== false) + { + $path = '/assets/js'; + } + elseif (strpos($fileName, '.css') !== false) + { + $path = '/assets/css'; + } + else + { + $path = ''; + } + + // create sub media path if not set + $this->folder->create( + $module->folder_path . $path + ); + + // set the path to module file + $url['path'] = $module->folder_path . $path + . '/' . $fileName; // we need this for later + + // write data to path + $this->file->write($url['path'], $data); + + // count the file created + $this->counter->file++; + } + } + } + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFive/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Data.php new file mode 100644 index 000000000..fdf25fdce --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Data.php @@ -0,0 +1,1075 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFour; + + +use Joomla\CMS\Factory; +use Joomla\CMS\Filter\OutputFilter; +use Joomla\Database\DatabaseInterface; +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Customcode; +use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Componentbuilder\Compiler\Language; +use VDM\Joomla\Componentbuilder\Compiler\Field; +use VDM\Joomla\Componentbuilder\Compiler\Field\Name as Fieldname; +use VDM\Joomla\Componentbuilder\Compiler\Model\Filesfolders; +use VDM\Joomla\Componentbuilder\Compiler\Model\Libraries; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Data as Dynamicget; +use VDM\Joomla\Componentbuilder\Compiler\Templatelayout\Data as Templatelayout; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\String\ClassfunctionHelper; +use VDM\Joomla\Utilities\JsonHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\GetHelper; +use VDM\Joomla\Utilities\GuidHelper; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface; + + +/** + * Joomla Module Data Class + * + * @since 5.1.2 + */ +final class Data implements ModuleDataInterface +{ + /** + * Compiler Joomla Plugins Data + * + * @var array + * @since 3.2.0 + */ + protected array $data = []; + + /** + * Tracking GUID index + * + * @var array + * @since 5.0.4 + */ + protected array $index = []; + + /** + * The Config Class. + * + * @var Config + * @since 3.2.0 + */ + protected Config $config; + + /** + * The Customcode Class. + * + * @var Customcode + * @since 3.2.0 + */ + protected Customcode $customcode; + + /** + * The Gui Class. + * + * @var Gui + * @since 3.2.0 + */ + protected Gui $gui; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 3.2.0 + */ + protected Placeholder $placeholder; + + /** + * The Language Class. + * + * @var Language + * @since 3.2.0 + */ + protected Language $language; + + /** + * The Field Class. + * + * @var Field + * @since 3.2.0 + */ + protected Field $field; + + /** + * The Name Class. + * + * @var Fieldname + * @since 3.2.0 + */ + protected Fieldname $fieldname; + + /** + * The Filesfolders Class. + * + * @var Filesfolders + * @since 3.2.0 + */ + protected Filesfolders $filesfolders; + + /** + * The Libraries Class. + * + * @var Libraries + * @since 3.2.0 + */ + protected Libraries $libraries; + + /** + * The Data Class. + * + * @var Dynamicget + * @since 3.2.0 + */ + protected Dynamicget $dynamicget; + + /** + * The Data Class. + * + * @var Templatelayout + * @since 3.2.0 + */ + protected Templatelayout $templatelayout; + + /** + * Joomla Database Class. + * + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Customcode $customcode The Customcode Class. + * @param Gui $gui The Gui Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param Language $language The Language Class. + * @param Field $field The Field Class. + * @param Fieldname $fieldname The Name Class. + * @param Filesfolders $filesfolders The Filesfolders Class. + * @param Libraries $libraries The Libraries Class. + * @param Dynamicget $dynamicget The Data Class. + * @param Templatelayout $templatelayout The Data Class. + * @param DatabaseInterface $db The Joomla Database Class. + * + * @since 3.2.0 + */ + public function __construct(Config $config, Customcode $customcode, Gui $gui, + Placeholder $placeholder, Language $language, + Field $field, Fieldname $fieldname, + Filesfolders $filesfolders, Libraries $libraries, + Dynamicget $dynamicget, Templatelayout $templatelayout, + DatabaseInterface $db) + { + $this->config = $config; + $this->customcode = $customcode; + $this->gui = $gui; + $this->placeholder = $placeholder; + $this->language = $language; + $this->field = $field; + $this->fieldname = $fieldname; + $this->filesfolders = $filesfolders; + $this->libraries = $libraries; + $this->dynamicget = $dynamicget; + $this->templatelayout = $templatelayout; + $this->db = $db; + } + + /** + * Get the Joomla Module/s + * + * @param int|string|null $module The module id/guid + * + * @return object|array|null if ID|GUID found it returns object, if no ID|GUID given it returns all set + * @since 3.2.0 + */ + public function get($module = null) + { + if ($module === null && $this->exists()) + { + return $this->data; + } + elseif ($this->exists($module)) + { + $id = $this->index[$module]; + return $this->data[$id]; + } + + return null; + } + + /** + * Check if the Joomla Module/s exists + * + * @param int|string|null $module The module id|guid + * + * @return bool if ID|GUID found it returns true, if no ID|GUID given it returns true if any are set + * @since 3.2.0 + */ + public function exists($module = null): bool + { + if ($module === null) + { + return ArrayHelper::check($this->data); + } + elseif (isset($this->index[$module])) + { + return true; + } + + return $this->set($module); + } + + /** + * Set the module + * + * @param mixed $module The module ID/GUID + * + * @return bool true on success + * @since 5.0.4 + */ + public function set($module): bool + { + if (!GuidHelper::valid($module) && !is_numeric($module)) + { + return false; + } + elseif (isset($this->index[$module])) + { + return true; + } + + if (GuidHelper::valid($module)) + { + $query = $this->getQuery($module, 'guid'); + } + else + { + $query = $this->getQuery($module); + } + + $data = $this->getData($query); + + if ($data !== null) + { + $this->data[$data->id] = $data; + $this->index[$data->id] = $data->id; + $this->index[$data->guid] = $data->id; + + return true; + } + + return false; + } + + /** + * get current plugin data query + * + * @param mixed $value The plugin ID/GUID + * @param string $key The type of value + * + * @return string The plugin data query + * @since 5.0.4 + */ + private function getQuery($value, string $key = 'id') + { + // Create a new query object. + $query = $this->db->getQuery(true); + + $query->select('a.*'); + $query->select( + $this->db->quoteName( + array( + 'f.addfiles', + 'f.addfolders', + 'f.addfilesfullpath', + 'f.addfoldersfullpath', + 'f.addurls', + 'u.version_update', + 'u.id' + ), array( + 'addfiles', + 'addfolders', + 'addfilesfullpath', + 'addfoldersfullpath', + 'addurls', + 'version_update', + 'version_update_id' + ) + ) + ); + // from these tables + $query->from('#__componentbuilder_joomla_module AS a'); + $query->join( + 'LEFT', $this->db->quoteName( + '#__componentbuilder_joomla_module_updates', 'u' + ) . ' ON (' . $this->db->quoteName('a.guid') . ' = ' + . $this->db->quoteName('u.joomla_module') . ')' + ); + $query->join( + 'LEFT', $this->db->quoteName( + '#__componentbuilder_joomla_module_files_folders_urls', 'f' + ) . ' ON (' . $this->db->quoteName('a.guid') . ' = ' + . $this->db->quoteName('f.joomla_module') . ')' + ); + $query->where($this->db->quoteName('a.' . $key) . ' = ' . $this->db->quote($value)); + $query->where($this->db->quoteName('a.published') . ' >= 1'); + + return $query; + } + + /** + * get module data + * + * @param string $query The module query + * + * @return object|null The module data + * @since 5.0.4 + */ + private function getData($query): ?object + { + $this->db->setQuery($query); + $this->db->execute(); + if ($this->db->getNumRows()) + { + // get the module data + $module = $this->db->loadObject(); + $id = $module->id; + + // tweak system to set stuff to the module domain + $_backup_target = $this->config->build_target; + $_backup_lang = $this->config->lang_target; + $_backup_langPrefix = $this->config->lang_prefix; + + // set some keys + $module->target_type = 'M0dUl3'; + $module->key = $module->id . '_' . $module->target_type; + + // update to point to module + $this->config->build_target = $module->key; + $this->config->lang_target = $module->key; + + // set version if not set + if (empty($module->module_version)) + { + $module->module_version = '1.0.0'; + } + + // set target client + if ($module->target == 2) + { + $module->target_client = 'administrator'; + $module->target_client_namespace = 'Administrator'; + } + else + { + // default is site area + $module->target_client = 'site'; + $module->target_client_namespace = 'Site'; + } + + // set GUI mapper + $guiMapper = [ + 'table' => 'joomla_module', + 'id' => (int) $id, + 'type' => 'php' + ]; + + // update the name if it has dynamic values + $module->name = $this->placeholder->update_( + $this->customcode->update($module->name) + ); + + // set safe class function name + $module->code_name = ClassfunctionHelper::safe( + $module->name + ); + + // alias of code name + $module->class_name = ucfirst( + $module->code_name + ); + + // set module namespace + $module->namespace = $module->class_name; + + // set official name + $module->official_name = StringHelper::safe( + $module->name, 'W' + ); + $this->config->set('lang_prefix', 'MOD_' . strtoupper((string) $module->code_name)); + + // set lang prefix + $module->lang_prefix = $this->config->lang_prefix; + + // set module class name + $module->class_helper_name = ucfirst((string) $module->code_name) + . 'Helper'; + $module->class_data_name = ucfirst((string) $module->code_name) + . 'Data'; + + // set module install class name + $module->installer_class_name = 'mod_' . ucfirst( + (string) $module->code_name + ) . 'InstallerScript'; + + // set module folder name + $module->folder_name = 'mod_' . strtolower((string) $module->code_name); + + // set the zip name + $module->zip_name = $module->folder_name . '_v' . str_replace( + '.', '_', (string) $module->module_version + ) . '__J' . $this->config->joomla_version; + + // set module file name + $module->file_name = $module->folder_name; + + // set module context + $module->context = $module->file_name . '.' . $module->id; + + // set official_name lang strings + $this->language->set( + $module->key, $this->config->lang_prefix, $module->official_name + ); + + // set some placeholder for this module + $this->placeholder->set('Module_name', $module->official_name); + $this->placeholder->set('Module', ucfirst( + (string) $module->code_name + )); + $this->placeholder->set('module', strtolower( + (string) $module->code_name + )); + $this->placeholder->set('module.version', $module->module_version); + $this->placeholder->set('module_version', str_replace( + '.', '_', (string) $module->module_version + )); + // set description (TODO) add description field to module + if (!isset($module->description) + || !StringHelper::check( + $module->description + )) + { + $module->description = ''; + } + else + { + $module->description = $this->placeholder->update_( + $this->customcode->update($module->description) + ); + $this->language->set( + $module->key, $module->lang_prefix . '_DESCRIPTION', + $module->description + ); + $module->description = '

' . $module->description + . '

'; + } + + // get author name + $project_author = $this->config->project_author; + + // set the description + $module->xml_description = "

" . $module->official_name + . " (v." . $module->module_version + . ")

" + . $module->description . "

Created by " . trim( + (string) OutputFilter::cleanText($project_author) + ) . "
Development started " + . Factory::getDate($module->created)->format("jS F, Y") + . "

"; + + // set xml description + $this->language->set( + $module->key, $module->lang_prefix . '_XML_DESCRIPTION', + $module->xml_description + ); + + // update the readme if set + if ($module->addreadme == 1 && !empty($module->readme)) + { + $module->readme = $this->placeholder->update_( + $this->customcode->update(base64_decode((string) $module->readme)) + ); + } + else + { + $module->addreadme = 0; + unset($module->readme); + } + + // get the custom_get + $module->custom_get = (isset($module->custom_get) + && JsonHelper::check($module->custom_get)) + ? json_decode((string) $module->custom_get, true) : null; + + if (ArrayHelper::check($module->custom_get)) + { + $module->custom_get = $this->dynamicget->get( + $module->custom_get, $module->key, $module->key + ); + } + else + { + $module->custom_get = null; + } + + // set helper class details + if ($module->add_class_helper >= 1 + && StringHelper::check( + $module->class_helper_code + )) + { + if ($module->add_class_helper_header == 1 + && StringHelper::check( + $module->class_helper_header + )) + { + // set GUI mapper field + $guiMapper['field'] = 'class_helper_header'; + // base64 Decode code + $module->class_helper_header = PHP_EOL + . $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode( + (string) $module->class_helper_header + ) + ) + ), + $guiMapper + ) . PHP_EOL; + } + else + { + $module->add_class_helper_header = 0; + $module->class_helper_header = ''; + } + // set GUI mapper field + $guiMapper['field'] = 'class_helper_code'; + // base64 Decode code + $module->class_helper_code = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->class_helper_code) + ) + ), + $guiMapper + ); + // set class type + if ($module->add_class_helper == 2) + { + $module->class_helper_type = 'abstract class '; + } + else + { + $module->class_helper_type = 'class '; + } + } + else + { + $module->add_class_helper = 0; + $module->class_helper_code = ''; + $module->class_helper_header = ''; + } + + // base64 Decode layout_data + if (isset($module->layout_data) + && StringHelper::check($module->layout_data)) + { + // set GUI mapper field + $guiMapper['field'] = 'layout_data'; + $module->layout_data = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->layout_data) + ) + ), + $guiMapper + ); + + // check if we have template or layouts to load + $this->templatelayout->set( + $module->layout_data , $module->code_name + ); + } + else + { + $module->layout_data = ''; + } + + // base64 Decode mod_code + if (isset($module->mod_code) + && StringHelper::check($module->mod_code)) + { + // set GUI mapper field + $guiMapper['field'] = 'mod_code'; + $module->mod_code = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->mod_code) + ) + ), + $guiMapper + ); + + // check if we have template or layouts to load + $this->templatelayout->set( + $module->mod_code , $module->code_name + ); + } + else + { + $module->mod_code = "// get the module class sfx"; + $module->mod_code .= PHP_EOL + . "\$moduleclass_sfx = htmlspecialchars(\$params->get('moduleclass_sfx'), ENT_COMPAT, 'UTF-8');"; + $module->mod_code .= PHP_EOL . "// load the default Tmpl"; + $module->mod_code .= PHP_EOL + . "require JModuleHelper::getLayoutPath('mod_" + . strtolower((string) $module->code_name) + . "', \$params->get('layout', 'default'));"; + } + + // base64 Decode default header + if (isset($module->default_header) + && StringHelper::check( + $module->default_header + ) && $module->add_default_header == 1) + { + // set GUI mapper field + $guiMapper['field'] = 'default_header'; + $module->default_header = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->default_header) + ) + ), + $guiMapper + ); + } + else + { + $module->add_default_header = 0; + $module->default_header = ''; + } + + // base64 Decode default + if (isset($module->default) + && StringHelper::check($module->default)) + { + // set GUI mapper field + $guiMapper['field'] = 'default'; + $guiMapper['type'] = 'html'; + $module->default = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->default) + ) + ), + $guiMapper + ); + + // check if we have template or layouts to load + $this->templatelayout->set( + $module->default , $module->code_name + ); + } + else + { + $module->default = '

No Tmpl set

'; + } + + // start the config array + $module->config_fields = []; + // create the form arrays + $module->form_files = []; + $module->fieldsets_label = []; + $module->fieldsets_paths = []; + $module->add_rule_path = []; + $module->add_field_path = []; + // set global fields rule to default component path + $module->fields_rules_paths = 1; + // set the fields data + $module->fields = (isset($module->fields) + && JsonHelper::check($module->fields)) + ? json_decode((string) $module->fields, true) : null; + if (ArrayHelper::check($module->fields)) + { + // ket global key + $key = $module->key; + $dynamic_fields = array('fieldset' => 'basic', + 'fields_name' => 'params', + 'file' => 'config'); + foreach ($module->fields as $n => &$form) + { + if (isset($form['fields']) + && ArrayHelper::check( + $form['fields'] + )) + { + // make sure the dynamic_field is set to dynamic_value by default + foreach ( + $dynamic_fields as $dynamic_field => + $dynamic_value + ) + { + if (!isset($form[$dynamic_field]) + || !StringHelper::check( + $form[$dynamic_field] + )) + { + $form[$dynamic_field] = $dynamic_value; + } + else + { + if ('fields_name' === $dynamic_field + && strpos((string) $form[$dynamic_field], '.') + !== false) + { + $form[$dynamic_field] + = $form[$dynamic_field]; + } + else + { + $form[$dynamic_field] + = StringHelper::safe( + $form[$dynamic_field] + ); + } + } + } + // check if field is external form file + if (!isset($form['module']) || $form['module'] != 1) + { + // now build the form key + $unique = $form['file'] . $form['fields_name'] + . $form['fieldset']; + } + else + { + // now build the form key + $unique = $form['fields_name'] + . $form['fieldset']; + } + // set global fields rule path switches + if ($module->fields_rules_paths == 1 + && isset($form['fields_rules_paths']) + && $form['fields_rules_paths'] == 2) + { + $module->fields_rules_paths = 2; + } + // set where to path is pointing + $module->fieldsets_paths[$unique] + = $form['fields_rules_paths']; + // check for extra rule paths + if (isset($form['addrulepath']) + && ArrayHelper::check($form['addrulepath'])) + { + foreach ($form['addrulepath'] as $add_rule_path) + { + if (StringHelper::check($add_rule_path['path'])) + { + $module->add_rule_path[$unique] = $add_rule_path['path']; + } + } + } + // check for extra field paths + if (isset($form['addfieldpath']) + && ArrayHelper::check($form['addfieldpath'])) + { + foreach ($form['addfieldpath'] as $add_field_path) + { + if (StringHelper::check($add_field_path['path'])) + { + $module->add_field_path[$unique] = $add_field_path['path']; + } + } + } + // add the label if set to lang + if (isset($form['label']) + && StringHelper::check( + $form['label'] + )) + { + $module->fieldsets_label[$unique] + = $this->language->key($form['label']); + } + // build the fields + $form['fields'] = array_map( + function ($field) use ($key, $unique) { + // make sure the alias and title is 0 + $field['alias'] = 0; + $field['title'] = 0; + // set the field details + $this->field->set( + $field, $key, $key, $unique + ); + // update the default if set + if (StringHelper::check( + $field['custom_value'] + ) + && isset($field['settings'])) + { + if (($old_default + = GetHelper::between( + $field['settings']->xml, + 'default="', '"', false + )) !== false) + { + // replace old default + $field['settings']->xml + = str_replace( + 'default="' . $old_default + . '"', 'default="' + . $field['custom_value'] . '"', + (string) $field['settings']->xml + ); + } + else + { + // add the default (hmmm not ideal but okay it should work) + $field['settings']->xml + = 'default="' + . $field['custom_value'] . '" ' + . $field['settings']->xml; + } + } + unset($field['custom_value']); + + // return field + return $field; + }, array_values($form['fields']) + ); + // check if field is external form file + if (!isset($form['module']) || $form['module'] != 1) + { + // load the form file + if (!isset($module->form_files[$form['file']])) + { + $module->form_files[$form['file']] + = []; + } + if (!isset($module->form_files[$form['file']][$form['fields_name']])) + { + $module->form_files[$form['file']][$form['fields_name']] + = []; + } + if (!isset($module->form_files[$form['file']][$form['fields_name']][$form['fieldset']])) + { + $module->form_files[$form['file']][$form['fields_name']][$form['fieldset']] + = []; + } + // do some house cleaning (for fields) + foreach ($form['fields'] as $field) + { + // so first we lock the field name in + $this->fieldname->get( + $field, $module->key, $unique + ); + // add the fields to the global form file builder + $module->form_files[$form['file']][$form['fields_name']][$form['fieldset']][] + = $field; + } + // remove form + unset($module->fields[$n]); + } + else + { + // load the config form + if (!isset($module->config_fields[$form['fields_name']])) + { + $module->config_fields[$form['fields_name']] + = []; + } + if (!isset($module->config_fields[$form['fields_name']][$form['fieldset']])) + { + $module->config_fields[$form['fields_name']][$form['fieldset']] + = []; + } + // do some house cleaning (for fields) + foreach ($form['fields'] as $field) + { + // so first we lock the field name in + $this->fieldname->get( + $field, $module->key, $unique + ); + // add the fields to the config builder + $module->config_fields[$form['fields_name']][$form['fieldset']][] + = $field; + } + // remove form + unset($module->fields[$n]); + } + } + else + { + unset($module->fields[$n]); + } + } + } + unset($module->fields); + + // set files and folders + $this->filesfolders->set($module); + + // set libraries + $this->libraries->set($module->code_name, $module); + + // add PHP in module install + $module->add_install_script = true; + $addScriptMethods = [ + 'php_script', + 'php_preflight', + 'php_postflight', + 'php_method' + ]; + $addScriptTypes = [ + 'install', + 'update', + 'uninstall' + ]; + // the next are php placeholders + $guiMapper['type'] = 'php'; + foreach ($addScriptMethods as $scriptMethod) + { + foreach ($addScriptTypes as $scriptType) + { + if (isset($module->{'add_' . $scriptMethod . '_' . $scriptType}) + && $module->{'add_' . $scriptMethod . '_' . $scriptType} == 1 + && StringHelper::check( + $module->{$scriptMethod . '_' . $scriptType} + )) + { + // set GUI mapper field + $guiMapper['field'] = $scriptMethod . '_' . $scriptType; + $module->{$scriptMethod . '_' . $scriptType} = $this->gui->set( + $this->placeholder->update_( + $this->customcode->update( + base64_decode( + (string) $module->{$scriptMethod . '_' . $scriptType} + ) + ) + ), + $guiMapper + ); + } + else + { + unset($module->{$scriptMethod . '_' . $scriptType}); + $module->{'add_' . $scriptMethod . '_' . $scriptType} = 0; + } + } + } + + // add_sql + if ($module->add_sql == 1 + && StringHelper::check($module->sql)) + { + $module->sql = $this->placeholder->update_( + $this->customcode->update(base64_decode((string) $module->sql)) + ); + } + else + { + unset($module->sql); + $module->add_sql = 0; + } + + // add_sql_uninstall + if ($module->add_sql_uninstall == 1 + && StringHelper::check( + $module->sql_uninstall + )) + { + $module->sql_uninstall = $this->placeholder->update_( + $this->customcode->update( + base64_decode((string) $module->sql_uninstall) + ) + ); + } + else + { + unset($module->sql_uninstall); + $module->add_sql_uninstall = 0; + } + + // update the URL of the update_server if set + if ($module->add_update_server == 1 + && StringHelper::check( + $module->update_server_url + )) + { + $module->update_server_url = $this->placeholder->update_( + $this->customcode->update($module->update_server_url) + ); + } + + // add the update/sales server FTP details if that is the expected protocol + $serverArray = array('update_server', 'sales_server'); + foreach ($serverArray as $server) + { + if ($module->{'add_' . $server} == 1 + && is_numeric( + $module->{$server} + ) + && $module->{$server} > 0) + { + // get the server protocol + $module->{$server . '_protocol'} + = GetHelper::var( + 'server', (int) $module->{$server}, 'id', 'protocol' + ); + } + else + { + $module->{$server} = 0; + // only change this for sales server (update server can be added locally to the zip file) + if ('sales_server' === $server) + { + $module->{'add_' . $server} = 0; + } + $module->{$server . '_protocol'} = 0; + } + } + + // set the update server stuff (TODO) + // update_server_xml_path + // update_server_xml_file_name + + // rest globals + $this->config->build_target = $_backup_target; + $this->config->lang_target = $_backup_lang; + $this->config->lang_prefix = $_backup_langPrefix; + + $this->placeholder->remove('Module_name'); + $this->placeholder->remove('Module'); + $this->placeholder->remove('module'); + $this->placeholder->remove('module.version'); + $this->placeholder->remove('module_version'); + + return $module; + } + + return null; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Infusion.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Infusion.php new file mode 100644 index 000000000..0982fcae7 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Infusion.php @@ -0,0 +1,435 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFour; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\ProviderInterface as Provider; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\DispatcherInterface as Dispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\TemplateInterface as Template; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\HelperInterface as Helper; +use VDM\Joomla\Componentbuilder\Interfaces\Architecture\Module\MainXMLInterface as MainXML; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface as Data; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HeaderInterface as Header; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\GetScriptInterface as InstallScript; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Componentbuilder\Compiler\Creator\FieldsetExtension; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Methods; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Componentbuilder\Interfaces\Module\InfusionInterface; + + +/** + * Joomla 4 module Infusion Class + * + * @since 5.1.2 + */ +final class Infusion implements InfusionInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Provider Class. + * + * @var Provider + * @since 5.1.2 + */ + protected Provider $provider; + + /** + * The Dispatcher Class. + * + * @var Dispatcher + * @since 5.1.2 + */ + protected Dispatcher $dispatcher; + + /** + * The Template Class. + * + * @var Template + * @since 5.1.2 + */ + protected Template $template; + + /** + * The Helper Class. + * + * @var Helper + * @since 5.1.2 + */ + protected Helper $helper; + + /** + * The MainXML Class. + * + * @var MainXML + * @since 5.1.2 + */ + protected MainXML $mainxml; + + /** + * The ModuleData Class. + * + * @var Data + * @since 5.1.2 + */ + protected Data $data; + + /** + * The Header Class. + * + * @var Header + * @since 5.1.2 + */ + protected Header $header; + + /** + * The Event Class. + * + * @var Event + * @since 5.1.2 + */ + protected Event $event; + + /** + * The Install Class. + * + * @var InstallScript + * @since 5.1.2 + */ + protected InstallScript $installscript; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.2 + */ + protected ContentMulti $contentmulti; + + /** + * The FieldsetExtension Class. + * + * @var FieldsetExtension + * @since 5.1.2 + */ + protected FieldsetExtension $fieldsetextension; + + /** + * The Methods Class. + * + * @var Methods + * @since 5.1.2 + */ + protected Methods $methods; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Provider $provider The Provider Class. + * @param Dispatcher $dispatcher The Dispatcher Class. + * @param Template $template The Template Class. + * @param Helper $helper The Helper Class. + * @param MainXML $mainxml The MainXML Class. + * @param Data $data The ModuleData Class. + * @param Header $header The Header Class. + * @param Event $event The Event Class. + * @param InstallScript $installscript The GetScript Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * @param FieldsetExtension $fieldsetextension The FieldsetExtension Class. + * @param Methods $methods The Methods Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Provider $provider, Dispatcher $dispatcher, + Template $template, Helper $helper, MainXML $mainxml, + Data $data, Header $header, Event $event, + InstallScript $installscript, ContentMulti $contentmulti, + FieldsetExtension $fieldsetextension, Methods $methods) + { + $this->config = $config; + $this->provider = $provider; + $this->dispatcher = $dispatcher; + $this->template = $template; + $this->helper = $helper; + $this->mainxml = $mainxml; + $this->data = $data; + $this->header = $header; + $this->event = $event; + $this->installscript = $installscript; + $this->contentmulti = $contentmulti; + $this->fieldsetextension = $fieldsetextension; + $this->methods = $methods; + } + + /** + * Infuse the module data into the content. + * + * @return void + * @since 5.1.2 + */ + public function set(): void + { + if (!$this->data->exists()) + { + return; + } + + foreach ($this->data->get() as $module) + { + if (!ObjectHelper::check($module)) + { + continue; + } + + $this->triggerBeforeInfusionEvent($module); + $this->setModuleConfiguration($module); + $this->setProviderCode($module); + $this->setDispatcherCode($module); + $this->setDynamicGets($module); + $this->setHelperCode($module); + $this->setDefaultTemplates($module); + $this->setInstallScript($module); + $this->setFieldsets($module); + $this->setMainXml($module); + $this->triggerAfterInfusionEvent($module); + } + } + + /** + * Set core configuration from module data. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setModuleConfiguration(object $module): void + { + $this->config->build_target = $module->key; + $this->config->lang_target = $module->key; + $this->config->set('lang_prefix', $module->lang_prefix); + } + + /** + * Set the provider provider code. + * + * @param object $module The module object being processed. + * + * @return void + * @since 5.1.2 + */ + protected function setProviderCode($module): void + { + $providerHeader = trim((string) ($this->header->get('module.provider.header', $module->class_name) ?? '')); + if ($providerHeader !== '') + { + $providerHeader = PHP_EOL . PHP_EOL . $providerHeader; + } + $this->contentmulti->set("{$module->key}|PROVIDER_CLASS_HEADER", $providerHeader); + + $providerContent = $this->provider->get($module); + $this->contentmulti->set("{$module->key}|PROVIDER_CLASS", $providerContent); + } + + /** + * Set dispatcher-generated module code. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDispatcherCode(object $module): void + { + $header = trim((string) ($this->header->get('module.dispatcher.header', $module->class_name) ?? '')); + if ($header !== '') + { + $header = PHP_EOL . PHP_EOL . $header; + } + $this->contentmulti->set("{$module->key}|DISPATCHER_CLASS_HEADER", $header); + + $code = $this->dispatcher->get($module); + $this->contentmulti->set("{$module->key}|DISPATCHER_CLASS", $code); + } + + /** + * Set dynamically generated get methods (dynamicGets). + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDynamicGets(object $module): void + { + if ($module->custom_get) + { + $header = trim((string) ($this->header->get('module.dynamicgets.header', $module->class_name) ?? '')); + if ($header !== '') + { + $header = PHP_EOL . PHP_EOL . $header; + } + $this->contentmulti->set("{$module->key}|DYNAMICGETS_HEADER", $header); + + $code = $this->methods->get($module, $module->key); + $this->contentmulti->set("{$module->key}|DYNAMICGETS", $code); + } + } + + /** + * Set helper class code if enabled. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setHelperCode(object $module): void + { + if ($module->add_class_helper >= 1) + { + $header = trim((string) ($this->header->get('module.helper.header', $module->class_name) ?? '')); + $header .= $this->helper->header($module); + if (!empty($header)) + { + $header = PHP_EOL . PHP_EOL . trim($header); + } + $this->contentmulti->set("{$module->key}|HELPER_CLASS_HEADER", $header); + + $code = $this->helper->get($module); + $this->contentmulti->set("{$module->key}|HELPER_CLASS", $code); + } + } + + /** + * Set default and extra templates. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDefaultTemplates(object $module): void + { + $header = trim((string) ($this->header->get('module.default.template.header', $module->class_name) ?? '')); + if (!empty($header)) + { + $header = PHP_EOL . PHP_EOL . $header; + } + $this->contentmulti->set("{$module->key}|MODDEFAULT_HEADER", $header); + + $header_code = $this->template->header($module); + $this->contentmulti->set("{$module->key}|MODDEFAULT_HEADER_CODE", $header_code); + + $code = $this->template->default($module, $module->key); + $this->contentmulti->set("{$module->key}|MODDEFAULT", $code); + + $this->template->extra($module); + } + + /** + * Set install script content if required. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setInstallScript(object $module): void + { + if ($module->add_install_script) + { + $this->contentmulti->set("{$module->key}|INSTALLCLASS", + $this->installscript->get($module)); + } + } + + /** + * Set all fieldset content based on form files. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setFieldsets(object $module): void + { + if (!isset($module->form_files) || !ArrayHelper::check($module->form_files)) + { + return; + } + + foreach ($module->form_files as $file => $files) + { + foreach ($files as $field_name => $fieldsets) + { + foreach ($fieldsets as $fieldset => $fields) + { + $key = "{$module->key}|FIELDSET_{$file}{$field_name}{$fieldset}"; + $content = $this->fieldsetextension->get($module, $fields); + $this->contentmulti->set($key, $content); + } + } + } + } + + /** + * Set main XML configuration content. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setMainXml(object $module): void + { + $this->contentmulti->set("{$module->key}|MAINXML", $this->mainxml->get($module)); + } + + /** + * Trigger before-infusion event. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function triggerBeforeInfusionEvent(object &$module): void + { + $this->event->trigger('jcb_ce_onBeforeInfuseModuleData', [&$module]); + } + + /** + * Trigger after-infusion event. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function triggerAfterInfusionEvent(object &$module): void + { + $this->event->trigger('jcb_ce_onAfterInfuseModuleData', [&$module]); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Structure.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Structure.php new file mode 100644 index 000000000..3d2d99a57 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/Structure.php @@ -0,0 +1,1264 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFour; + + +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface as Module; +use VDM\Joomla\Componentbuilder\Compiler\Component; +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Registry; +use VDM\Joomla\Componentbuilder\Compiler\Customcode\Dispenser; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Counter; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Folder; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\File; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Files; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Placefix; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Builder\TemplateData; +use VDM\Joomla\Componentbuilder\Compiler\Placeholder; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Utilities\FileHelper; +use VDM\Joomla\Componentbuilder\Interfaces\Module\StructureInterface; + + +/** + * Joomla Module Structure Builder Class + * + * @since 5.1.2 + */ +final class Structure implements StructureInterface +{ + /** + * The Data Class. + * + * @var Module + * @since 5.1.2 + */ + protected Module $module; + + /** + * The Component Class. + * + * @var Component + * @since 5.1.2 + */ + protected Component $component; + + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Registry Class. + * + * @var Registry + * @since 5.1.2 + */ + protected Registry $registry; + + /** + * The Dispenser Class. + * + * @var Dispenser + * @since 5.1.2 + */ + protected Dispenser $dispenser; + + /** + * The EventInterface Class. + * + * @var Event + * @since 5.1.2 + */ + protected Event $event; + + /** + * The Counter Class. + * + * @var Counter + * @since 5.1.2 + */ + protected Counter $counter; + + /** + * The Folder Class. + * + * @var Folder + * @since 5.1.2 + */ + protected Folder $folder; + + /** + * The File Class. + * + * @var File + * @since 5.1.2 + */ + protected File $file; + + /** + * The Files Class. + * + * @var Files + * @since 5.1.2 + */ + protected Files $files; + + /** + * The TemplateData Class. + * + * @var TemplateData + * @since 5.1.2 + */ + protected TemplateData $templatedata; + + /** + * The Placeholder Class. + * + * @var Placeholder + * @since 5.0.0 + */ + protected Placeholder $placeholder; + + /** + * The Namespace Prefix + * + * @var string + * @since 5.0.0 + */ + protected string $NamespacePrefix; + + /** + * The Component Namespace (in code) + * + * @var string + * @since 3.2.0 + */ + protected string $ComponentNamespace; + + /** + * Constructor. + * + * @param Module $module The Data Class. + * @param Component $component The Component Class. + * @param Config $config The Config Class. + * @param Registry $registry The Registry Class. + * @param Dispenser $dispenser The Dispenser Class. + * @param Event $event The EventInterface Class. + * @param Counter $counter The Counter Class. + * @param Folder $folder The Folder Class. + * @param File $file The File Class. + * @param Files $files The Files Class. + * @param TemplateData $templatedata The TemplateData Class. + * @param Placeholder $placeholder The Placeholder Class. + * + * @since 5.1.2 + */ + public function __construct(Module $module, Component $component, Config $config, + Registry $registry, Dispenser $dispenser, Event $event, + Counter $counter, Folder $folder, File $file, + Files $files, TemplateData $templatedata, Placeholder $placeholder) + { + $this->module = $module; + $this->component = $component; + $this->config = $config; + $this->registry = $registry; + $this->dispenser = $dispenser; + $this->event = $event; + $this->counter = $counter; + $this->folder = $folder; + $this->file = $file; + $this->files = $files; + $this->templatedata = $templatedata; + $this->placeholder = $placeholder; + + // set some global values + $this->NamespacePrefix = $this->placeholder->get('NamespacePrefix'); + $this->ComponentNamespace = $this->placeholder->get('ComponentNamespace'); + } + + /** + * Build the Modules files, folders, url's and config + * + * @return void + * @since 5.1.2 + */ + public function build() + { + if ($this->module->exists()) + { + $component_context = $this->config->component_context; + $modules = $this->module->get(); + + // Trigger Event: jcb_ce_onBeforeSetModules + $this->event->trigger( + 'jcb_ce_onBeforeBuildModules', + array(&$component_context, &$modules) + ); + + foreach ($modules as $module) + { + if (ObjectHelper::check($module) + && isset($module->folder_name) + && StringHelper::check($module->folder_name)) + { + // module path + $this->modulePath($module); + + // set the module paths + $this->registry->set('dynamic_paths.' . $module->key, $module->folder_path); + + // make sure there is no old build + $this->folder->remove($module->folder_path); + + // create the main module folder + $this->folder->create($module->folder_path); + + // set service provider class file + $this->setServiceProviderClassFile($module); + + // set dispatcher class file + $this->setDispatcherClassFile($module); + + // create the dynamic gets file + $this->setDynamicGets($module); + + // set helper file + $this->setHelperFile($module); + + // set main xml file + $this->setMainXmlFile($module); + + // set tmpl folder + $this->folder->create($module->folder_path . '/tmpl'); + + // set default file + $this->setDefaultFile($module); + + // set custom default files + $this->setTemplateFiles($module); + + // set install script if needed + $this->setInstallScript($module); + + // set readme if found + $this->setReadme($module); + + // set the CSS and JavaScript in form + $this->setCssJsForm($module); + + // set rules folders if needed + if (isset($module->fields_rules_paths) + && $module->fields_rules_paths == 2) + { + // create rules folder + $this->folder->create($module->folder_path . '/src/Rule'); + + // create fields folder + $this->folder->create($module->folder_path . '/src/Field'); + } + + // set forms folder/files if needed + $this->setForms($module); + + // set SQL stuff if needed + $this->setSQL($module); + + // create the language folder + $this->folder->create($module->folder_path . '/language'); + + // also create the lang tag folder + $this->folder->create( + $module->folder_path . '/language/' . $this->config->get('lang_tag', 'en-GB') + ); + + // check if this module has files + $this->setFiles($module); + + // check if this module has folders + $this->setFolders($module); + + // check if this module has urls + $this->setUrls($module); + } + } + } + } + + /** + * get the module xml template + * + * @param object $module The module object + * + * @return string + * @since 5.1.2 + */ + protected function getXML(object $module): string + { + $xml = ''; + $xml .= PHP_EOL . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . $module->lang_prefix . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('BUILDDATE') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('AUTHOR') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('AUTHOREMAIL') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('AUTHORWEBSITE') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('COPYRIGHT') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . Placefix::_h('LICENSE') . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . $module->module_version . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . "{$this->NamespacePrefix}\\Module\\{$module->namespace}" . ''; + $xml .= PHP_EOL . Indent::_(1) . '' . $module->lang_prefix . '_XML_DESCRIPTION'; + $xml .= Placefix::_h('MAINXML'); + $xml .= PHP_EOL . ''; + + return $xml; + } + + /** + * get the module admin custom script field + * + * @param object $module + * @param array $fieldScriptBucket + * + * @return string + * @since 5.1.2 + * + */ + protected function getCustomScriptField(object $module, array $fieldScriptBucket): string + { + $form_field_class = []; + $form_field_class[] = Placefix::_h('BOM') . PHP_EOL; + $form_field_class[] = PHP_EOL . "use Joomla\CMS\Form\FormField;"; + $form_field_class[] = "use Joomla\CMS\Factory;"; + $form_field_class[] = PHP_EOL . "//" . Line::_(__Line__, __Class__) + . " No direct access to this file"; + $form_field_class[] = "defined('_JEXEC') or die('Restricted access');"; + $form_field_class[] = PHP_EOL + . "class {$module->class_name}engine extends FormField"; + $form_field_class[] = "{"; + $form_field_class[] = Indent::_(1) + . "protected \$type = '{$module->code_name}engine';"; + $form_field_class[] = PHP_EOL . Indent::_(1) + . "protected function getLabel()"; + $form_field_class[] = Indent::_(1) . "{"; + $form_field_class[] = Indent::_(2) . "return;"; + $form_field_class[] = Indent::_(1) . "}"; + $form_field_class[] = PHP_EOL . Indent::_(1) + . "protected function getInput()"; + $form_field_class[] = Indent::_(1) . "{"; + $form_field_class[] = Indent::_(2) . "//" . Line::_(__Line__, __Class__) + . " Get the document"; + $form_field_class[] = Indent::_(2) + . "\$document = Factory::getApplication()->getDocument();"; + $form_field_class[] = implode(PHP_EOL, $fieldScriptBucket); + $form_field_class[] = Indent::_(2) . "return; // noting for now :)"; + $form_field_class[] = Indent::_(1) . "}"; + $form_field_class[] = "}"; + + return implode(PHP_EOL, $form_field_class); + } + + /** + * Set the module path + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function modulePath(object &$module): void + { + $module->folder_path = $this->config->get( + 'compiler_path', JPATH_ADMINISTRATOR . '/components/com_componentbuilder/compiler' + ) . '/' . $module->folder_name; + } + + /** + * Set the service provider class file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setServiceProviderClassFile(object $module): void + { + // create services folder + $this->folder->create($module->folder_path . '/services'); + + $file_details = [ + 'path' => $module->folder_path . '/services/provider.php', + 'name' => 'provider.php', + 'zip' => 'services/provider.php' + ]; + + $this->file->write( + $file_details['path'], + 'files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + + /** + * set the dispatcher class path + * + * @param object $module The Module object + * + * @return void + * @since 5.1.2 + */ + protected function setDispatcherClassFile(object $module): void + { + // create extension folder + $this->folder->create($module->folder_path . '/src/Dispatcher'); + + $file_details = [ + 'path' => $module->folder_path . '/src/Dispatcher/Dispatcher.php', + 'name' => 'Dispatcher.php', + 'zip' => 'src/Dispatcher/Dispatcher.php' + ]; + + $this->file->write( + $file_details['path'], + 'NamespacePrefix}\\Module\\{$module->namespace}\\{$module->target_client_namespace}\\Dispatcher;" . + Placefix::_h('DISPATCHER_CLASS_HEADER') . + PHP_EOL . PHP_EOL . '// No direct access to this file' . PHP_EOL . + "defined('_JEXEC') or die('Restricted access');" . + PHP_EOL . PHP_EOL . + Placefix::_h('DISPATCHER_CLASS') + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + + /** + * Set the dynamic gets file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDynamicGets(object $module): void + { + if ($module->custom_get) + { + // create helper folder + $this->folder->create($module->folder_path . '/src/Helper/'); + + $file_details = [ + 'path' => "{$module->folder_path}/src/Helper/{$module->class_data_name}.php", + 'name' => '{$module->class_data_name}.php', + 'zip' => "src/Helper/{$module->class_data_name}.php" + ]; + + $this->file->write( + $file_details['path'], + 'NamespacePrefix}\\Module\\{$module->namespace}\\{$module->target_client_namespace}\\Helper;" . + Placefix::_h('DYNAMICGETS_HEADER') . + PHP_EOL . PHP_EOL . '// No direct access to this file' . PHP_EOL . + "defined('_JEXEC') or die('Restricted access');" . + PHP_EOL . PHP_EOL . '/**' . PHP_EOL . ' * Module ' . $module->official_name . ' Data Helper' + . PHP_EOL . ' */' . PHP_EOL . "final class " . $module->class_data_name . " implements DatabaseAwareInterface" + . PHP_EOL . "{" + + . PHP_EOL . Indent::_(1) . 'use DatabaseAwareTrait;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' *' . Line::_(__LINE__, __CLASS__) . ' The module instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var \stdClass' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $module;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * The application instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var CMSApplicationInterface' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $app;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * The input instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var Input' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $input;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * The params instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var Registry' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $params;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * The template instance' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @var string' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'protected $template;' . PHP_EOL + + . PHP_EOL . Indent::_(1) . '/**' + . PHP_EOL . Indent::_(1) . ' * Module ' . $module->official_name . ' constructor.' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @param array $config The config' + . PHP_EOL . Indent::_(1) . ' *' + . PHP_EOL . Indent::_(1) . ' * @since 5.1.2' + . PHP_EOL . Indent::_(1) . ' */' + . PHP_EOL . Indent::_(1) . 'public function __construct(array $config)' + . PHP_EOL . Indent::_(1) . '{' + . PHP_EOL . Indent::_(2) . '$this->module = $config[\'module\'] ?? null;' + . PHP_EOL . Indent::_(2) . '$this->app = $config[\'app\'] ?? null;' + . PHP_EOL . Indent::_(2) . '$this->input = $config[\'input\'] ?? null;' + . PHP_EOL . Indent::_(2) . '$this->params = $config[\'params\'] ?? null;' + . PHP_EOL . Indent::_(2) . '$this->template = $config[\'template\'] ?? null;' + . PHP_EOL . Indent::_(1) . '}' + + . Placefix::_h('DYNAMICGETS') + + . PHP_EOL . "}" + . PHP_EOL + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the helper file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setHelperFile(object $module): void + { + if ($module->add_class_helper >= 1) + { + // create helper folder + $this->folder->create($module->folder_path . '/src/Helper/'); + + $file_details = [ + 'path' => "{$module->folder_path}/src/Helper/{$module->class_helper_name}.php", + 'name' => '{$module->class_helper_name}.php', + 'zip' => "src/Helper/{$module->class_helper_name}.php" + ]; + + $this->file->write( + $file_details['path'], + 'NamespacePrefix}\\Module\\{$module->namespace}\\{$module->target_client_namespace}\\Helper;" . + Placefix::_h('HELPER_CLASS_HEADER') . + PHP_EOL . PHP_EOL . '// No direct access to this file' . PHP_EOL . + "defined('_JEXEC') or die('Restricted access');" . + PHP_EOL . Placefix::_h('HELPER_CLASS') + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the main XML file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setMainXmlFile(object $module): void + { + $file_details = [ + 'path' => $module->folder_path . '/' . $module->file_name . '.xml', + 'name' => $module->file_name . '.xml', + 'zip' => $module->file_name . '.xml' + ]; + + $this->file->write( + $file_details['path'], + $this->getXML($module) + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + + /** + * Set the main default template file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDefaultFile(object $module): void + { + $file_details = [ + 'path' => $module->folder_path . '/tmpl/default.php', + 'name' => 'default.php', + 'zip' => 'tmpl/default.php' + ]; + + $this->file->write( + $file_details['path'], + '' . + Placefix::_h('MODDEFAULT') + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + + /** + * Set the additional template files + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setTemplateFiles(object $module): void + { + if (($data_ = $this->templatedata-> + get($module->key . '.' . $module->code_name)) !== null) + { + foreach ($data_ as $template => $data) + { + $file_details = [ + 'path' => $module->folder_path . "/tmpl/default_{$template}.php", + 'name' => "default_{$template}.php", + 'zip' => "tmpl/default_{$template}.php" + ]; + + $this->file->write( + $file_details['path'], + '' . + Placefix::_h(StringHelper::safe("MODDEFAULT_{$template}", 'U')) + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + } + + /** + * Set the install script file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setInstallScript(object $module): void + { + if ($module->add_install_script) + { + $file_details = [ + 'path' => $module->folder_path . '/script.php', + 'name' => 'script.php', + 'zip' => 'script.php' + ]; + + $this->file->write( + $file_details['path'], + 'files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the readme file + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setReadme(object $module): void + { + if ($module->addreadme) + { + $file_details = [ + 'path' => $module->folder_path . '/README.md', + 'name' => 'README.md', + 'zip' => 'README.md' + ]; + + $this->file->write($file_details['path'], $module->readme); + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the css and javascript in form + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setCssJsForm(object $module): void + { + // check if we have custom fields needed for scripts + $field_script_bucket = []; + + // add any css from the fields + $this->setCssForm($module, $field_script_bucket); + + // add any JavaScript from the fields + $this->setJsForm($module, $field_script_bucket); + + // add the custom script field + if (!empty($field_script_bucket)) + { + $file_details = [ + 'path' => $module->folder_path . "/src/Field/{$module->class_name}engine.php", + 'name' => "{$module->class_name}engine.php", + 'zip' => "src/Field/{$module->class_name}engine.php" + ]; + + $this->file->write( + $file_details['path'], + $this->getCustomScriptField( + $module, + $field_script_bucket + ) + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + + /** + * Set the css in form + * + * @param object $module + * @param array $bucket + * + * @return void + * @since 5.1.2 + */ + protected function setCssForm(object $module, array &$bucket): void + { + if (($css = $this->dispenser->get('css_view', $module->key)) !== null && + StringHelper::check($css)) + { + // make sure this script does not have PHP + if (strpos((string) $css, 'folder->create($module->folder_path . '/assets/css'); + + // add the CSS file + $file_details = [ + 'path' => $module->folder_path . "/assets/css/{$module->class_name}engine.css", + 'name' => "{$module->class_name}engine.css", + 'zip' => "assets/css/{$module->class_name}engine.css" + ]; + + $this->file->write( + $file_details['path'], + Placefix::_h('BOM') . PHP_EOL + . PHP_EOL . $css + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + + // add the field script + $bucket[] = Indent::_(2) . "//" + . Line::_(__Line__, __Class__) . " Custom CSS"; + $bucket[] = Indent::_(2) + . "Html::_('stylesheet', '" + . "modules/{$module->folder_name}" + . "/assets/css/{$module->class_name}engine.css', ['version' => 'auto', 'relative' => true]);"; + } + } + } + + /** + * Set the javascript in form + * + * @param object $module + * @param array $bucket + * + * @return void + * @since 5.1.2 + */ + protected function setJsForm(object $module, array &$bucket): void + { + if (($javascript = $this->dispenser->get('view_footer', $module->key)) !== null + && StringHelper::check($javascript)) + { + // make sure this script does not have PHP + if (strpos((string) $javascript, 'folder->create($module->folder_path . '/assets/js'); + + // add the CSS file + $file_details = [ + 'path' => $module->folder_path . "/assets/js/{$module->class_name}engine.js", + 'name' => "{$module->class_name}engine.js", + 'zip' => "assets/js/{$module->class_name}engine.js" + ]; + + $this->file->write( + $file_details['path'], + Placefix::_h('BOM') . PHP_EOL + . PHP_EOL . $javascript + ); + + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + + // add the field script + $bucket[] = Indent::_(2) . "//" + . Line::_(__Line__, __Class__) . " Custom JS"; + $bucket[] = Indent::_(2) + . "Html::_('script', '" + . "/modules/{$module->folder_name}" + . "/assets/js/{$module->class_name}engine.js', ['version' => 'auto', 'relative' => true]);"; + } + } + } + + /** + * Set the form folders and files as needed + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setForms(object $module): void + { + if (isset($module->form_files) + && ArrayHelper::check($module->form_files)) + { + // create forms folder + $this->folder->create($module->folder_path . '/forms'); + + // set the template files + foreach ($module->form_files as $file => $fields) + { + // set file details + $file_details = [ + 'path' => $module->folder_path . '/forms/' . $file . '.xml', + 'name' => $file . '.xml', + 'zip' => 'forms/' . $file . '.xml' + ]; + + // build basic XML + $xml = ''; + $xml .= PHP_EOL . ''; + + // search if we must add the component path + $add_component_path = false; + foreach ($fields as $field_name => $fieldsets) + { + if (!$add_component_path) + { + foreach ($fieldsets as $fieldset => $field) + { + if (!$add_component_path + && isset($module->fieldsets_paths[$file . $field_name . $fieldset]) + && $module->fieldsets_paths[$file . $field_name . $fieldset] == 1) + { + $add_component_path = true; + } + } + } + } + + // only add if part of the component field types path is required + if ($add_component_path) + { + $xml .= PHP_EOL . ''; + } + else + { + $xml .= PHP_EOL . '
'; + } + + // add the fields + foreach ($fields as $field_name => $fieldsets) + { + // check if we have an double fields naming set + $field_name_inner = ''; + $field_name_outer = $field_name; + if (strpos((string)$field_name, '.') !== false) + { + $field_names = explode('.', (string)$field_name); + if (count((array)$field_names) == 2) + { + $field_name_outer = $field_names[0]; + $field_name_inner = $field_names[1]; + } + } + $xml .= PHP_EOL . Indent::_(1) + . ''; + foreach ($fieldsets as $fieldset => $field) + { + // default to the field set name + $label = $fieldset; + if (isset($module->fieldsets_label[$file . $field_name . $fieldset])) + { + $label = $module->fieldsets_label[$file . $field_name . $fieldset]; + } + + // add path to module rules and custom fields + if (isset($module->fieldsets_paths[$file . $field_name . $fieldset]) + && ($module->fieldsets_paths[$file . $field_name . $fieldset] == 2 + || $module->fieldsets_paths[$file . $field_name . $fieldset] == 3)) + { + if ($module->target == 2) + { + if (!isset($module->add_rule_path[$file . $field_name . $fieldset])) + { + $module->add_rule_path[$file . $field_name . $fieldset] = + "{$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\Administrator\\Rule"; + } + + if (!isset($module->add_field_path[$file . $field_name . $fieldset])) + { + $module->add_field_path[$file . $field_name . $fieldset] = + "{$this->NamespacePrefix}\\Component\\{$this->ComponentNamespace}\\Administrator\\Field"; + } + } + else + { + if (!isset($module->add_rule_path[$file . $field_name . $fieldset])) + { + $module->add_rule_path[$file . $field_name . $fieldset] = + "{$this->NamespacePrefix}\\Module\\{$module->namespace}\\Rule"; + } + + if (!isset($module->add_field_path[$file . $field_name . $fieldset])) + { + $module->add_field_path[$file . $field_name . $fieldset] = + "{$this->NamespacePrefix}\\Module\\{$module->namespace}\\Field"; + } + } + } + + // add path to module rules and custom fields + if (isset($module->add_rule_path[$file . $field_name . $fieldset]) + || isset($module->add_field_path[$file . $field_name . $fieldset])) + { + + $xml .= PHP_EOL . Indent::_(1) . ''; + + $xml .= PHP_EOL . Indent::_(1) . '
add_rule_path[$file . $field_name . $fieldset])) + { + $xml .= PHP_EOL . Indent::_(2) + . 'addruleprefix="' . $module->add_rule_path[$file . $field_name . $fieldset] . '"'; + } + + if (isset($module->add_field_path[$file . $field_name . $fieldset])) + { + $xml .= PHP_EOL . Indent::_(2) + . 'addfieldprefix="' . $module->add_field_path[$file . $field_name . $fieldset] . '"'; + } + + $xml .= PHP_EOL . Indent::_(1) . '>'; + } + else + { + $xml .= PHP_EOL . Indent::_(1) . '
'; + } + + // check if we have an inner field set + if (StringHelper::check($field_name_inner)) + { + $xml .= PHP_EOL . Indent::_(1) + . ''; + } + + // add the placeholder of the fields + $xml .= Placefix::_h('FIELDSET_' . $file . $field_name . $fieldset); + + // check if we have an inner field set + if (StringHelper::check($field_name_inner)) + { + $xml .= PHP_EOL . Indent::_(1) + . ''; + } + $xml .= PHP_EOL . Indent::_(1) + . '
'; + } + $xml .= PHP_EOL . Indent::_(1) . ''; + } + $xml .= PHP_EOL . ''; + + // add xml to file + $this->file->write($file_details['path'], $xml); + $this->files->appendArray($module->key, $file_details); + + // count the file created + $this->counter->file++; + } + } + } + + /** + * Set the sql stuff + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setSQL(object $module): void + { + if ($module->add_sql || $module->add_sql_uninstall) + { + // create SQL folder + $this->folder->create($module->folder_path . '/sql'); + + // create mysql folder + $this->folder->create( + $module->folder_path . '/sql/mysql' + ); + + // now set the install file + if ($module->add_sql) + { + $this->file->write( + $module->folder_path . '/sql/mysql/install.sql', + $module->sql + ); + + // count the file created + $this->counter->file++; + } + + // now set the uninstall file + if ($module->add_sql_uninstall) + { + $this->file->write( + $module->folder_path + . '/sql/mysql/uninstall.sql', + $module->sql_uninstall + ); + + // count the file created + $this->counter->file++; + } + } + } + + /** + * Set the files + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setFiles(object $module): void + { + if (isset($module->files) + && ArrayHelper::check($module->files)) + { + // add to component files + foreach ($module->files as $file) + { + // set the pathfinder + $file['target_type'] = $module->target_type; + $file['target_id'] = $module->id; + + $this->component->appendArray('files', $file); + } + } + } + + /** + * Set the folders + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setFolders(object $module): void + { + if (isset($module->folders) + && ArrayHelper::check($module->folders)) + { + // add to component folders + foreach ($module->folders as $folder) + { + // set the pathfinder + $folder['target_type'] = $module->target_type; + $folder['target_id'] = $module->id; + + $this->component->appendArray('folders', $folder); + } + } + } + + /** + * Set the urls + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setUrls(object &$module): void + { + if (isset($module->urls) + && ArrayHelper::check($module->urls)) + { + // add to component urls + foreach ($module->urls as &$url) + { + // should we add the local folder + if (isset($url['type']) && $url['type'] > 1 + && isset($url['url']) + && StringHelper::check($url['url'])) + { + // set file name + $fileName = basename((string)$url['url']); + + // get the file contents + $data = FileHelper::getContent( + $url['url'] + ); + + // build sub path + if (strpos($fileName, '.js') !== false) + { + $path = '/assets/js'; + } + elseif (strpos($fileName, '.css') !== false) + { + $path = '/assets/css'; + } + else + { + $path = ''; + } + + // create sub media path if not set + $this->folder->create( + $module->folder_path . $path + ); + + // set the path to module file + $url['path'] = $module->folder_path . $path + . '/' . $fileName; // we need this for later + + // write data to path + $this->file->write($url['path'], $data); + + // count the file created + $this->counter->file++; + } + } + } + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaFour/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Data.php similarity index 91% rename from libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/Data.php rename to libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Data.php index 2ba7c2785..6d3159798 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/Data.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Data.php @@ -9,11 +9,12 @@ * @license GNU General Public License version 2 or later; see LICENSE.txt */ -namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule; +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaThree; use Joomla\CMS\Factory; -use Joomla\CMS\Filter\OutputFilter; +use Joomla\CMS\Filter\OutputFilter; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Customcode; use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui; @@ -31,6 +32,7 @@ use VDM\Joomla\Utilities\JsonHelper; use VDM\Joomla\Utilities\StringHelper; use VDM\Joomla\Utilities\GetHelper; use VDM\Joomla\Utilities\GuidHelper; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface; /** @@ -38,7 +40,7 @@ use VDM\Joomla\Utilities\GuidHelper; * * @since 3.2.0 */ -class Data +class Data implements ModuleDataInterface { /** * Compiler Joomla Plugins Data @@ -145,26 +147,28 @@ class Data protected Templatelayout $templatelayout; /** - * The Database Class. + * Joomla Database Class. * - * @since 3.2.0 - */ - protected $db; + * @var DatabaseInterface + * @since 5.1.2 + **/ + protected DatabaseInterface $db; /** * Constructor. * - * @param Config $config The Config Class. - * @param Customcode $customcode The Customcode Class. - * @param Gui $gui The Gui Class. - * @param Placeholder $placeholder The Placeholder Class. - * @param Language $language The Language Class. - * @param Field $field The Field Class. - * @param Fieldname $fieldname The Name Class. - * @param Filesfolders $filesfolders The Filesfolders Class. - * @param Libraries $libraries The Libraries Class. - * @param Dynamicget $dynamicget The Data Class. - * @param Templatelayout $templatelayout The Data Class. + * @param Config $config The Config Class. + * @param Customcode $customcode The Customcode Class. + * @param Gui $gui The Gui Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param Language $language The Language Class. + * @param Field $field The Field Class. + * @param Fieldname $fieldname The Name Class. + * @param Filesfolders $filesfolders The Filesfolders Class. + * @param Libraries $libraries The Libraries Class. + * @param Dynamicget $dynamicget The Data Class. + * @param Templatelayout $templatelayout The Data Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 3.2.0 */ @@ -172,7 +176,8 @@ class Data Placeholder $placeholder, Language $language, Field $field, Fieldname $fieldname, Filesfolders $filesfolders, Libraries $libraries, - Dynamicget $dynamicget, Templatelayout $templatelayout) + Dynamicget $dynamicget, Templatelayout $templatelayout, + DatabaseInterface $db) { $this->config = $config; $this->customcode = $customcode; @@ -185,7 +190,7 @@ class Data $this->libraries = $libraries; $this->dynamicget = $dynamicget; $this->templatelayout = $templatelayout; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Infusion.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Infusion.php new file mode 100644 index 000000000..4c503d23f --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Infusion.php @@ -0,0 +1,369 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaThree; + + +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\DispatcherInterface as Dispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\TemplateInterface as Template; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\HelperInterface as Helper; +use VDM\Joomla\Componentbuilder\Interfaces\Architecture\Module\MainXMLInterface as MainXML; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface as Data; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\HeaderInterface as Header; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\EventInterface as Event; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\GetScriptInterface as InstallScript; +use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentMulti; +use VDM\Joomla\Componentbuilder\Compiler\Creator\FieldsetExtension; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Methods; +use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Componentbuilder\Interfaces\Module\InfusionInterface; + + +/** + * Joomla 3 module Infusion Class + * + * @since 5.1.2 + */ +final class Infusion implements InfusionInterface +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The DispatcherInterface Class. + * + * @var Dispatcher + * @since 5.1.2 + */ + protected Dispatcher $dispatcher; + + /** + * The TemplateInterface Class. + * + * @var Template + * @since 5.1.2 + */ + protected Template $template; + + /** + * The Helper Class. + * + * @var Helper + * @since 5.1.2 + */ + protected Helper $helper; + + /** + * The MainXMLInterface Class. + * + * @var MainXML + * @since 5.1.2 + */ + protected MainXML $mainxml; + + /** + * The ModuleDataInterface Class. + * + * @var Data + * @since 5.1.2 + */ + protected Data $data; + + /** + * The HeaderInterface Class. + * + * @var Header + * @since 5.1.2 + */ + protected Header $header; + + /** + * The EventInterface Class. + * + * @var Event + * @since 5.1.2 + */ + protected Event $event; + + /** + * The InstallInterface Class. + * + * @var InstallScript + * @since 5.1.2 + */ + protected InstallScript $installscript; + + /** + * The ContentMulti Class. + * + * @var ContentMulti + * @since 5.1.2 + */ + protected ContentMulti $contentmulti; + + /** + * The FieldsetExtension Class. + * + * @var FieldsetExtension + * @since 5.1.2 + */ + protected FieldsetExtension $fieldsetextension; + + /** + * The Methods Class. + * + * @var Methods + * @since 5.1.2 + */ + protected Methods $methods; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Dispatcher $dispatcher The DispatcherInterface Class. + * @param Template $template The TemplateInterface Class. + * @param Helper $helper The Helper Class. + * @param MainXML $mainxml The MainXMLInterface Class. + * @param Data $data The ModuleDataInterface Class. + * @param Header $header The HeaderInterface Class. + * @param Event $event The EventInterface Class. + * @param InstallScript $installscript The InstallInterface Class. + * @param ContentMulti $contentmulti The ContentMulti Class. + * @param FieldsetExtension $fieldsetextension The FieldsetExtension Class. + * @param Methods $methods The Methods Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Dispatcher $dispatcher, Template $template, + Helper $helper, MainXML $mainxml, Data $data, + Header $header, Event $event, + InstallScript $installscript, ContentMulti $contentmulti, + FieldsetExtension $fieldsetextension, Methods $methods) + { + $this->config = $config; + $this->dispatcher = $dispatcher; + $this->template = $template; + $this->helper = $helper; + $this->mainxml = $mainxml; + $this->data = $data; + $this->header = $header; + $this->event = $event; + $this->installscript = $installscript; + $this->contentmulti = $contentmulti; + $this->fieldsetextension = $fieldsetextension; + $this->methods = $methods; + } + + /** + * Infuse the module data into the content. + * + * @return void + * @since 5.1.2 + */ + public function set(): void + { + if (!$this->data->exists()) + { + return; + } + + foreach ($this->data->get() as $module) + { + if (!ObjectHelper::check($module)) + { + continue; + } + + $this->triggerBeforeInfusionEvent($module); + $this->setModuleConfiguration($module); + $this->setDispatcherCode($module); + $this->setDynamicGets($module); + $this->setHelperCode($module); + $this->setDefaultTemplates($module); + $this->setInstallScript($module); + $this->setFieldsets($module); + $this->setMainXml($module); + $this->triggerAfterInfusionEvent($module); + } + } + + /** + * Set core configuration from module data. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setModuleConfiguration(object $module): void + { + $this->config->build_target = $module->key; + $this->config->lang_target = $module->key; + $this->config->set('lang_prefix', $module->lang_prefix); + } + + /** + * Set dispatcher-generated module code. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDispatcherCode(object $module): void + { + $this->contentmulti->set("{$module->key}|MODCODE", $header . $this->dispatcher->get($module)); + } + + /** + * Set dynamically generated methods. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDynamicGets(object $module): void + { + $this->contentmulti->set("{$module->key}|DYNAMICGETS", $this->methods->get($module, $module->key)); + } + + /** + * Set helper class code if enabled. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setHelperCode(object $module): void + { + if ($module->add_class_helper >= 1) + { + $header = $this->helper->header($module); + $code = $this->helper->get($module); + + $this->contentmulti->set("{$module->key}|HELPERCODE", $header . $code); + } + } + + /** + * Set default and extra templates. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setDefaultTemplates(object $module): void + { + $this->contentmulti->set( + "{$module->key}|MODDEFAULT", + $this->template->default($module, $module->key) + ); + + $this->template->extra($module); + } + + /** + * Set install script content if required. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setInstallScript(object $module): void + { + if ($module->add_install_script) + { + $this->contentmulti->set("{$module->key}|INSTALLCLASS", + $this->installscript->get($module)); + } + } + + /** + * Set all fieldset content based on form files. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setFieldsets(object $module): void + { + if (!isset($module->form_files) || !ArrayHelper::check($module->form_files)) + { + return; + } + + foreach ($module->form_files as $file => $files) + { + foreach ($files as $field_name => $fieldsets) + { + foreach ($fieldsets as $fieldset => $fields) + { + $key = "{$module->key}|FIELDSET_{$file}{$field_name}{$fieldset}"; + $content = $this->fieldsetextension->get($module, $fields); + $this->contentmulti->set($key, $content); + } + } + } + } + + /** + * Set main XML configuration content. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function setMainXml(object $module): void + { + $this->contentmulti->set("{$module->key}|MAINXML", $this->mainxml->get($module)); + } + + /** + * Trigger before-infusion event. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function triggerBeforeInfusionEvent(object &$module): void + { + $this->event->trigger('jcb_ce_onBeforeInfuseModuleData', [&$module]); + } + + /** + * Trigger after-infusion event. + * + * @param object $module + * + * @return void + * @since 5.1.2 + */ + protected function triggerAfterInfusionEvent(object &$module): void + { + $this->event->trigger('jcb_ce_onAfterInfuseModuleData', [&$module]); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/Structure.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Structure.php similarity index 94% rename from libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/Structure.php rename to libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Structure.php index a096d4170..52889611f 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/Structure.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/Structure.php @@ -9,10 +9,10 @@ * @license GNU General Public License version 2 or later; see LICENSE.txt */ -namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule; +namespace VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaThree; -use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\Data as Module; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface as Module; use VDM\Joomla\Componentbuilder\Compiler\Component; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Registry; @@ -30,6 +30,7 @@ use VDM\Joomla\Utilities\ArrayHelper; use VDM\Joomla\Utilities\ObjectHelper; use VDM\Joomla\Utilities\StringHelper; use VDM\Joomla\Utilities\FileHelper; +use VDM\Joomla\Componentbuilder\Interfaces\Module\StructureInterface; /** @@ -37,7 +38,7 @@ use VDM\Joomla\Utilities\FileHelper; * * @since 3.2.0 */ -class Structure +class Structure implements StructureInterface { /** * The Data Class. @@ -203,8 +204,8 @@ class Structure // create the main module file $this->setMainModFile($module); - // creat the custom get file - $this->setCustomGet($module); + // create the dynamic gets file + $this->setDynamicGets($module); // set helper file $this->setHelperFile($module); @@ -388,14 +389,14 @@ class Structure } /** - * Set the custom get file + * Set the dynamic gets file * * @param object $module * * @return void * @since 3.2.0 */ - protected function setCustomGet(object $module): void + protected function setDynamicGets(object $module): void { if ($module->custom_get) { diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlamodule/JoomlaThree/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFive/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFive/Data.php index e91682002..831820f36 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFive/Data.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFive/Data.php @@ -13,7 +13,8 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Joomlaplugin\JoomlaFive; use Joomla\CMS\Factory; -use Joomla\CMS\Filter\OutputFilter; +use Joomla\CMS\Filter\OutputFilter; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Customcode; use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui; @@ -121,11 +122,12 @@ final class Data implements PluginDataInterface protected Filesfolders $filesfolders; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Define the mappings of traits and classes to their respective methods and services @@ -151,21 +153,22 @@ final class Data implements PluginDataInterface /** * Constructor. * - * @param Config $config The Config Class. - * @param Customcode $customcode The Customcode Class. - * @param Gui $gui The Gui Class. - * @param Placeholder $placeholder The Placeholder Class. - * @param Language $language The Language Class. - * @param Field $field The Field Class. - * @param FieldName $fieldname The Name Class. - * @param Filesfolders $filesfolders The Filesfolders Class. + * @param Config $config The Config Class. + * @param Customcode $customcode The Customcode Class. + * @param Gui $gui The Gui Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param Language $language The Language Class. + * @param Field $field The Field Class. + * @param FieldName $fieldname The Name Class. + * @param Filesfolders $filesfolders The Filesfolders Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 5.0.2 */ public function __construct(Config $config, Customcode $customcode, Gui $gui, Placeholder $placeholder, Language $language, Field $field, FieldName $fieldname, - Filesfolders $filesfolders) + Filesfolders $filesfolders, DatabaseInterface $db) { $this->config = $config; $this->customcode = $customcode; @@ -175,7 +178,7 @@ final class Data implements PluginDataInterface $this->field = $field; $this->fieldname = $fieldname; $this->filesfolders = $filesfolders; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFive/Structure.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFive/Structure.php index 8d41fee18..b09d1b5b4 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFive/Structure.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFive/Structure.php @@ -38,7 +38,7 @@ use VDM\Joomla\Componentbuilder\Interfaces\Plugin\StructureInterface; * * @since 5.0.2 */ -class Structure implements StructureInterface +final class Structure implements StructureInterface { /** * The Data Class. @@ -243,11 +243,11 @@ class Structure implements StructureInterface if (isset($plugin->fields_rules_paths) && $plugin->fields_rules_paths == 2) { - // create fields folder - $this->folder->create($plugin->folder_path . '/src/Field'); - // create rules folder $this->folder->create($plugin->folder_path . '/src/Rule'); + + // create fields folder + $this->folder->create($plugin->folder_path . '/src/Field'); } // set forms folder if needed @@ -498,9 +498,6 @@ class Structure implements StructureInterface if (isset($plugin->form_files) && ArrayHelper::check($plugin->form_files)) { - $Group = ucfirst((string) $plugin->group); - $FileName = $plugin->file_name; - // create forms folder $this->folder->create($plugin->folder_path . '/forms'); @@ -595,13 +592,13 @@ class Structure implements StructureInterface if (!isset($plugin->add_rule_path[$file . $field_name . $fieldset])) { $plugin->add_rule_path[$file . $field_name . $fieldset] = - "{$this->NamespacePrefix}\\Plugin\\{$Group}\\{$FileName}\\Rule"; + "{$this->NamespacePrefix}\\Plugin\\{$plugin->group_namespace}\\{$plugin->namespace}\\Rule"; } if (!isset($plugin->add_field_path[$file . $field_name . $fieldset])) { $plugin->add_field_path[$file . $field_name . $fieldset] = - "{$this->NamespacePrefix}\\Plugin\\{$Group}\\{$FileName}\\Field"; + "{$this->NamespacePrefix}\\Plugin\\{$plugin->group_namespace}\\{$plugin->namespace}\\Field"; } } @@ -619,13 +616,13 @@ class Structure implements StructureInterface if (isset($plugin->add_rule_path[$file . $field_name . $fieldset])) { $xml .= PHP_EOL . Indent::_(2) - . 'addrulepath="' . $plugin->add_rule_path[$file . $field_name . $fieldset] . '"'; + . 'addruleprefix="' . $plugin->add_rule_path[$file . $field_name . $fieldset] . '"'; } if (isset($plugin->add_field_path[$file . $field_name . $fieldset])) { $xml .= PHP_EOL . Indent::_(2) - . 'addfieldpath="' . $plugin->add_field_path[$file . $field_name . $fieldset] . '"'; + . 'addfieldprefix="' . $plugin->add_field_path[$file . $field_name . $fieldset] . '"'; } $xml .= PHP_EOL . Indent::_(1) . '>'; diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFour/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFour/Data.php index 7d9cb41d0..3ed0bdeaa 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFour/Data.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFour/Data.php @@ -13,7 +13,8 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Joomlaplugin\JoomlaFour; use Joomla\CMS\Factory; -use Joomla\CMS\Filter\OutputFilter; +use Joomla\CMS\Filter\OutputFilter; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Customcode; use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui; @@ -121,11 +122,12 @@ final class Data implements PluginDataInterface protected Filesfolders $filesfolders; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Define the mappings of traits and classes to their respective methods and services @@ -151,21 +153,22 @@ final class Data implements PluginDataInterface /** * Constructor. * - * @param Config $config The Config Class. - * @param Customcode $customcode The Customcode Class. - * @param Gui $gui The Gui Class. - * @param Placeholder $placeholder The Placeholder Class. - * @param Language $language The Language Class. - * @param Field $field The Field Class. - * @param FieldName $fieldname The Name Class. - * @param Filesfolders $filesfolders The Filesfolders Class. + * @param Config $config The Config Class. + * @param Customcode $customcode The Customcode Class. + * @param Gui $gui The Gui Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param Language $language The Language Class. + * @param Field $field The Field Class. + * @param FieldName $fieldname The Name Class. + * @param Filesfolders $filesfolders The Filesfolders Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 5.0.2 */ public function __construct(Config $config, Customcode $customcode, Gui $gui, Placeholder $placeholder, Language $language, Field $field, FieldName $fieldname, - Filesfolders $filesfolders) + Filesfolders $filesfolders, DatabaseInterface $db) { $this->config = $config; $this->customcode = $customcode; @@ -175,7 +178,7 @@ final class Data implements PluginDataInterface $this->field = $field; $this->fieldname = $fieldname; $this->filesfolders = $filesfolders; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFour/Structure.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFour/Structure.php index 5c3921dbe..f3dabe345 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFour/Structure.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaFour/Structure.php @@ -38,7 +38,7 @@ use VDM\Joomla\Componentbuilder\Interfaces\Plugin\StructureInterface; * * @since 5.0.2 */ -class Structure implements StructureInterface +final class Structure implements StructureInterface { /** * The Data Class. diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaThree/Data.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaThree/Data.php index 4d3105136..c62f00ac2 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaThree/Data.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaThree/Data.php @@ -13,7 +13,8 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Joomlaplugin\JoomlaThree; use Joomla\CMS\Factory; -use Joomla\CMS\Filter\OutputFilter; +use Joomla\CMS\Filter\OutputFilter; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Config; use VDM\Joomla\Componentbuilder\Compiler\Customcode; use VDM\Joomla\Componentbuilder\Compiler\Customcode\Gui; @@ -120,30 +121,32 @@ final class Data implements PluginDataInterface protected Filesfolders $filesfolders; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. * - * @param Config $config The Config Class. - * @param Customcode $customcode The Customcode Class. - * @param Gui $gui The Gui Class. - * @param Placeholder $placeholder The Placeholder Class. - * @param Language $language The Language Class. - * @param Field $field The Field Class. - * @param FieldName $fieldname The Name Class. - * @param Filesfolders $filesfolders The Filesfolders Class. + * @param Config $config The Config Class. + * @param Customcode $customcode The Customcode Class. + * @param Gui $gui The Gui Class. + * @param Placeholder $placeholder The Placeholder Class. + * @param Language $language The Language Class. + * @param Field $field The Field Class. + * @param FieldName $fieldname The Name Class. + * @param Filesfolders $filesfolders The Filesfolders Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 5.0.2 */ public function __construct(Config $config, Customcode $customcode, Gui $gui, Placeholder $placeholder, Language $language, Field $field, FieldName $fieldname, - Filesfolders $filesfolders) + Filesfolders $filesfolders, DatabaseInterface $db) { $this->config = $config; $this->customcode = $customcode; @@ -153,7 +156,7 @@ final class Data implements PluginDataInterface $this->field = $field; $this->fieldname = $fieldname; $this->filesfolders = $filesfolders; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaThree/Structure.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaThree/Structure.php index 79eace1a0..01ea7cf0a 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaThree/Structure.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Joomlaplugin/JoomlaThree/Structure.php @@ -37,7 +37,7 @@ use VDM\Joomla\Componentbuilder\Interfaces\Plugin\StructureInterface; * * @since 3.2.0 */ -class Structure implements StructureInterface +final class Structure implements StructureInterface { /** * The Data Class. diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Insert.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Insert.php index 68ae2b86e..deed04937 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Insert.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Insert.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Language; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; /** @@ -31,20 +31,21 @@ final class Insert protected array $items = []; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 5.0.2 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. * * @since 5.0.2 */ - public function __construct() + public function __construct(DatabaseInterface $db) { - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Multilingual.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Multilingual.php index 481ccb409..96946f198 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Multilingual.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Multilingual.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Language; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Utilities\ArrayHelper; @@ -24,20 +24,21 @@ use VDM\Joomla\Utilities\ArrayHelper; final class Multilingual { /** - * Database object to query local DB + * Joomla Database Class. * - * @since 5.0.2 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. * * @since 5.0.2 */ - public function __construct() + public function __construct(DatabaseInterface $db) { - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Purge.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Purge.php index eecc9c151..fd467ef7e 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Purge.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Purge.php @@ -12,7 +12,8 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Language; -use Joomla\CMS\Factory; +use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Componentbuilder\Compiler\Language\Update; use VDM\Joomla\Utilities\JsonHelper; use VDM\Joomla\Utilities\ArrayHelper; @@ -34,23 +35,25 @@ final class Purge protected Update $update; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 5.0.2 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor. * - * @param Update $update The Update Class. + * @param Update $update The Update Class. + * @param DatabaseInterface $db The Joomla Database Class. * * @since 5.0.2 */ - public function __construct(Update $update) + public function __construct(Update $update, DatabaseInterface $db) { $this->update = $update; - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Update.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Update.php index d870674bd..05995bcbf 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Update.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Language/Update.php @@ -12,7 +12,8 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Language; -use Joomla\CMS\Factory; +use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; /** @@ -31,11 +32,12 @@ final class Update protected array $items = []; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 5.0.2 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * User object @@ -49,9 +51,10 @@ final class Update * * @since 5.0.2 */ - public function __construct() + public function __construct(DatabaseInterface $db) { - $this->db = Factory::getDbo(); + $this->db = $db; + $this->user = Factory::getUser(); } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/Document.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/Document.php new file mode 100644 index 000000000..a2cbf3b21 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/Document.php @@ -0,0 +1,329 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Library; + + +use Joomla\CMS\Factory; +use Joomla\CMS\Language\Text; +use Joomla\CMS\Application\CMSApplication; +use VDM\Joomla\Componentbuilder\Compiler\Config; +use VDM\Joomla\Componentbuilder\Compiler\Registry; +use VDM\Joomla\Componentbuilder\Compiler\Library\IncludeHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Paths; +use VDM\Joomla\Utilities\FileHelper; +use VDM\Joomla\Utilities\ArrayHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Line; +use VDM\Joomla\Componentbuilder\Compiler\Utilities\Indent; + + +/** + * Document Include Library Helper + * + * @since 5.1.2 + */ +final class Document +{ + /** + * The Config Class. + * + * @var Config + * @since 5.1.2 + */ + protected Config $config; + + /** + * The Registry Class. + * + * @var Registry + * @since 5.1.2 + */ + protected Registry $registry; + + /** + * The IncludeHelper Class. + * + * @var IncludeHelper + * @since 5.1.2 + */ + protected IncludeHelper $includehelper; + + /** + * The Paths Class. + * + * @var Paths + * @since 5.1.2 + */ + protected Paths $paths; + + /** + * Joomla Application + * + * @var CMSApplication + * @since 5.1.2 + */ + protected CMSApplication $app; + + /** + * Track library warnings already shown. + * + * @var array + * @since 5.1.2 + */ + protected array $libwarning = []; + + /** + * Constructor. + * + * @param Config $config The Config Class. + * @param Registry $registry The Registry Class. + * @param IncludeHelper $includehelper The IncludeHelper Class. + * @param Paths $paths The Paths Class. + * @param CMSApplication $app The CMS Application Class. + * + * @since 5.1.2 + */ + public function __construct(Config $config, Registry $registry, + IncludeHelper $includehelper, Paths $paths, ?CMSApplication $app = null) + { + $this->config = $config; + $this->registry = $registry; + $this->includehelper = $includehelper; + $this->paths = $paths; + $this->app = $app ?: Factory::getApplication(); + } + + /** + * Get the generated script inclusion block for a library. + * + * @param mixed $id The library ID or GUID. + * + * @return string The document script block or empty string. + * @since 5.1.2 + */ + public function get($id): string + { + $library = $this->registry->get("builder.libraries.$id"); + + if (!is_object($library)) + { + return ''; + } + + if ( + isset($library->how, $library->conditions) && + $library->how == 2 && + ArrayHelper::check($library->conditions) + ) + { + $this->buildConditionalLibraryDocument($id, $this->buildLibraryScripts($id, false)); + } + elseif (isset($library->how) && $library->how == 1) + { + $this->buildLibraryScripts($id); + } + + if (isset($library->document) && StringHelper::check($library->document)) + { + return PHP_EOL . PHP_EOL . $library->document; + } + + return ''; + } + + /** + * Build the library document with conditional logic warning. + * + * @param mixed $id The library ID. + * @param array|null $scripts The resolved scripts array. + * + * @return void + * @since 5.1.2 + */ + protected function buildConditionalLibraryDocument($id, ?array $scripts): void + { + if (!isset($this->libwarning[$id])) + { + $this->libwarning[$id] = true; + $library = $this->registry->get("builder.libraries.$id"); + + $this->app->enqueueMessage(Text::_('COM_COMPONENTBUILDER_HR_HTHREECONDITIONAL_SCRIPT_WARNINGHTHREE'), 'Warning'); + + if (is_object($library) && isset($library->name)) + { + $this->app->enqueueMessage( + Text::sprintf('COM_COMPONENTBUILDER_THE_CONDITIONAL_SCRIPT_BUILDER_FOR_BSB_IS_NOT_READY_SORRY', + $library->name + ), + 'Warning' + ); + } + else + { + $this->app->enqueueMessage( + Text::sprintf('COM_COMPONENTBUILDER_THE_CONDITIONAL_SCRIPT_BUILDER_FOR_IDBSB_IS_NOT_READY_SORRY', + $id + ), + 'Warning' + ); + } + } + } + + /** + * Build the script include lines for a library and optionally set document output. + * + * @param mixed $id The library ID or GUID. + * @param bool $buildDoc Whether to assign generated scripts to the library document. + * + * @return array|null Returns scripts array if not setting document, or true/false on success. + * @since 5.1.2 + */ + protected function buildLibraryScripts($id, bool $buildDoc = true): ?array + { + $scripts = []; + $library = $this->registry->get("builder.libraries.$id"); + + if (!is_object($library)) + { + return null; + } + + // Process all defined URLs + if (!empty($library->urls) && ArrayHelper::check($library->urls)) + { + foreach ($library->urls as $url) + { + if (!empty($url['path'])) + { + $localPath = $this->getScriptRootPath($url['path']); + $scripts[md5($url['path'])] = $this->includehelper->get($localPath); + // load url also if not building document + if (!$buildDoc) + { + // load document script + $scripts[md5((string) $url['url'])] = $this->includehelper->get( + $url['url'] + ); + } + } + elseif (!empty($url['url'])) + { + $scripts[md5($url['url'])] = $this->includehelper->get($url['url']); + } + } + } + + // Process all defined local files + if (!empty($library->files) && ArrayHelper::check($library->files)) + { + foreach ($library->files as $file) + { + if (empty($file['path']) && empty($file['file'])) + { + continue; + } + + $relativePath = '/' . trim((string) $file['path'], '/'); + $pathInfo = pathinfo($relativePath); + $fullPath = $this->getScriptRootPath($relativePath); + + if (!empty($pathInfo['extension'])) + { + $scripts[md5($relativePath)] = $this->includehelper->get($fullPath, $pathInfo); + } + elseif (!empty($file['file'])) + { + $fileName = trim((string) $file['file'], '/'); + $scripts[md5("{$relativePath}/{$fileName}")] = $this->includehelper->get("{$fullPath}/{$fileName}"); + } + } + } + + // Process folders + if (!empty($library->folders) && ArrayHelper::check($library->folders)) + { + $files = []; + foreach ($library->folders as $folder) + { + if (!isset($folder['path'], $folder['folder'])) + { + continue; + } + + $rootPath = '/' . trim((string)$folder['path'], '/'); + $componentRoot = $this->paths->component_path . $rootPath; + + if (!empty($folder['rename']) && $folder['rename'] == 1) + { + $files[$rootPath] = FileHelper::getPaths($componentRoot) ?: []; + } + else + { + $folderPath = $rootPath . '/' . trim((string)$folder['folder'], '/'); + $files[$folderPath] = FileHelper::getPaths($this->paths->component_path . $folderPath) ?: []; + } + } + + foreach ($files as $relative => $paths) + { + $fullRoot = $this->getScriptRootPath($relative); + foreach ($paths as $subPath) + { + $key = md5("$relative/$subPath"); + $scripts[$key] = $this->includehelper->get("$fullRoot/$subPath"); + } + } + } + + // Output document if required + if ($buildDoc && ArrayHelper::check($scripts)) + { + $document = Indent::_(2) . "//" . Line::_(__LINE__, __CLASS__) . " always load these files." . PHP_EOL; + $document .= Indent::_(2) . implode(PHP_EOL . Indent::_(2), $scripts); + + $this->registry->set("builder.libraries.{$id}.document", $document); + return null; + } + + return ArrayHelper::check($scripts) ? $scripts : null; + } + + /** + * Resolve the root path for a script based on its usage location. + * + * @param string $root The root path to adjust. + * + * @return string The resolved root path. + * @since 5.1.2 + */ + protected function getScriptRootPath(string $root): string + { + if (str_contains($root, '/media/') && !str_contains($root, '/admin/') && !str_contains($root, '/site/')) + { + return str_replace('/media/', '/media/com_' . $this->config->component_code_name . '/', $root); + } + + if (!str_contains($root, '/media/') && str_contains($root, '/admin/') && !str_contains($root, '/site/')) + { + return str_replace('/admin/', '/administrator/components/com_' . $this->config->component_code_name . '/', $root); + } + + if (!str_contains($root, '/media/') && !str_contains($root, '/admin/') && str_contains($root, '/site/')) + { + return str_replace('/site/', '/components/com_' . $this->config->component_code_name . '/', $root); + } + + return $root; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/IncludeHelper.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/IncludeHelper.php new file mode 100644 index 000000000..101b386b5 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Library/IncludeHelper.php @@ -0,0 +1,48 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Library; + + +/** + * Library Include Helper + * + * @since 5.1.2 + */ +final class IncludeHelper +{ + /** + * Get the Library Include string for a given path. + * + * @param string $path The path to the library. + * @param array|null $pathInfo Optional path info (optimization if already known). + * + * @return string The include string (JS, CSS, PHP, etc.) + * @since 5.1.2 + */ + public function get(string $path, ?array $pathInfo = null): string + { + $pathInfo ??= pathinfo($path); + $extension = strtolower($pathInfo['extension'] ?? ''); + + $trimmedPath = ltrim($path, '/'); + + return match ($extension) { + 'js' => sprintf("Joomla__"."_34690c75_1090_47eb_8c06_7228dc7eedd6___Power::_('script', '%s', ['version' => 'auto']);", $trimmedPath), + 'css', + 'less' => sprintf("Joomla__"."_34690c75_1090_47eb_8c06_7228dc7eedd6___Power::_('stylesheet', '%s', ['version' => 'auto']);", $trimmedPath), + 'php' => str_starts_with($path, 'http') ? '' : sprintf('require_once("%s");', $path), + default => '', + }; + } + +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Joomlamodules.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Joomlamodules.php index 3aefad41f..29f30122e 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Joomlamodules.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Model/Joomlamodules.php @@ -12,7 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Model; -use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\Data as Module; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface as Module; use VDM\Joomla\Utilities\ArrayHelper; use VDM\Joomla\Utilities\JsonHelper; diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Power/Extractor.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Power/Extractor.php index e9c6ed871..62324f1c3 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Power/Extractor.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Power/Extractor.php @@ -12,13 +12,14 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Power; -use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use VDM\Joomla\Utilities\GuidHelper; use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Power\ExtractorInterface; /** * Compiler Power Extractor + * * @since 3.2.0 */ class Extractor implements ExtractorInterface @@ -64,20 +65,21 @@ class Extractor implements ExtractorInterface protected array $powers = []; /** - * Database object to query local DB + * Joomla Database Class. * - * @since 3.2.0 + * @var DatabaseInterface + * @since 5.1.2 **/ - protected $db; + protected DatabaseInterface $db; /** * Constructor * * @since 3.2.0 */ - public function __construct() + public function __construct(DatabaseInterface $db) { - $this->db = Factory::getDbo(); + $this->db = $db; } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Adminview.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Adminview.php index 5fb5dc36e..ffbb1c527 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Adminview.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Adminview.php @@ -74,7 +74,8 @@ class Adminview implements ServiceProviderInterface $container->get('Model.Customalias'), $container->get('Model.Sql'), $container->get('Model.Mysqlsettings'), - $container->get('Compiler.Builder.Site.Edit.View') + $container->get('Compiler.Builder.Site.Edit.View'), + $container->get('Joomla.Database') ); } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureModel.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureModel.php index b3e6b762d..2d2b21962 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureModel.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureModel.php @@ -22,6 +22,10 @@ use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model\CanEditSt use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Model\CanEditState as J5ModelCanEditState; use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Model\CanEditState as J4ModelCanEditState; use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Model\CanEditState as J3ModelCanEditState; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Model\CheckInNowInterface; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Model\CheckInNow as J5CheckInNow; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Model\CheckInNow as J4CheckInNow; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Model\CheckInNow as J3CheckInNow; /** @@ -72,6 +76,18 @@ class ArchitectureModel implements ServiceProviderInterface $container->alias(CanEditStateInterface::class, 'Architecture.Model.CanEditState') ->share('Architecture.Model.CanEditState', [$this, 'getModelCanEditState'], true); + + $container->alias(CheckInNowInterface::class, 'Architecture.Model.CheckInNow') + ->share('Architecture.Model.CheckInNow', [$this, 'getCheckInNow'], true); + + $container->alias(J5CheckInNow::class, 'Architecture.Model.J5.CheckInNow') + ->share('Architecture.Model.J5.CheckInNow', [$this, 'getJ5CheckInNow'], true); + + $container->alias(J4CheckInNow::class, 'Architecture.Model.J4.CheckInNow') + ->share('Architecture.Model.J4.CheckInNow', [$this, 'getJ4CheckInNow'], true); + + $container->alias(J3CheckInNow::class, 'Architecture.Model.J3.CheckInNow') + ->share('Architecture.Model.J3.CheckInNow', [$this, 'getJ3CheckInNow'], true); } /** @@ -204,6 +220,63 @@ class ArchitectureModel implements ServiceProviderInterface $container->get('Config'), $container->get('Compiler.Creator.Permission') ); + } + + /** + * Get The Model CanDelete Class. + * + * @param Container $container The DI container. + * + * @return CheckInNowInterface + * @since 5.1.2 + */ + public function getCheckInNow(Container $container): CheckInNowInterface + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Architecture.Model.J' . $this->targetVersion . '.CheckInNow'); + } + + /** + * Get The Model CheckInNow Class. + * + * @param Container $container The DI container. + * + * @return J5CheckInNow + * @since 5.1.2 + */ + public function getJ5CheckInNow(Container $container): J5CheckInNow + { + return new J5CheckInNow(); + } + + /** + * Get The Model CheckInNow Class. + * + * @param Container $container The DI container. + * + * @return J4CheckInNow + * @since 5.1.2 + */ + public function getJ4CheckInNow(Container $container): J4CheckInNow + { + return new J4CheckInNow(); + } + + /** + * Get The Model CheckInNow Class. + * + * @param Container $container The DI container. + * + * @return J3CheckInNow + * @since 5.1.2 + */ + public function getJ3CheckInNow(Container $container): J3CheckInNow + { + return new J3CheckInNow(); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureModule.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureModule.php new file mode 100644 index 000000000..d4744f60e --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/ArchitectureModule.php @@ -0,0 +1,596 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Compiler\Service; + + +use Joomla\DI\Container; +use Joomla\DI\ServiceProviderInterface; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\LibraryInterface as Library; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Module\Library as J5Library; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module\Library as J4Library; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module\Library as J3Library; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\TemplateInterface as Template; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Module\Template as J5Template; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module\Template as J4Template; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module\Template as J3Template; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\HelperInterface as Helper; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Module\Helper as J5Helper; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module\Helper as J4Helper; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module\Helper as J3Helper; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\DispatcherInterface as Dispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Module\Dispatcher as J5Dispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module\Dispatcher as J4Dispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module\Dispatcher as J3Dispatcher; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\Architecture\Module\ProviderInterface as Provider; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Module\Provider as J5Provider; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module\Provider as J4Provider; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module\Provider as J3Provider; +use VDM\Joomla\Componentbuilder\Interfaces\Architecture\Module\MainXMLInterface as MainXML; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFive\Module\MainXML as J5MainXML; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaFour\Module\MainXML as J4MainXML; +use VDM\Joomla\Componentbuilder\Compiler\Architecture\JoomlaThree\Module\MainXML as J3MainXML; + + +/** + * Architecture Module Service Provider + * + * @since 5.1.2 + */ +class ArchitectureModule implements ServiceProviderInterface +{ + /** + * Current Joomla Version Being Build + * + * @var int + * @since 5.1.2 + **/ + protected int $targetVersion; + + /** + * Registers the service provider with a DI container. + * + * @param Container $container The DI container. + * + * @return void + * @since 5.1.2 + */ + public function register(Container $container) + { + $container->alias(Library::class, 'Architecture.Module.Library') + ->share('Architecture.Module.Library', [$this, 'getLibrary'], true); + + $container->alias(J5Library::class, 'Architecture.Module.J5.Library') + ->share('Architecture.Module.J5.Library', [$this, 'getJ5Library'], true); + + $container->alias(J4Library::class, 'Architecture.Module.J4.Library') + ->share('Architecture.Module.J4.Library', [$this, 'getJ4Library'], true); + + $container->alias(J3Library::class, 'Architecture.Module.J3.Library') + ->share('Architecture.Module.J3.Library', [$this, 'getJ3Library'], true); + + $container->alias(Template::class, 'Architecture.Module.Template') + ->share('Architecture.Module.Template', [$this, 'getTemplate'], true); + + $container->alias(J5Template::class, 'Architecture.Module.J5.Template') + ->share('Architecture.Module.J5.Template', [$this, 'getJ5Template'], true); + + $container->alias(J4Template::class, 'Architecture.Module.J4.Template') + ->share('Architecture.Module.J4.Template', [$this, 'getJ4Template'], true); + + $container->alias(J3Template::class, 'Architecture.Module.J3.Template') + ->share('Architecture.Module.J3.Template', [$this, 'getJ3Template'], true); + + $container->alias(Helper::class, 'Architecture.Module.Helper') + ->share('Architecture.Module.Helper', [$this, 'getHelper'], true); + + $container->alias(J5Helper::class, 'Architecture.Module.J5.Helper') + ->share('Architecture.Module.J5.Helper', [$this, 'getJ5Helper'], true); + + $container->alias(J4Helper::class, 'Architecture.Module.J4.Helper') + ->share('Architecture.Module.J4.Helper', [$this, 'getJ4Helper'], true); + + $container->alias(J3Helper::class, 'Architecture.Module.J3.Helper') + ->share('Architecture.Module.J3.Helper', [$this, 'getJ3Helper'], true); + + $container->alias(Dispatcher::class, 'Architecture.Module.Dispatcher') + ->share('Architecture.Module.Dispatcher', [$this, 'getDispatcher'], true); + + $container->alias(J5Dispatcher::class, 'Architecture.Module.J5.Dispatcher') + ->share('Architecture.Module.J5.Dispatcher', [$this, 'getJ5Dispatcher'], true); + + $container->alias(J4Dispatcher::class, 'Architecture.Module.J4.Dispatcher') + ->share('Architecture.Module.J4.Dispatcher', [$this, 'getJ4Dispatcher'], true); + + $container->alias(J3Dispatcher::class, 'Architecture.Module.J3.Dispatcher') + ->share('Architecture.Module.J3.Dispatcher', [$this, 'getJ3Dispatcher'], true); + + $container->alias(Provider::class, 'Architecture.Module.Provider') + ->share('Architecture.Module.Provider', [$this, 'getProvider'], true); + + $container->alias(J5Provider::class, 'Architecture.Module.J5.Provider') + ->share('Architecture.Module.J5.Provider', [$this, 'getJ5Provider'], true); + + $container->alias(J4Provider::class, 'Architecture.Module.J4.Provider') + ->share('Architecture.Module.J4.Provider', [$this, 'getJ4Provider'], true); + + $container->alias(J3Provider::class, 'Architecture.Module.J3.Provider') + ->share('Architecture.Module.J3.Provider', [$this, 'getJ3Provider'], true); + + $container->alias(MainXML::class, 'Architecture.Module.MainXML') + ->share('Architecture.Module.MainXML', [$this, 'getMainXML'], true); + + $container->alias(J5MainXML::class, 'Architecture.Module.J5.MainXML') + ->share('Architecture.Module.J5.MainXML', [$this, 'getJ5MainXML'], true); + + $container->alias(J4MainXML::class, 'Architecture.Module.J4.MainXML') + ->share('Architecture.Module.J4.MainXML', [$this, 'getJ4MainXML'], true); + + $container->alias(J3MainXML::class, 'Architecture.Module.J3.MainXML') + ->share('Architecture.Module.J3.MainXML', [$this, 'getJ3MainXML'], true); + } + + /** + * Get The Library Class. + * + * @param Container $container The DI container. + * + * @return Library + * @since 5.1.2 + */ + public function getLibrary(Container $container): Library + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Architecture.Module.J' . $this->targetVersion . '.Library'); + } + + /** + * Get The Library Class. + * + * @param Container $container The DI container. + * + * @return J5Library + * @since 5.1.2 + */ + public function getJ5Library(Container $container): J5Library + { + return new J5Library( + $container->get('Compiler.Builder.Library.Manager'), + $container->get('Library.Document'), + $container->get('Registry'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Library Class. + * + * @param Container $container The DI container. + * + * @return J4Library + * @since 5.1.2 + */ + public function getJ4Library(Container $container): J4Library + { + return new J4Library( + $container->get('Compiler.Builder.Library.Manager'), + $container->get('Library.Document'), + $container->get('Registry'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Library Class. + * + * @param Container $container The DI container. + * + * @return J3Library + * @since 5.1.2 + */ + public function getJ3Library(Container $container): J3Library + { + return new J3Library( + $container->get('Compiler.Builder.Library.Manager'), + $container->get('Library.Document'), + $container->get('Registry'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Template Class. + * + * @param Container $container The DI container. + * + * @return Template + * @since 5.1.2 + */ + public function getTemplate(Container $container): Template + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Architecture.Module.J' . $this->targetVersion . '.Template'); + } + + /** + * Get The Template Class. + * + * @param Container $container The DI container. + * + * @return J5Template + * @since 5.1.2 + */ + public function getJ5Template(Container $container): J5Template + { + return new J5Template( + $container->get('Config'), + $container->get('Header'), + $container->get('Customcode.Dispenser'), + $container->get('Compiler.Builder.Template.Data'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Content.Multi') + ); + } + + /** + * Get The Template Class. + * + * @param Container $container The DI container. + * + * @return J4Template + * @since 5.1.2 + */ + public function getJ4Template(Container $container): J4Template + { + return new J4Template( + $container->get('Config'), + $container->get('Header'), + $container->get('Customcode.Dispenser'), + $container->get('Compiler.Builder.Template.Data'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Content.Multi') + ); + } + + /** + * Get The Template Class. + * + * @param Container $container The DI container. + * + * @return J3Template + * @since 5.1.2 + */ + public function getJ3Template(Container $container): J3Template + { + return new J3Template( + $container->get('Config'), + $container->get('Customcode.Dispenser'), + $container->get('Compiler.Builder.Template.Data'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Content.Multi') + ); + } + + /** + * Get The Helper Class. + * + * @param Container $container The DI container. + * + * @return Helper + * @since 5.1.2 + */ + public function getHelper(Container $container): Helper + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Architecture.Module.J' . $this->targetVersion . '.Helper'); + } + + /** + * Get The Helper Class. + * + * @param Container $container The DI container. + * + * @return J5Helper + * @since 5.1.2 + */ + public function getJ5Helper(Container $container): J5Helper + { + return new J5Helper( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Helper Class. + * + * @param Container $container The DI container. + * + * @return J4Helper + * @since 5.1.2 + */ + public function getJ4Helper(Container $container): J4Helper + { + return new J4Helper( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Helper Class. + * + * @param Container $container The DI container. + * + * @return J3Helper + * @since 5.1.2 + */ + public function getJ3Helper(Container $container): J3Helper + { + return new J3Helper( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Dispatcher Class. + * + * @param Container $container The DI container. + * + * @return Dispatcher + * @since 5.1.2 + */ + public function getDispatcher(Container $container): Dispatcher + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Architecture.Module.J' . $this->targetVersion . '.Dispatcher'); + } + + /** + * Get The Dispatcher Class. + * + * @param Container $container The DI container. + * + * @return J5Dispatcher + * @since 5.1.2 + */ + public function getJ5Dispatcher(Container $container): J5Dispatcher + { + return new J5Dispatcher( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Architecture.Module.Library') + ); + } + + /** + * Get The Dispatcher Class. + * + * @param Container $container The DI container. + * + * @return J4Dispatcher + * @since 5.1.2 + */ + public function getJ4Dispatcher(Container $container): J4Dispatcher + { + return new J4Dispatcher( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Architecture.Module.Library') + ); + } + + /** + * Get The Dispatcher Class. + * + * @param Container $container The DI container. + * + * @return J3Dispatcher + * @since 5.1.2 + */ + public function getJ3Dispatcher(Container $container): J3Dispatcher + { + return new J3Dispatcher( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Architecture.Module.Library') + ); + } + + /** + * Get The ProviderInterface Class. + * + * @param Container $container The DI container. + * + * @return Provider + * @since 5.1.2 + */ + public function getProvider(Container $container): Provider + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Architecture.Module.J' . $this->targetVersion . '.Provider'); + } + + /** + * Get The Provider Class. + * + * @param Container $container The DI container. + * + * @return J5Provider + * @since 5.1.2 + */ + public function getJ5Provider(Container $container): J5Provider + { + return new J5Provider( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Provider Class. + * + * @param Container $container The DI container. + * + * @return J4Provider + * @since 5.1.2 + */ + public function getJ4Provider(Container $container): J4Provider + { + return new J4Provider( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Provider Class. + * + * @param Container $container The DI container. + * + * @return J3Provider + * @since 5.1.2 + */ + public function getJ3Provider(Container $container): J3Provider + { + return new J3Provider( + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The MainXML Class. + * + * @param Container $container The DI container. + * + * @return MainXML + * @since 5.1.2 + */ + public function getMainXML(Container $container): MainXML + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Architecture.Module.J' . $this->targetVersion . '.MainXML'); + } + + /** + * Get The MainXML Class. + * + * @param Container $container The DI container. + * + * @return J5MainXML + * @since 5.1.2 + */ + public function getJ5MainXML(Container $container): J5MainXML + { + return new J5MainXML( + $container->get('Config'), + $container->get('Language'), + $container->get('Language.Set'), + $container->get('Language.Purge'), + $container->get('Language.Translation'), + $container->get('Language.Multilingual'), + $container->get('Event'), + $container->get('Compiler.Creator.Fieldset.Extension'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Languages'), + $container->get('Compiler.Builder.Multilingual'), + $container->get('Utilities.Counter'), + $container->get('Utilities.File') + ); + } + + /** + * Get The MainXML Class. + * + * @param Container $container The DI container. + * + * @return J4MainXML + * @since 5.1.2 + */ + public function getJ4MainXML(Container $container): J4MainXML + { + return new J4MainXML( + $container->get('Config'), + $container->get('Language'), + $container->get('Language.Set'), + $container->get('Language.Purge'), + $container->get('Language.Translation'), + $container->get('Language.Multilingual'), + $container->get('Event'), + $container->get('Compiler.Creator.Fieldset.Extension'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Languages'), + $container->get('Compiler.Builder.Multilingual'), + $container->get('Utilities.Counter'), + $container->get('Utilities.File') + ); + } + + /** + * Get The MainXML Class. + * + * @param Container $container The DI container. + * + * @return J3MainXML + * @since 5.1.2 + */ + public function getJ3MainXML(Container $container): J3MainXML + { + return new J3MainXML( + $container->get('Config'), + $container->get('Language'), + $container->get('Language.Set'), + $container->get('Language.Purge'), + $container->get('Language.Translation'), + $container->get('Language.Multilingual'), + $container->get('Event'), + $container->get('Compiler.Creator.Fieldset.Extension'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Languages'), + $container->get('Compiler.Builder.Multilingual'), + $container->get('Utilities.Counter'), + $container->get('Utilities.File') + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/BuilderAJ.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/BuilderAJ.php index 61eae650f..7937dcdc7 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/BuilderAJ.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/BuilderAJ.php @@ -40,6 +40,7 @@ use VDM\Joomla\Componentbuilder\Compiler\Builder\DatabaseTables; use VDM\Joomla\Componentbuilder\Compiler\Builder\DatabaseUniqueGuid; use VDM\Joomla\Componentbuilder\Compiler\Builder\DatabaseUniqueKeys; use VDM\Joomla\Componentbuilder\Compiler\Builder\DatabaseUninstall; +use VDM\Joomla\Componentbuilder\Compiler\Builder\EventDispatcher; use VDM\Joomla\Componentbuilder\Compiler\Builder\DoNotEscape; use VDM\Joomla\Componentbuilder\Compiler\Builder\DynamicFields; use VDM\Joomla\Componentbuilder\Compiler\Builder\ExtensionCustomFields; @@ -160,6 +161,9 @@ class BuilderAJ implements ServiceProviderInterface $container->alias(DatabaseUninstall::class, 'Compiler.Builder.Database.Uninstall') ->share('Compiler.Builder.Database.Uninstall', [$this, 'getDatabaseUninstall'], true); + $container->alias(EventDispatcher::class, 'Compiler.Builder.Event.Dispatcher') + ->share('Compiler.Builder.Event.Dispatcher', [$this, 'getEventDispatcher'], true); + $container->alias(DoNotEscape::class, 'Compiler.Builder.Do.Not.Escape') ->share('Compiler.Builder.Do.Not.Escape', [$this, 'getDoNotEscape'], true); @@ -561,13 +565,27 @@ class BuilderAJ implements ServiceProviderInterface * @param Container $container The DI container. * * @return DatabaseUninstall - * @since 3.2.0 + * @since 3.2.0 */ public function getDatabaseUninstall(Container $container): DatabaseUninstall { return new DatabaseUninstall(); } + /** + * Get The EventDispatcher Class. + * + * @param Container $container The DI container. + * + * @return EventDispatcher + * @since 5.1.2 + */ + public function getEventDispatcher(Container $container): EventDispatcher + { + return new EventDispatcher(); + } + + /** * Get The DoNotEscape Class. * diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Component.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Component.php index 093d0b655..6007d5b59 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Component.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Component.php @@ -194,7 +194,8 @@ class Component implements ServiceProviderInterface public function getPlaceholder(Container $container): Placeholder { return new Placeholder( - $container->get('Config') + $container->get('Config'), + $container->get('Joomla.Database') ); } @@ -229,7 +230,8 @@ class Component implements ServiceProviderInterface $container->get('Model.Updateserver'), $container->get('Model.Joomlamodules'), $container->get('Model.Joomlaplugins'), - $container->get('Model.Router') + $container->get('Model.Router'), + $container->get('Joomla.Database') ); } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customcode.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customcode.php index c4bd7dc67..698601af8 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customcode.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customcode.php @@ -83,7 +83,8 @@ class Customcode implements ServiceProviderInterface $container->get('Language.Extractor'), $container->get('Power.Extractor'), $container->get('Joomla.Power.Extractor'), - $container->get('Customcode.External') + $container->get('Customcode.External'), + $container->get('Joomla.Database') ); } @@ -98,7 +99,8 @@ class Customcode implements ServiceProviderInterface public function getExternal(Container $container): External { return new External( - $container->get('Placeholder') + $container->get('Placeholder'), + $container->get('Joomla.Database') ); } @@ -114,7 +116,9 @@ class Customcode implements ServiceProviderInterface { return new Gui( $container->get('Config'), - $container->get('Placeholder.Reverse') + $container->get('Placeholder.Reverse'), + $container->get('Power.Parser'), + $container->get('Joomla.Database') ); } @@ -182,7 +186,8 @@ class Customcode implements ServiceProviderInterface $container->get('Placeholder'), $container->get('Component.Placeholder'), $container->get('Customcode'), - $container->get('Language.Extractor') + $container->get('Language.Extractor'), + $container->get('Joomla.Database') ); } @@ -202,9 +207,9 @@ class Customcode implements ServiceProviderInterface $container->get('Customcode.Extractor.Paths'), $container->get('Placeholder.Reverse'), $container->get('Component.Placeholder'), - $container->get('Utilities.Pathfix') + $container->get('Utilities.Pathfix'), + $container->get('Joomla.Database') ); - } - + } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customview.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customview.php index 349b31f2d..4aa6cbb25 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customview.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Customview.php @@ -17,6 +17,23 @@ use Joomla\DI\ServiceProviderInterface; use VDM\Joomla\Componentbuilder\Compiler\Customview\Data as CustomviewData; use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Data as DynamicgetData; use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Selection as DynamicgetSelection; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Methods; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\GetItems; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\GetItem; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\ListQuery; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\CustomGetMethods; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Queries; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryFilter; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryWhere; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryOrder; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\QueryGroup; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\UikitLoader; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\Globals; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\CustomJoin; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\JoinStructure; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\DecodeColumn; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\FilterColumn; +use VDM\Joomla\Componentbuilder\Compiler\Dynamicget\FieldonContentPrepare; /** @@ -32,7 +49,7 @@ class Customview implements ServiceProviderInterface * @param Container $container The DI container. * * @return void - * @since 3.2.0 + * @since 3.2.0 */ public function register(Container $container) { @@ -44,6 +61,57 @@ class Customview implements ServiceProviderInterface $container->alias(DynamicgetSelection::class, 'Dynamicget.Selection') ->share('Dynamicget.Selection', [$this, 'getDynamicgetSelection'], true); + + $container->alias(Methods::class, 'Dynamicget.Methods') + ->share('Dynamicget.Methods', [$this, 'getMethods'], true); + + $container->alias(GetItems::class, 'Dynamicget.GetItems') + ->share('Dynamicget.GetItems', [$this, 'getGetItems'], true); + + $container->alias(GetItem::class, 'Dynamicget.GetItem') + ->share('Dynamicget.GetItem', [$this, 'getGetItem'], true); + + $container->alias(ListQuery::class, 'Dynamicget.ListQuery') + ->share('Dynamicget.ListQuery', [$this, 'getListQuery'], true); + + $container->alias(CustomGetMethods::class, 'Dynamicget.CustomGetMethods') + ->share('Dynamicget.CustomGetMethods', [$this, 'getCustomGetMethods'], true); + + $container->alias(Queries::class, 'Dynamicget.Queries') + ->share('Dynamicget.Queries', [$this, 'getQueries'], true); + + $container->alias(QueryFilter::class, 'Dynamicget.QueryFilter') + ->share('Dynamicget.QueryFilter', [$this, 'getQueryFilter'], true); + + $container->alias(QueryWhere::class, 'Dynamicget.QueryWhere') + ->share('Dynamicget.QueryWhere', [$this, 'getQueryWhere'], true); + + $container->alias(QueryOrder::class, 'Dynamicget.QueryOrder') + ->share('Dynamicget.QueryOrder', [$this, 'getQueryOrder'], true); + + $container->alias(QueryGroup::class, 'Dynamicget.QueryGroup') + ->share('Dynamicget.QueryGroup', [$this, 'getQueryGroup'], true); + + $container->alias(UikitLoader::class, 'Dynamicget.UikitLoader') + ->share('Dynamicget.UikitLoader', [$this, 'getUikitLoader'], true); + + $container->alias(Globals::class, 'Dynamicget.Globals') + ->share('Dynamicget.Globals', [$this, 'getGlobals'], true); + + $container->alias(CustomJoin::class, 'Dynamicget.CustomJoin') + ->share('Dynamicget.CustomJoin', [$this, 'getCustomJoin'], true); + + $container->alias(JoinStructure::class, 'Dynamicget.JoinStructure') + ->share('Dynamicget.JoinStructure', [$this, 'getJoinStructure'], true); + + $container->alias(DecodeColumn::class, 'Dynamicget.DecodeColumn') + ->share('Dynamicget.DecodeColumn', [$this, 'getDecodeColumn'], true); + + $container->alias(FilterColumn::class, 'Dynamicget.FilterColumn') + ->share('Dynamicget.FilterColumn', [$this, 'getFilterColumn'], true); + + $container->alias(FieldonContentPrepare::class, 'Dynamicget.FieldonContentPrepare') + ->share('Dynamicget.FieldonContentPrepare', [$this, 'getFieldonContentPrepare'], true); } /** @@ -52,7 +120,7 @@ class Customview implements ServiceProviderInterface * @param Container $container The DI container. * * @return CustomviewData - * @since 3.2.0 + * @since 3.2.0 */ public function getCustomviewData(Container $container): CustomviewData { @@ -69,7 +137,8 @@ class Customview implements ServiceProviderInterface $container->get('Model.Csscustomview'), $container->get('Model.Phpcustomview'), $container->get('Model.Ajaxcustomview'), - $container->get('Model.Custombuttons') + $container->get('Model.Custombuttons'), + $container->get('Joomla.Database') ); } @@ -90,7 +159,8 @@ class Customview implements ServiceProviderInterface $container->get('Customcode'), $container->get('Customcode.Dispenser'), $container->get('Customcode.Gui'), - $container->get('Model.Dynamicget') + $container->get('Model.Dynamicget'), + $container->get('Joomla.Database') ); } @@ -107,7 +177,343 @@ class Customview implements ServiceProviderInterface return new DynamicgetSelection( $container->get('Config'), $container->get('Compiler.Builder.Get.As.Lookup'), - $container->get('Compiler.Builder.Site.Fields') + $container->get('Compiler.Builder.Site.Fields'), + $container->get('Joomla.Database') + ); + } + + /** + * Get The Methods Class. + * + * @param Container $container The DI container. + * + * @return Methods + * @since 5.1.2 + */ + public function getMethods(Container $container): Methods + { + return new Methods( + $container->get('Config'), + $container->get('Placeholder'), + $container->get('Dynamicget.GetItem'), + $container->get('Dynamicget.GetItems'), + $container->get('Dynamicget.ListQuery'), + $container->get('Dynamicget.CustomGetMethods'), + $container->get('Dynamicget.UikitLoader') + ); + } + + /** + * Get The GetItems Class. + * + * @param Container $container The DI container. + * + * @return GetItems + * @since 5.1.2 + */ + public function getGetItems(Container $container): GetItems + { + return new GetItems( + $container->get('Config'), + $container->get('Compiler.Builder.Site.Decrypt'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Site.Field.Data'), + $container->get('Compiler.Builder.Site.Field.Decode.Filter'), + $container->get('Compiler.Builder.Model.Expert.Field.Initiator'), + $container->get('Compiler.Builder.Event.Dispatcher'), + $container->get('Dynamicget.DecodeColumn'), + $container->get('Dynamicget.FilterColumn'), + $container->get('Dynamicget.FieldonContentPrepare'), + $container->get('Dynamicget.UikitLoader'), + $container->get('Dynamicget.Globals'), + $container->get('Dynamicget.CustomJoin') + ); + } + + /** + * Get The GetItem Class. + * + * @param Container $container The DI container. + * + * @return GetItem + * @since 5.1.2 + */ + public function getGetItem(Container $container): GetItem + { + return new GetItem( + $container->get('Config'), + $container->get('Compiler.Builder.Site.Decrypt'), + $container->get('Placeholder'), + $container->get('Language'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Site.Field.Data'), + $container->get('Compiler.Builder.Site.Field.Decode.Filter'), + $container->get('Compiler.Builder.Model.Expert.Field.Initiator'), + $container->get('Compiler.Builder.Event.Dispatcher'), + $container->get('Dynamicget.DecodeColumn'), + $container->get('Dynamicget.FilterColumn'), + $container->get('Dynamicget.FieldonContentPrepare'), + $container->get('Dynamicget.UikitLoader'), + $container->get('Dynamicget.Globals'), + $container->get('Dynamicget.CustomJoin'), + $container->get('Dynamicget.Queries'), + $container->get('Dynamicget.QueryFilter'), + $container->get('Dynamicget.QueryWhere'), + $container->get('Dynamicget.QueryOrder'), + $container->get('Dynamicget.QueryGroup') + ); + } + + /** + * Get The ListQuery Class. + * + * @param Container $container The DI container. + * + * @return ListQuery + * @since 5.1.2 + */ + public function getListQuery(Container $container): ListQuery + { + return new ListQuery( + $container->get('Config'), + $container->get('Customcode.Dispenser'), + $container->get('Dynamicget.Queries'), + $container->get('Dynamicget.QueryFilter'), + $container->get('Dynamicget.QueryWhere'), + $container->get('Dynamicget.QueryOrder'), + $container->get('Dynamicget.QueryGroup') + ); + } + + /** + * Get The CustomGetMethods Class. + * + * @param Container $container The DI container. + * + * @return CustomGetMethods + * @since 5.1.2 + */ + public function getCustomGetMethods(Container $container): CustomGetMethods + { + return new CustomGetMethods( + $container->get('Config'), + $container->get('Placeholder'), + $container->get('Dynamicget.FieldonContentPrepare'), + $container->get('Dynamicget.JoinStructure'), + $container->get('Dynamicget.DecodeColumn'), + $container->get('Dynamicget.FilterColumn'), + $container->get('Dynamicget.UikitLoader'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Site.Decrypt'), + $container->get('Compiler.Builder.Model.Expert.Field.Initiator'), + $container->get('Compiler.Builder.Site.Field.Data'), + $container->get('Compiler.Builder.Site.Field.Decode.Filter'), + $container->get('Compiler.Builder.Other.Join'), + $container->get('Compiler.Builder.Other.Query'), + $container->get('Compiler.Builder.Other.Filter'), + $container->get('Compiler.Builder.Other.Where'), + $container->get('Compiler.Builder.Other.Order'), + $container->get('Compiler.Builder.Other.Group'), + $container->get('Compiler.Builder.Event.Dispatcher') + ); + } + + /** + * Get The Queries Class. + * + * @param Container $container The DI container. + * + * @return Queries + * @since 5.1.2 + */ + public function getQueries(Container $container): Queries + { + return new Queries( + $container->get('Config'), + $container->get('Dynamicget.JoinStructure'), + $container->get('Compiler.Builder.Site.Dynamic.Get'), + $container->get('Compiler.Builder.Other.Query'), + $container->get('Placeholder') + ); + } + + /** + * Get The QueryFilter Class. + * + * @param Container $container The DI container. + * + * @return QueryFilter + * @since 5.1.2 + */ + public function getQueryFilter(Container $container): QueryFilter + { + return new QueryFilter( + $container->get('Config'), + $container->get('Compiler.Builder.Site.Field.Data'), + $container->get('Compiler.Builder.Site.Field.Decode.Filter'), + $container->get('Compiler.Builder.Site.Main.Get'), + $container->get('Compiler.Builder.Other.Filter') + ); + } + + /** + * Get The QueryWhere Class. + * + * @param Container $container The DI container. + * + * @return QueryWhere + * @since 5.1.2 + */ + public function getQueryWhere(Container $container): QueryWhere + { + return new QueryWhere( + $container->get('Config'), + $container->get('Compiler.Builder.Other.Where'), + $container->get('Compiler.Builder.Site.Main.Get') + ); + } + + /** + * Get The QueryOrder Class. + * + * @param Container $container The DI container. + * + * @return QueryOrder + * @since 5.1.2 + */ + public function getQueryOrder(Container $container): QueryOrder + { + return new QueryOrder( + $container->get('Config'), + $container->get('Compiler.Builder.Other.Order'), + $container->get('Compiler.Builder.Site.Main.Get') + ); + } + + /** + * Get The QueryGroup Class. + * + * @param Container $container The DI container. + * + * @return QueryGroup + * @since 5.1.2 + */ + public function getQueryGroup(Container $container): QueryGroup + { + return new QueryGroup( + $container->get('Config'), + $container->get('Compiler.Builder.Other.Group'), + $container->get('Compiler.Builder.Site.Main.Get') + ); + } + + /** + * Get The UikitLoader Class. + * + * @param Container $container The DI container. + * + * @return UikitLoader + * @since 5.1.2 + */ + public function getUikitLoader(Container $container): UikitLoader + { + return new UikitLoader( + $container->get('Config'), + $container->get('Compiler.Builder.Content.One') + ); + } + + /** + * Get The Globals Class. + * + * @param Container $container The DI container. + * + * @return Globals + * @since 5.1.2 + */ + public function getGlobals(Container $container): Globals + { + return new Globals(); + } + + /** + * Get The CustomJoin Class. + * + * @param Container $container The DI container. + * + * @return CustomJoin + * @since 5.1.2 + */ + public function getCustomJoin(Container $container): CustomJoin + { + return new CustomJoin( + $container->get('Config'), + $container->get('Compiler.Builder.Site.Dynamic.Get'), + $container->get('Compiler.Builder.Other.Join'), + $container->get('Compiler.Builder.Get.As.Lookup'), + $container->get('Dynamicget.JoinStructure') + ); + } + + /** + * Get The JoinStructure Class. + * + * @param Container $container The DI container. + * + * @return JoinStructure + * @since 5.1.2 + */ + public function getJoinStructure(Container $container): JoinStructure + { + return new JoinStructure(); + } + + /** + * Get The DecodeColumn Class. + * + * @param Container $container The DI container. + * + * @return DecodeColumn + * @since 5.1.2 + */ + public function getDecodeColumn(Container $container): DecodeColumn + { + return new DecodeColumn( + $container->get('Config'), + $container->get('Placeholder'), + $container->get('Compiler.Builder.Model.Expert.Field'), + $container->get('Compiler.Builder.Site.Decrypt') + ); + } + + /** + * Get The FilterColumn Class. + * + * @param Container $container The DI container. + * + * @return FilterColumn + * @since 5.1.2 + */ + public function getFilterColumn(Container $container): FilterColumn + { + return new FilterColumn(); + } + + /** + * Get The FieldonContentPrepare Class. + * + * @param Container $container The DI container. + * + * @return FieldonContentPrepare + * @since 5.1.2 + */ + public function getFieldonContentPrepare(Container $container): FieldonContentPrepare + { + return new FieldonContentPrepare( + $container->get('Config'), + $container->get('Compiler.Builder.Content.One'), + $container->get('Compiler.Builder.Event.Dispatcher') ); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Field.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Field.php index b4fa47979..8b7c31ff1 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Field.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Field.php @@ -162,7 +162,8 @@ class Field implements ServiceProviderInterface $container->get('Placeholder'), $container->get('Customcode'), $container->get('Field.Customcode'), - $container->get('Field.Rule') + $container->get('Field.Rule'), + $container->get('Joomla.Database') ); } @@ -176,7 +177,9 @@ class Field implements ServiceProviderInterface */ public function getGroups(Container $container): Groups { - return new Groups(); + return new Groups( + $container->get('Joomla.Database') + ); } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/History.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/History.php index 9beb59d9c..87c09f02b 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/History.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/History.php @@ -88,7 +88,8 @@ class History implements ServiceProviderInterface public function getJ3History(Container $container): J3History { return new J3History( - $container->get('Config') + $container->get('Config'), + $container->get('Joomla.Database') ); } @@ -103,7 +104,8 @@ class History implements ServiceProviderInterface public function getJ4History(Container $container): J4History { return new J4History( - $container->get('Config') + $container->get('Config'), + $container->get('Joomla.Database') ); } @@ -118,7 +120,8 @@ class History implements ServiceProviderInterface public function getJ5History(Container $container): J5History { return new J5History( - $container->get('Config') + $container->get('Config'), + $container->get('Joomla.Database') ); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/JoomlaPower.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/JoomlaPower.php index ff9385516..541292ce2 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/JoomlaPower.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/JoomlaPower.php @@ -73,7 +73,8 @@ class JoomlaPower implements ServiceProviderInterface $container->get('Placeholder'), $container->get('Customcode'), $container->get('Customcode.Gui'), - $container->get('Joomla.Power.Remote.Get') + $container->get('Joomla.Power.Remote.Get'), + $container->get('Joomla.Database') ); } @@ -141,6 +142,7 @@ class JoomlaPower implements ServiceProviderInterface public function getExtractor(Container $container): Extractor { return new Extractor( + $container->get('Joomla.Database'), $container->get('Config')->joomla_version ); } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Joomlamodule.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Joomlamodule.php index 1aaccae64..d7bddeb35 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Joomlamodule.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Joomlamodule.php @@ -14,32 +14,98 @@ namespace VDM\Joomla\Componentbuilder\Compiler\Service; use Joomla\DI\Container; use Joomla\DI\ServiceProviderInterface; -use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\Data; -use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\Structure; +use VDM\Joomla\Componentbuilder\Compiler\Interfaces\ModuleDataInterface as Data; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaThree\Data as J3Data; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFour\Data as J4Data; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFive\Data as J5Data; +use VDM\Joomla\Componentbuilder\Interfaces\Module\StructureInterface as Structure; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaThree\Structure as J3Structure; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFour\Structure as J4Structure; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFive\Structure as J5Structure; +use VDM\Joomla\Componentbuilder\Interfaces\Module\InfusionInterface as Infusion; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaThree\Infusion as J3Infusion; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFour\Infusion as J4Infusion; +use VDM\Joomla\Componentbuilder\Compiler\Joomlamodule\JoomlaFive\Infusion as J5Infusion; /** * Joomla Module Service Provider * - * @since 3.2.0 + * @since 5.1.2 */ class Joomlamodule implements ServiceProviderInterface { + /** + * Current Joomla Version Being Build + * + * @var int + * @since 5.1.2 + **/ + protected $targetVersion; + /** * Registers the service provider with a DI container. * * @param Container $container The DI container. * * @return void - * @since 3.2.0 + * @since 5.1.2 */ public function register(Container $container) { $container->alias(Data::class, 'Joomlamodule.Data') ->share('Joomlamodule.Data', [$this, 'getData'], true); + $container->alias(J3Data::class, 'Joomlamodule.J3.Data') + ->share('Joomlamodule.J3.Data', [$this, 'getJ3Data'], true); + + $container->alias(J4Data::class, 'Joomlamodule.J4.Data') + ->share('Joomlamodule.J4.Data', [$this, 'getJ4Data'], true); + + $container->alias(J5Data::class, 'Joomlamodule.J5.Data') + ->share('Joomlamodule.J5.Data', [$this, 'getJ5Data'], true); + $container->alias(Structure::class, 'Joomlamodule.Structure') ->share('Joomlamodule.Structure', [$this, 'getStructure'], true); + + $container->alias(J3Structure::class, 'Joomlamodule.J3.Structure') + ->share('Joomlamodule.J3.Structure', [$this, 'getJ3Structure'], true); + + $container->alias(J4Structure::class, 'Joomlamodule.J4.Structure') + ->share('Joomlamodule.J4.Structure', [$this, 'getJ4Structure'], true); + + $container->alias(J5Structure::class, 'Joomlamodule.J5.Structure') + ->share('Joomlamodule.J5.Structure', [$this, 'getJ5Structure'], true); + + $container->alias(Infusion::class, 'Joomlamodule.Infusion') + ->share('Joomlamodule.Infusion', [$this, 'getInfusion'], true); + + $container->alias(J3Infusion::class, 'Joomlamodule.J3.Infusion') + ->share('Joomlamodule.J3.Infusion', [$this, 'getJ3Infusion'], true); + + $container->alias(J4Infusion::class, 'Joomlamodule.J4.Infusion') + ->share('Joomlamodule.J4.Infusion', [$this, 'getJ4Infusion'], true); + + $container->alias(J5Infusion::class, 'Joomlamodule.J5.Infusion') + ->share('Joomlamodule.J5.Infusion', [$this, 'getJ5Infusion'], true); + } + + /** + * Get The ModuleDataInterface Class. + * + * @param Container $container The DI container. + * + * @return Data + * @since 5.1.2 + */ + public function getData(Container $container): Data + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Joomlamodule.J' . $this->targetVersion . '.Data'); } /** @@ -47,12 +113,12 @@ class Joomlamodule implements ServiceProviderInterface * * @param Container $container The DI container. * - * @return Data - * @since 3.2.0 + * @return J3Data + * @since 5.1.2 */ - public function getData(Container $container): Data + public function getJ3Data(Container $container): J3Data { - return new Data( + return new J3Data( $container->get('Config'), $container->get('Customcode'), $container->get('Customcode.Gui'), @@ -63,21 +129,92 @@ class Joomlamodule implements ServiceProviderInterface $container->get('Model.Filesfolders'), $container->get('Model.Libraries'), $container->get('Dynamicget.Data'), - $container->get('Templatelayout.Data') + $container->get('Templatelayout.Data'), + $container->get('Joomla.Database') ); } + /** + * Get The Data Class. + * + * @param Container $container The DI container. + * + * @return J4Data + * @since 5.1.2 + */ + public function getJ4Data(Container $container): J4Data + { + return new J4Data( + $container->get('Config'), + $container->get('Customcode'), + $container->get('Customcode.Gui'), + $container->get('Placeholder'), + $container->get('Language'), + $container->get('Field'), + $container->get('Field.Name'), + $container->get('Model.Filesfolders'), + $container->get('Model.Libraries'), + $container->get('Dynamicget.Data'), + $container->get('Templatelayout.Data'), + $container->get('Joomla.Database') + ); + } + + /** + * Get The Data Class. + * + * @param Container $container The DI container. + * + * @return J5Data + * @since 5.1.2 + */ + public function getJ5Data(Container $container): J5Data + { + return new J5Data( + $container->get('Config'), + $container->get('Customcode'), + $container->get('Customcode.Gui'), + $container->get('Placeholder'), + $container->get('Language'), + $container->get('Field'), + $container->get('Field.Name'), + $container->get('Model.Filesfolders'), + $container->get('Model.Libraries'), + $container->get('Dynamicget.Data'), + $container->get('Templatelayout.Data'), + $container->get('Joomla.Database') + ); + } + + /** + * Get The StructureInterface Class. + * + * @param Container $container The DI container. + * + * @return Structure + * @since 5.1.2 + */ + public function getStructure(Container $container): Structure + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Joomlamodule.J' . $this->targetVersion . '.Structure'); + } + /** * Get The Structure Class. * * @param Container $container The DI container. * - * @return Structure - * @since 3.2.0 + * @return J3Structure + * @since 5.1.2 */ - public function getStructure(Container $container): Structure + public function getJ3Structure(Container $container): J3Structure { - return new Structure( + return new J3Structure( $container->get('Joomlamodule.Data'), $container->get('Component'), $container->get('Config'), @@ -90,6 +227,156 @@ class Joomlamodule implements ServiceProviderInterface $container->get('Utilities.Files'), $container->get('Compiler.Builder.Template.Data') ); + } + + /** + * Get The Structure Class. + * + * @param Container $container The DI container. + * + * @return J4Structure + * @since 5.1.2 + */ + public function getJ4Structure(Container $container): J4Structure + { + return new J4Structure( + $container->get('Joomlamodule.Data'), + $container->get('Component'), + $container->get('Config'), + $container->get('Registry'), + $container->get('Customcode.Dispenser'), + $container->get('Event'), + $container->get('Utilities.Counter'), + $container->get('Utilities.Folder'), + $container->get('Utilities.File'), + $container->get('Utilities.Files'), + $container->get('Compiler.Builder.Template.Data'), + $container->get('Placeholder') + ); + } + + /** + * Get The Structure Class. + * + * @param Container $container The DI container. + * + * @return J5Structure + * @since 5.1.2 + */ + public function getJ5Structure(Container $container): J5Structure + { + return new J5Structure( + $container->get('Joomlamodule.Data'), + $container->get('Component'), + $container->get('Config'), + $container->get('Registry'), + $container->get('Customcode.Dispenser'), + $container->get('Event'), + $container->get('Utilities.Counter'), + $container->get('Utilities.Folder'), + $container->get('Utilities.File'), + $container->get('Utilities.Files'), + $container->get('Compiler.Builder.Template.Data'), + $container->get('Placeholder') + ); + } + + /** + * Get The InfusionInterface Class. + * + * @param Container $container The DI container. + * + * @return Infusion + * @since 5.1.2 + */ + public function getInfusion(Container $container): Infusion + { + if (empty($this->targetVersion)) + { + $this->targetVersion = $container->get('Config')->joomla_version; + } + + return $container->get('Joomlamodule.J' . $this->targetVersion . '.Infusion'); + } + + /** + * Get The Infusion Class. + * + * @param Container $container The DI container. + * + * @return J3Infusion + * @since 5.1.2 + */ + public function getJ3Infusion(Container $container): J3Infusion + { + return new J3Infusion( + $container->get('Config'), + $container->get('Architecture.Module.Dispatcher'), + $container->get('Architecture.Module.Template'), + $container->get('Architecture.Module.Helper'), + $container->get('Architecture.Module.MainXML'), + $container->get('Joomlamodule.Data'), + $container->get('Header'), + $container->get('Event'), + $container->get('Extension.InstallScript'), + $container->get('Compiler.Builder.Content.Multi'), + $container->get('Compiler.Creator.Fieldset.Extension'), + $container->get('Dynamicget.Methods') + ); + } + + /** + * Get The Infusion Class. + * + * @param Container $container The DI container. + * + * @return J4Infusion + * @since 5.1.2 + */ + public function getJ4Infusion(Container $container): J4Infusion + { + return new J4Infusion( + $container->get('Config'), + $container->get('Architecture.Module.Provider'), + $container->get('Architecture.Module.Dispatcher'), + $container->get('Architecture.Module.Template'), + $container->get('Architecture.Module.Helper'), + $container->get('Architecture.Module.MainXML'), + $container->get('Joomlamodule.Data'), + $container->get('Header'), + $container->get('Event'), + $container->get('Extension.InstallScript'), + $container->get('Compiler.Builder.Content.Multi'), + $container->get('Compiler.Creator.Fieldset.Extension'), + $container->get('Dynamicget.Methods') + ); + } + + /** + * Get The Infusion Class. + * + * @param Container $container The DI container. + * + * @return J5Infusion + * @since 5.1.2 + */ + public function getJ5Infusion(Container $container): J5Infusion + { + return new J5Infusion( + $container->get('Config'), + $container->get('Architecture.Module.Provider'), + $container->get('Architecture.Module.Dispatcher'), + $container->get('Architecture.Module.Template'), + $container->get('Architecture.Module.Helper'), + $container->get('Architecture.Module.MainXML'), + $container->get('Joomlamodule.Data'), + $container->get('Header'), + $container->get('Event'), + $container->get('Extension.InstallScript'), + $container->get('Compiler.Builder.Content.Multi'), + $container->get('Compiler.Creator.Fieldset.Extension'), + $container->get('Dynamicget.Methods') + ); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Joomlaplugin.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Joomlaplugin.php index 299cad013..18eb58018 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Joomlaplugin.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Joomlaplugin.php @@ -126,7 +126,8 @@ class Joomlaplugin implements ServiceProviderInterface $container->get('Language'), $container->get('Field'), $container->get('Field.Name'), - $container->get('Model.Filesfolders') + $container->get('Model.Filesfolders'), + $container->get('Joomla.Database') ); } @@ -148,7 +149,8 @@ class Joomlaplugin implements ServiceProviderInterface $container->get('Language'), $container->get('Field'), $container->get('Field.Name'), - $container->get('Model.Filesfolders') + $container->get('Model.Filesfolders'), + $container->get('Joomla.Database') ); } @@ -170,7 +172,8 @@ class Joomlaplugin implements ServiceProviderInterface $container->get('Language'), $container->get('Field'), $container->get('Field.Name'), - $container->get('Model.Filesfolders') + $container->get('Model.Filesfolders'), + $container->get('Joomla.Database') ); } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Language.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Language.php index c7f0eeddc..c75b1bf1e 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Language.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Language.php @@ -116,7 +116,8 @@ class Language implements ServiceProviderInterface public function getPurge(Container $container): Purge { return new Purge( - $container->get('Language.Update') + $container->get('Language.Update'), + $container->get('Joomla.Database') ); } @@ -130,7 +131,9 @@ class Language implements ServiceProviderInterface */ public function getInsert(Container $container): Insert { - return new Insert(); + return new Insert( + $container->get('Joomla.Database') + ); } /** @@ -143,7 +146,9 @@ class Language implements ServiceProviderInterface */ public function getUpdate(Container $container): Update { - return new Update(); + return new Update( + $container->get('Joomla.Database') + ); } /** @@ -191,7 +196,9 @@ class Language implements ServiceProviderInterface */ public function getMultilingual(Container $container): Multilingual { - return new Multilingual(); + return new Multilingual( + $container->get('Joomla.Database') + ); } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Library.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Library.php index 31824f643..56789120c 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Library.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Library.php @@ -16,6 +16,8 @@ use Joomla\DI\Container; use Joomla\DI\ServiceProviderInterface; use VDM\Joomla\Componentbuilder\Compiler\Library\Data; use VDM\Joomla\Componentbuilder\Compiler\Library\Structure; +use VDM\Joomla\Componentbuilder\Compiler\Library\Document; +use VDM\Joomla\Componentbuilder\Compiler\Library\IncludeHelper; /** @@ -40,6 +42,12 @@ class Library implements ServiceProviderInterface $container->alias(Structure::class, 'Library.Structure') ->share('Library.Structure', [$this, 'getStructure'], true); + + $container->alias(Document::class, 'Library.Document') + ->share('Library.Document', [$this, 'getDocument'], true); + + $container->alias(IncludeHelper::class, 'Library.IncludeHelper') + ->share('Library.IncludeHelper', [$this, 'getIncludeHelper'], true); } /** @@ -84,6 +92,36 @@ class Library implements ServiceProviderInterface $container->get('Utilities.File') ); } - + + /** + * Get The Document Class. + * + * @param Container $container The DI container. + * + * @return Document + * @since 5.1.2 + */ + public function getDocument(Container $container): Document + { + return new Document( + $container->get('Config'), + $container->get('Registry'), + $container->get('Library.IncludeHelper'), + $container->get('Utilities.Paths') + ); + } + + /** + * Get The IncludeHelper Class. + * + * @param Container $container The DI container. + * + * @return IncludeHelper + * @since 5.1.2 + */ + public function getIncludeHelper(Container $container): IncludeHelper + { + return new IncludeHelper(); + } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Power.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Power.php index af62c1a8a..ee6915e25 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Power.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Power.php @@ -337,7 +337,9 @@ class Power implements ServiceProviderInterface */ public function getExtractor(Container $container): Extractor { - return new Extractor(); + return new Extractor( + $container->get('Joomla.Database') + ); } /** diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Templatelayout.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Templatelayout.php index e066bff43..1b4bccb37 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Templatelayout.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Service/Templatelayout.php @@ -56,7 +56,8 @@ class Templatelayout implements ServiceProviderInterface $container->get('Config'), $container->get('Compiler.Builder.Layout.Data'), $container->get('Compiler.Builder.Template.Data'), - $container->get('Alias.Data') + $container->get('Alias.Data'), + $container->get('Joomla.Database') ); } @@ -76,7 +77,8 @@ class Templatelayout implements ServiceProviderInterface $container->get('Customcode'), $container->get('Customcode.Gui'), $container->get('Model.Loader'), - $container->get('Model.Libraries') + $container->get('Model.Libraries'), + $container->get('Joomla.Database') ); } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Architecture/Module/MainXMLInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Architecture/Module/MainXMLInterface.php new file mode 100644 index 000000000..7bab54232 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Architecture/Module/MainXMLInterface.php @@ -0,0 +1,32 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Interfaces\Architecture\Module; + + +/** + * Main XML Interface + * + * @since 5.1.2 + */ +interface MainXMLInterface +{ + /** + * Generates the main XML for the module. + * + * @param object $module The module object. + * + * @return string The generated XML. + * @since 5.1.2 + */ + public function get(object $module): string; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Architecture/Module/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Architecture/Module/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Architecture/Module/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/InfusionInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/InfusionInterface.php new file mode 100644 index 000000000..72733e764 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/InfusionInterface.php @@ -0,0 +1,34 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Interfaces\Module; + + +/** + * Module Infusion Interface + * + * @since 5.1.2 + */ +interface InfusionInterface +{ + /** + * Infuse the module data into the content. + * + * This method processes each module in the data set, triggering events + * before and after infusion, setting placeholders, and adding content + * such as headers, classes, and XML configurations. + * + * @return void + * @since 5.1.2 + */ + public function set(): void; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/StructureInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/StructureInterface.php new file mode 100644 index 000000000..05265ecc5 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/StructureInterface.php @@ -0,0 +1,30 @@ + + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +namespace VDM\Joomla\Componentbuilder\Interfaces\Module; + + +/** + * Structure Interface + * + * @since 5.1.2 + */ +interface StructureInterface +{ + /** + * Build the Modules files, folders, url's and config + * + * @return void + * @since 5.1.2 + */ + public function build(); +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Module/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Builder/Get.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Builder/Get.php index 6e1b64585..fcc858093 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Builder/Get.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Builder/Get.php @@ -118,7 +118,7 @@ class Get } } - if (($dependencies = $this->tracker->get('get')) !== null) + while (($dependencies = $this->tracker->get('get')) !== null) { $this->tracker->remove('get'); foreach ($dependencies as $next_entity => $next_items) @@ -127,13 +127,13 @@ class Get } } - if (($files = $this->tracker->get('file.get')) !== null) + while (($files = $this->tracker->get('file.get')) !== null) { $this->tracker->remove('file.get'); $this->file($files, $repo, $force); } - if (($folders = $this->tracker->get('folder.get')) !== null) + while (($folders = $this->tracker->get('folder.get')) !== null) { $this->tracker->remove('folder.get'); $this->folder($folders, $repo, $force); @@ -160,7 +160,7 @@ class Get $this->container->get("{$class}.Remote.Get")->reset($items); - if (($dependencies = $this->tracker->get('get')) !== null) + while (($dependencies = $this->tracker->get('get')) !== null) { $this->tracker->remove('get'); foreach ($dependencies as $next_entity => $next_items) @@ -174,13 +174,13 @@ class Get } } - if (($files = $this->tracker->get('file.get')) !== null) + while (($files = $this->tracker->get('file.get')) !== null) { $this->tracker->remove('file.get'); $this->container->get("File.Remote.Get")->reset($files); } - if (($folders = $this->tracker->get('folder.get')) !== null) + while (($folders = $this->tracker->get('folder.get')) !== null) { $this->tracker->remove('folder.get'); $this->container->get("Folder.Remote.Get")->reset($folders); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Builder/Set.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Builder/Set.php index 97ccdcac3..0322770fe 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Builder/Set.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Builder/Set.php @@ -82,7 +82,7 @@ class Set $this->container->get("{$class}.Remote.Set")->items($guids); - if (($dependencies = $this->tracker->get('set')) !== null) + while (($dependencies = $this->tracker->get('set')) !== null) { $this->tracker->remove('set'); foreach ($dependencies as $next_entity => $next_items) @@ -91,13 +91,13 @@ class Set } } - if (($files = $this->tracker->get('file.set')) !== null) + while (($files = $this->tracker->get('file.set')) !== null) { $this->tracker->remove('file.set'); $this->container->get("File.Remote.Set")->items($files); } - if (($folders = $this->tracker->get('folder.set')) !== null) + while (($folders = $this->tracker->get('folder.set')) !== null) { $this->tracker->remove('folder.set'); $this->container->get("Folder.Remote.Set")->items($folders); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Dependency/Resolver.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Dependency/Resolver.php index c1eb05fce..f60833527 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Dependency/Resolver.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Dependency/Resolver.php @@ -388,10 +388,10 @@ final class Resolver implements ResolverInterface $this->record( 'parent', - 'guid', + 'field', $field, '#__componentbuilder_field', - 'field' + 'guid' ); } } @@ -834,6 +834,25 @@ final class Resolver implements ResolverInterface $collected = $this->collectSubformValues($data->{$segment}, $path); } + // ─────────────────────────────────────────────────────────── + // DEEP SEEK HANDLING ;) + // ─────────────────────────────────────────────────────────── + else + { + foreach ($data as $row) + { + if ((is_array($row) && array_key_exists($segment, $row)) || + (is_object($row) && property_exists($row, $segment))) + { + $next = is_array($row) ? $row[$segment] : $row->{$segment}; + $collected = array_merge( + $collected, + $this->collectSubformValues($next, $path) + ); + } + } + } + return $collected; } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/GrepContent.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/GrepContent.php index 7a95a67ed..101535b4a 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/GrepContent.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/GrepContent.php @@ -48,7 +48,8 @@ class GrepContent extends Grep implements GrepInterface */ protected function getRemote(object $path, string $guid): ?object { - $content_path = $path->index[$this->entity]->{$guid}->path ?? null; + $data = (object) ($path->index[$this->entity]->{$guid} ?? []); + $content_path = $data->path ?? null; if (empty($content_path)) { return null; @@ -80,7 +81,6 @@ class GrepContent extends Grep implements GrepInterface return null; } - $data = $path->index[$this->entity]->{$guid}; $path_guid = $path->guid ?? null; $branch_field = $this->getBranchField(); diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Item.php index 336014887..c0ecd5d94 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Item.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/JoomlaModule/Readme/Item.php @@ -74,6 +74,20 @@ final class Item implements ItemInterface MD; + // Default Header Template + if (!empty($item->default_header) && (int) ($item->add_default_header ?? 0) === 1) + { + $readme[] = '
'; + $readme[] = 'Header Default Template'; + $readme[] = ''; + $readme[] = '```php'; + $readme[] = rtrim($item->default_header); + $readme[] = '```'; + $readme[] = ''; + $readme[] = '
'; + $readme[] = ''; + } + // Default Template if (!empty($item->default)) { @@ -84,14 +98,32 @@ MD; $readme[] = ''; } + // Dispatcher getLayoutData Method Code + if (!empty($item->layout_data)) + { + $readme[] = '
'; + $readme[] = 'Dispatcher getLayoutData Method (J4+)'; + $readme[] = ''; + $readme[] = '```php'; + $readme[] = rtrim($item->layout_data); + $readme[] = '```'; + $readme[] = ''; + $readme[] = '
'; + $readme[] = ''; + } + // Module Code if (!empty($item->mod_code)) { - $readme[] = '## Module Code:'; + $readme[] = '
'; + $readme[] = 'Module Code (J3)'; + $readme[] = ''; $readme[] = '```php'; $readme[] = rtrim($item->mod_code); $readme[] = '```'; $readme[] = ''; + $readme[] = '
'; + $readme[] = ''; } // Readme Block (if defined in module) diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetContent.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetContent.php index 30e3f4479..e95110f0b 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetContent.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetContent.php @@ -97,11 +97,11 @@ abstract class GetContent extends Get implements GetInterface foreach ($items as $item) { // Support both object and array types - $guid = is_array($item) ? ($item['key'] ?? null) : ($item->key ?? null); - $value = is_array($item) ? ($item['value'] ?? null) : ($item->value ?? null); - $entity = is_array($item) ? ($item['entity'] ?? null) : ($item->entity ?? null); - $target = is_array($item) ? ($item['target'] ?? null) : ($item->target ?? null); - $pointer = is_array($item) ? ($item['pointer'] ?? null) : ($item->pointer ?? null); + $guid = $this->extractItemValue($item, 'key'); + $value = $this->extractItemValue($item, 'value'); + $entity = $this->extractItemValue($item, 'entity'); + $target = $this->extractItemValue($item, 'target'); + $pointer = $this->extractItemValue($item, 'pointer'); if (empty($guid) || empty($value) || empty($entity) || empty($target) || empty($pointer) || $this->tracker->exists("{$entity}.save.{$pointer}")) { @@ -124,15 +124,16 @@ abstract class GetContent extends Get implements GetInterface // Attempt to fetch the item from the remote repository $found = $this->grep->get($guid, ['remote'], $repo); + $content = $this->extractItemValue($found, 'content'); - if ($found === null || empty($found->content)) + if ($found === null || empty($content)) { $logger['not_found'][$guid] = $value; continue; } // Store the retrieved content - $result = $this->store($found, $full_path); + $result = $this->store($content, $full_path); if (!$result) { @@ -198,38 +199,82 @@ abstract class GetContent extends Get implements GetInterface } /** - * Load an item + * Load an item using its GUID from the given repository or across all repositories. * - * @param string $guid The global unique id of the item - * @param array $order The search order - * @param object|null $repo The repository object to search. If null, all repos will be searched. + * @param string $guid The globally unique ID of the item. + * @param array $order The search order: typically ['remote', 'local']. + * @param object|null $repo The repository to search in, or null to search all. * - * @return bool - * @since 3.2.0 - * @since 5.1.1 We added the repo object + * @return bool True if the item was successfully stored; false otherwise. + * + * @since 3.2.0 + * @since 5.1.1 Added support for optional repository object. */ public function item(string $guid, array $order = ['remote', 'local'], ?object $repo = null): bool { $this->grep->setBranchField('read_branch'); - $entity = strtolower($this->getArea()); - $pointer = str_replace('.', '--', $guid); + + $entity = strtolower($this->getArea()); + $pointer = str_replace('.', '--', $guid); + $trackerKey = "{$entity}.save.{$pointer}"; + + // Return cached result if previously processed + if ($this->tracker->exists($trackerKey)) + { + return $this->tracker->get($trackerKey); + } + + $item = $this->grep->get($guid, $order, $repo); $result = false; - if ($this->tracker->exists("{$entity}.save.{$pointer}")) + if ($item !== null) { - return $this->tracker->get("{$entity}.save.{$pointer}"); + // Support both array and object formats + $value = $this->extractItemValue($item, 'value'); + $target = $this->extractItemValue($item, 'target'); + $content = $this->extractItemValue($item, 'content'); + + if (!empty($value) && !empty($target) && !empty($content)) + { + $fullPath = $this->normalize->full($value, $target); + + if (!empty($fullPath)) + { + $result = $this->store($content, $fullPath); + } + } } - if (($item = $this->grep->get($guid, $order, $repo)) !== null) - { - $result = $this->store($item); - } - - $this->tracker->set("{$entity}.save.{$pointer}", $result); + // Cache the result for future calls + $this->tracker->set($trackerKey, $result); return $result; } + /** + * Extract a value from an array or object safely. + * + * @param array|object $item The item to extract from. + * @param string $key The key or property name to extract. + * + * @return mixed|null The extracted value or null if not found. + * @since 5.1.2 + */ + protected function extractItemValue($item, string $key) + { + if (is_array($item)) + { + return $item[$key] ?? null; + } + + if (is_object($item)) + { + return $item->$key ?? null; + } + + return null; + } + /** * Check if an content is found locally * @@ -243,12 +288,12 @@ abstract class GetContent extends Get implements GetInterface /** * Store the found content locally * - * @param object $item The content to store - * @param string|null $fullPath The full path to the content + * @param string $content The content to store + * @param string $fullPath The full path where the file should be restored * - * @return bool + * @return bool True on success, false on failure * @since 5.1.1 */ - abstract protected function store(object $item, ?string $fullPath = null): bool; + abstract protected function store(string $content, string $fullPath): bool; } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetFile.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetFile.php index fb4fa9db8..622b2080c 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetFile.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetFile.php @@ -12,6 +12,10 @@ namespace VDM\Joomla\Componentbuilder\Package\Remote; +use Joomla\CMS\Filesystem\File; +use Joomla\CMS\Filesystem\Folder; +use Joomla\CMS\Language\Text; +use VDM\Joomla\Utilities\FileHelper; use VDM\Joomla\Interfaces\Remote\GetInterface; use VDM\Joomla\Componentbuilder\Package\Remote\GetContent; @@ -37,17 +41,46 @@ final class GetFile extends GetContent implements GetInterface } /** - * Store the found file locally + * Store the found content locally * - * @param object $item The file to store - * @param string|null $fullPath The full path to the file + * @param string $content The content to store (file data) + * @param string $fullPath The full path where the file should be restored * - * @return bool + * @return bool True on success, false on failure * @since 5.1.1 */ - protected function store(object $item, ?string $fullPath = null): bool + protected function store(string $content, string $fullPath): bool { - return false; + try + { + // Ensure the directory exists + $directory = dirname($fullPath); + if (!is_dir($directory) && !Folder::create($directory)) + { + throw new \RuntimeException("Failed to create directory: {$directory}"); + } + + // If file exists, delete it + if (is_file($fullPath) && !File::delete($fullPath)) + { + throw new \RuntimeException("Failed to delete existing file: {$fullPath}"); + } + + // Write file using FileHelper + if (!FileHelper::write($fullPath, $content)) + { + throw new \RuntimeException("Failed to write file to: {$fullPath}"); + } + + return true; + } + catch (\Throwable $e) + { + $this->messages->add('error', Text::sprintf('COM_COMPONENTBUILDER_SYSTEMCOULD_NOT_RESTORE_FILE_TO_SBRBRBERROR_MESSAGEBBRS', + $fullPath, $e->getMessage() + )); + return false; + } } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetFolder.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetFolder.php index a6cbf8d9a..a410534c6 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetFolder.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/GetFolder.php @@ -12,6 +12,9 @@ namespace VDM\Joomla\Componentbuilder\Package\Remote; +use Joomla\Filesystem\File; +use Joomla\Filesystem\Folder; +use Joomla\CMS\Language\Text; use VDM\Joomla\Interfaces\Remote\GetInterface; use VDM\Joomla\Componentbuilder\Package\Remote\GetContent; @@ -37,17 +40,65 @@ final class GetFolder extends GetContent implements GetInterface } /** - * Store the found folder locally + * Store the found content locally * - * @param object $item The folder to store - * @param string|null $fullPath The full path to the folder + * @param string $content The zipped content as a string + * @param string $fullPath The full path to the content * - * @return bool + * @return bool True on success, false on failure * @since 5.1.1 */ - protected function store(object $item, ?string $fullPath = null): bool + protected function store(string $content, string $fullPath): bool { - return false; + $tmpZipPath = $fullPath . '.restore.zip'; + + try + { + // Remove existing folder + if (is_dir($fullPath)) + { + if (!Folder::delete($fullPath)) + { + throw new \RuntimeException("Failed to remove existing folder at: {$fullPath}"); + } + } + + // Write zip content to temp file + if (!File::write($tmpZipPath, $content)) + { + throw new \RuntimeException("Failed to write temporary zip file to: {$tmpZipPath}"); + } + + // Unzip content + if (!is_dir($fullPath)) + { + Folder::create($fullPath); + } + + $unzipResult = Folder::unpack($tmpZipPath, $fullPath); + + if (!$unzipResult || !is_array($unzipResult) || empty($unzipResult)) + { + throw new \RuntimeException("Unzipping failed or returned no files for: {$tmpZipPath}"); + } + + return true; + } + catch (\Throwable $e) + { + $this->messages->add('error', Text::sprintf('COM_COMPONENTBUILDER_SYSTEMCOULD_NOT_RESTORE_FOLDER_TO_SBRBRBERROR_MESSAGEBBRS', + $fullPath, $e->getMessage() + )); + return false; + } + finally + { + // Always try to remove the temp zip file + if (is_file($tmpZipPath)) + { + File::delete($tmpZipPath); + } + } } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/SetFolder.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/SetFolder.php index 0979536c0..41aa53902 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/SetFolder.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Remote/SetFolder.php @@ -47,8 +47,8 @@ final class SetFolder extends SetContent implements SetInterface : null; } catch (\Throwable $e) { $this->messages->add('error', Text::sprintf( - '%s:%s [%s] could not be ::zipped:: from full path:%s.

Error Message:
%s', - $area, $target, $value, $fullPath ?? 'missing', $e->getMessage() + 'System:Folder [%s] could not be ::zipped:: from full path:%s.

Error Message:
%s', + $guid, $fullPath ?? 'missing', $e->getMessage() )); } finally { if (is_file($zip_path)) diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Service/Dependencies.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Service/Dependencies.php index 452b16d8a..fe37a0a13 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Service/Dependencies.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Package/Service/Dependencies.php @@ -610,7 +610,7 @@ class Dependencies implements ServiceProviderInterface * @return GrepContent * @since 5.1.1 */ - public function getGrepFolder(Container $container): GrepContent + public function getFolderGrep(Container $container): GrepContent { return new GrepContent( $container->get('Folder.Remote.Config'), diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Interfaces/TableInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Interfaces/TableInterface.php index b9d230635..ff277e033 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Interfaces/TableInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Interfaces/TableInterface.php @@ -57,6 +57,18 @@ interface TableInterface extends ExtendingTableInterface * @return array The newly built array. * @since 5.1.0 */ - public function search(string $table, string $area): array; + public function search(string $table, string $area): array; + + /** + * Get the list view code name from a table's fields. + * + * This method returns the first field where the 'list' key is a non-empty string. + * + * @param string $table The table name to retrieve fields for. + * + * @return string|null The list view code name, or null if not found. + * @since 5.1.2 + */ + public function listViewCodeName(string $table): ?string; } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Parser.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Parser.php index c476d956f..380ff7931 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Parser.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Parser.php @@ -31,6 +31,8 @@ final class Parser */ public function code(string $code): array { + $code = $this->normalizeCode($code); + return [ 'properties' => $this->properties($code), 'methods' => $this->methods($code) @@ -47,6 +49,8 @@ final class Parser **/ public function getClassCode(string $code): ?string { + $code = $this->normalizeCode($code); + // Match class, final class, abstract class, interface, and trait $pattern = '/(?:class|final class|abstract class|interface|trait)\s+[a-zA-Z0-9_]+\s*(?:extends\s+[a-zA-Z0-9_]+\s*)?(?:implements\s+[a-zA-Z0-9_]+(?:\s*,\s*[a-zA-Z0-9_]+)*)?\s*\{/s'; @@ -88,6 +92,8 @@ final class Parser **/ public function getClassLicense(string $code): ?string { + $code = $this->normalizeCode($code); + // Check if the file starts with 'normalizeCode($code); + // Match class, final class, abstract class, interface, and trait $pattern = '/(?:class|final class|abstract class|interface|trait)\s+[a-zA-Z0-9_]+\s*(?:extends\s+[a-zA-Z0-9_]+\s*)?(?:implements\s+[a-zA-Z0-9_]+(?:\s*,\s*[a-zA-Z0-9_]+)*)?\s*\{/s'; @@ -168,6 +176,8 @@ final class Parser */ public function getTraits(string $code): ?array { + $code = $this->normalizeCode($code); + // regex to target trait use statements $traitPattern = '/^\s*use\s+[\p{L}0-9\\\\_]+(?:\s*,\s*[\p{L}0-9\\\\_]+)*\s*;/mu'; @@ -639,6 +649,34 @@ final class Parser return $mergedArguments; } - + + /** + * Normalize input PHP code to ensure cross-platform compatibility. + * + * This method removes the UTF-8 BOM (Byte Order Mark) if present and converts + * all line endings to LF (`\n`). This ensures consistent parsing behavior across + * operating systems, including Linux, macOS, and Windows. + * + * @param string $code The raw PHP code as a string + * + * @return string The normalized PHP code string with consistent line endings and no BOM + * @since 5.1.2 + */ + private function normalizeCode(string $code): string + { + // UTF-8 BOM sequence + static $BOM = "\xEF\xBB\xBF"; + + // Remove UTF-8 BOM if present + if (strncmp($code, $BOM, 3) === 0) + { + $code = substr($code, 3); + } + + // Normalize line endings to LF in two fast passes + $code = str_replace(["\r\n", "\r"], "\n", $code); + + return $code; + } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Remote/Config.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Remote/Config.php index a80f18c44..e7841d019 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Remote/Config.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Remote/Config.php @@ -55,14 +55,6 @@ final class Config extends ExtendingConfig implements ConfigInterface */ protected string $suffix_key = '---Power'; - /** - * The main readme file path - * - * @var string - * @since 5.1.1 - */ - // [DEFAULT] protected string $main_readme_path = 'README.md'; - /** * The index file path (index of all items) * @@ -71,14 +63,6 @@ final class Config extends ExtendingConfig implements ConfigInterface */ protected string $index_path = 'super-powers.json'; - /** - * The item (files) source path - * - * @var string - * @since 5.1.1 - */ - // [DEFAULT] protected string $src_path = 'src'; - /** * The item settings file name * diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Table.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Table.php index 75f8af4cd..9ec4d1ec4 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Table.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Table.php @@ -164,6 +164,40 @@ final class Table extends ExtendingTable implements TableInterface return $result; } + /** + * Get the list view code name from a table's fields. + * + * This method returns the first field where the 'list' key is a non-empty string. + * + * @param string $table The table name to retrieve fields for. + * + * @return string|null The list view code name, or null if not found. + * @since 5.1.2 + */ + public function listViewCodeName(string $table): ?string + { + $fields = $this->get($table); + + if (!is_array($fields)) + { + return null; + } + + foreach ($fields as $field) + { + if ( + array_key_exists('list', $field) + && is_string($field['list']) + && strlen($field['list']) > 0 + ) + { + return $field['list']; + } + } + + return null; + } + /** * Recursively traverses subform fields to collect valid parent fields * diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php index 6791f76ce..e621dfa2a 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Table.php @@ -1825,42 +1825,6 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'add_php_method_uninstall' => [ - 'name' => 'add_php_method_uninstall', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_METHOD_UNINSTALL_LABEL', - 'type' => 'radio', - 'title' => false, - 'list' => 'joomla_modules', - 'store' => NULL, - 'tab_name' => 'Script File', - 'db' => [ - 'type' => 'TINYINT(1)', - 'default' => '0', - 'GUID' => '70a2d820-64af-4f51-8b1a-522aed9572bf', - 'null_switch' => 'NOT NULL', - 'unique_key' => false, - 'key' => true, - ], - 'link' => NULL, - ], - 'add_php_postflight_update' => [ - 'name' => 'add_php_postflight_update', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_POSTFLIGHT_UPDATE_LABEL', - 'type' => 'radio', - 'title' => false, - 'list' => 'joomla_modules', - 'store' => NULL, - 'tab_name' => 'Script File', - 'db' => [ - 'type' => 'TINYINT(1)', - 'default' => '0', - 'GUID' => '22a668bc-d169-4346-9929-3819673c67ac', - 'null_switch' => 'NOT NULL', - 'unique_key' => false, - 'key' => true, - ], - 'link' => NULL, - ], 'add_php_postflight_install' => [ 'name' => 'add_php_postflight_install', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_POSTFLIGHT_INSTALL_LABEL', @@ -1897,6 +1861,42 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], + 'add_php_preflight_update' => [ + 'name' => 'add_php_preflight_update', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_PREFLIGHT_UPDATE_LABEL', + 'type' => 'radio', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => NULL, + 'tab_name' => 'Script File', + 'db' => [ + 'type' => 'TINYINT(1)', + 'default' => '0', + 'GUID' => '365d08ee-fe6e-47c4-b567-a001212f2cb6', + 'null_switch' => 'NOT NULL', + 'unique_key' => false, + 'key' => true, + ], + 'link' => NULL, + ], + 'update_server_target' => [ + 'name' => 'update_server_target', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_UPDATE_SERVER_TARGET_LABEL', + 'type' => 'radio', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => NULL, + 'tab_name' => 'Dynamic Integration', + 'db' => [ + 'type' => 'TINYINT(1)', + 'default' => '0', + 'GUID' => 'b9f98c3d-a93a-4b19-b89e-4c62781f9b99', + 'null_switch' => 'NOT NULL', + 'unique_key' => false, + 'key' => true, + ], + 'link' => NULL, + ], 'addreadme' => [ 'name' => 'addreadme', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADDREADME_LABEL', @@ -1915,6 +1915,24 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], + 'add_sql' => [ + 'name' => 'add_sql', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_SQL_LABEL', + 'type' => 'radio', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => NULL, + 'tab_name' => 'MySQL', + 'db' => [ + 'type' => 'TINYINT(1)', + 'default' => '0', + 'GUID' => '7c652c71-e00e-45ff-8acb-e1bc0344e4c0', + 'null_switch' => 'NOT NULL', + 'unique_key' => false, + 'key' => true, + ], + 'link' => NULL, + ], 'default' => [ 'name' => 'default', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_DEFAULT_LABEL', @@ -1933,6 +1951,24 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], + 'default_header' => [ + 'name' => 'default_header', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_DEFAULT_HEADER_LABEL', + 'type' => 'editor', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => 'base64', + 'tab_name' => 'HTML', + 'db' => [ + 'type' => 'TEXT', + 'default' => 'EMPTY', + 'GUID' => '620c977e-e713-4ce2-ae97-a4a1fbb4c397', + 'null_switch' => 'NULL', + 'unique_key' => false, + 'key' => false, + ], + 'link' => NULL, + ], 'snippet' => [ 'name' => 'snippet', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_SNIPPET_LABEL', @@ -1958,36 +1994,54 @@ class Table extends BaseTable implements TableInterface 'key' => 'guid', ], ], - 'add_sql' => [ - 'name' => 'add_sql', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_SQL_LABEL', + 'add_default_header' => [ + 'name' => 'add_default_header', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_DEFAULT_HEADER_LABEL', 'type' => 'radio', 'title' => false, 'list' => 'joomla_modules', 'store' => NULL, - 'tab_name' => 'MySQL', + 'tab_name' => 'HTML', 'db' => [ 'type' => 'TINYINT(1)', 'default' => '0', - 'GUID' => '7c652c71-e00e-45ff-8acb-e1bc0344e4c0', + 'GUID' => 'd0c24d9d-1ff9-425b-bffb-ba0108b6bfc9', + 'null_switch' => 'NOT NULL', + 'unique_key' => false, + 'key' => false, + ], + 'link' => NULL, + ], + 'add_php_postflight_update' => [ + 'name' => 'add_php_postflight_update', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_POSTFLIGHT_UPDATE_LABEL', + 'type' => 'radio', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => NULL, + 'tab_name' => 'Script File', + 'db' => [ + 'type' => 'TINYINT(1)', + 'default' => '0', + 'GUID' => '22a668bc-d169-4346-9929-3819673c67ac', 'null_switch' => 'NOT NULL', 'unique_key' => false, 'key' => true, ], 'link' => NULL, ], - 'update_server_target' => [ - 'name' => 'update_server_target', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_UPDATE_SERVER_TARGET_LABEL', + 'add_php_method_uninstall' => [ + 'name' => 'add_php_method_uninstall', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_METHOD_UNINSTALL_LABEL', 'type' => 'radio', 'title' => false, 'list' => 'joomla_modules', 'store' => NULL, - 'tab_name' => 'Dynamic Integration', + 'tab_name' => 'Script File', 'db' => [ 'type' => 'TINYINT(1)', 'default' => '0', - 'GUID' => 'b9f98c3d-a93a-4b19-b89e-4c62781f9b99', + 'GUID' => '70a2d820-64af-4f51-8b1a-522aed9572bf', 'null_switch' => 'NOT NULL', 'unique_key' => false, 'key' => true, @@ -2012,6 +2066,24 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], + 'add_update_server' => [ + 'name' => 'add_update_server', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_UPDATE_SERVER_LABEL', + 'type' => 'radio', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => NULL, + 'tab_name' => 'Dynamic Integration', + 'db' => [ + 'type' => 'TINYINT(1)', + 'default' => '0', + 'GUID' => 'db2835aa-b0c3-4c9a-abe6-5b09568fffda', + 'null_switch' => 'NOT NULL', + 'unique_key' => false, + 'key' => true, + ], + 'link' => NULL, + ], 'update_server' => [ 'name' => 'update_server', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_UPDATE_SERVER_LABEL', @@ -2037,24 +2109,6 @@ class Table extends BaseTable implements TableInterface 'key' => 'id', ], ], - 'add_update_server' => [ - 'name' => 'add_update_server', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_UPDATE_SERVER_LABEL', - 'type' => 'radio', - 'title' => false, - 'list' => 'joomla_modules', - 'store' => NULL, - 'tab_name' => 'Dynamic Integration', - 'db' => [ - 'type' => 'TINYINT(1)', - 'default' => '0', - 'GUID' => 'db2835aa-b0c3-4c9a-abe6-5b09568fffda', - 'null_switch' => 'NOT NULL', - 'unique_key' => false, - 'key' => true, - ], - 'link' => NULL, - ], 'libraries' => [ 'name' => 'libraries', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_LIBRARIES_LABEL', @@ -2080,24 +2134,6 @@ class Table extends BaseTable implements TableInterface 'key' => 'guid', ], ], - 'module_version' => [ - 'name' => 'module_version', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_MODULE_VERSION_LABEL', - 'type' => 'text', - 'title' => false, - 'list' => 'joomla_modules', - 'store' => NULL, - 'tab_name' => 'HTML', - 'db' => [ - 'type' => 'CHAR(64)', - 'default' => '', - 'GUID' => 'dfb4e6cd-5fb6-4476-9772-f2c8e2143bb6', - 'null_switch' => 'NULL', - 'unique_key' => false, - 'key' => false, - ], - 'link' => NULL, - ], 'sales_server' => [ 'name' => 'sales_server', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_SALES_SERVER_LABEL', @@ -2123,6 +2159,96 @@ class Table extends BaseTable implements TableInterface 'key' => 'id', ], ], + 'module_version' => [ + 'name' => 'module_version', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_MODULE_VERSION_LABEL', + 'type' => 'text', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => NULL, + 'tab_name' => 'HTML', + 'db' => [ + 'type' => 'CHAR(64)', + 'default' => '', + 'GUID' => 'dfb4e6cd-5fb6-4476-9772-f2c8e2143bb6', + 'null_switch' => 'NULL', + 'unique_key' => false, + 'key' => false, + ], + 'link' => NULL, + ], + 'php_preflight_install' => [ + 'name' => 'php_preflight_install', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_PREFLIGHT_INSTALL_LABEL', + 'type' => 'editor', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => 'base64', + 'tab_name' => 'Script File', + 'db' => [ + 'type' => 'MEDIUMTEXT', + 'default' => 'EMPTY', + 'GUID' => '3ca01651-a5c3-46c3-b7a8-bfb0d9f6e105', + 'null_switch' => 'NULL', + 'unique_key' => false, + 'key' => false, + ], + 'link' => NULL, + ], + 'php_preflight_update' => [ + 'name' => 'php_preflight_update', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_PREFLIGHT_UPDATE_LABEL', + 'type' => 'editor', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => 'base64', + 'tab_name' => 'Script File', + 'db' => [ + 'type' => 'MEDIUMTEXT', + 'default' => 'EMPTY', + 'GUID' => '9f9b030b-31ba-4ae9-88da-76efd8a140dc', + 'null_switch' => 'NULL', + 'unique_key' => false, + 'key' => false, + ], + 'link' => NULL, + ], + 'layout_data' => [ + 'name' => 'layout_data', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_LAYOUT_DATA_LABEL', + 'type' => 'editor', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => 'base64', + 'tab_name' => 'Code', + 'db' => [ + 'type' => 'TEXT', + 'default' => 'EMPTY', + 'GUID' => 'c30e704c-2613-44b9-91fa-95595b32180a', + 'null_switch' => 'NULL', + 'unique_key' => false, + 'key' => false, + ], + 'link' => NULL, + ], + 'php_preflight_uninstall' => [ + 'name' => 'php_preflight_uninstall', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_PREFLIGHT_UNINSTALL_LABEL', + 'type' => 'editor', + 'title' => false, + 'list' => 'joomla_modules', + 'store' => 'base64', + 'tab_name' => 'Script File', + 'db' => [ + 'type' => 'MEDIUMTEXT', + 'default' => 'EMPTY', + 'GUID' => '628147c3-5f93-4a49-a1bc-ac6685e06b64', + 'null_switch' => 'NULL', + 'unique_key' => false, + 'key' => false, + ], + 'link' => NULL, + ], 'custom_get' => [ 'name' => 'custom_get', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_CUSTOM_GET_LABEL', @@ -2148,9 +2274,9 @@ class Table extends BaseTable implements TableInterface 'key' => 'guid', ], ], - 'php_preflight_update' => [ - 'name' => 'php_preflight_update', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_PREFLIGHT_UPDATE_LABEL', + 'php_postflight_install' => [ + 'name' => 'php_postflight_install', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_POSTFLIGHT_INSTALL_LABEL', 'type' => 'editor', 'title' => false, 'list' => 'joomla_modules', @@ -2159,16 +2285,16 @@ class Table extends BaseTable implements TableInterface 'db' => [ 'type' => 'MEDIUMTEXT', 'default' => 'EMPTY', - 'GUID' => '9f9b030b-31ba-4ae9-88da-76efd8a140dc', + 'GUID' => '8d837989-4a21-4943-bb4c-4d4abb9a7a55', 'null_switch' => 'NULL', 'unique_key' => false, 'key' => false, ], 'link' => NULL, ], - 'php_preflight_uninstall' => [ - 'name' => 'php_preflight_uninstall', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_PREFLIGHT_UNINSTALL_LABEL', + 'php_postflight_update' => [ + 'name' => 'php_postflight_update', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_POSTFLIGHT_UPDATE_LABEL', 'type' => 'editor', 'title' => false, 'list' => 'joomla_modules', @@ -2177,7 +2303,7 @@ class Table extends BaseTable implements TableInterface 'db' => [ 'type' => 'MEDIUMTEXT', 'default' => 'EMPTY', - 'GUID' => '628147c3-5f93-4a49-a1bc-ac6685e06b64', + 'GUID' => 'ade283c3-937e-4502-a040-c69d6ddb3c50', 'null_switch' => 'NULL', 'unique_key' => false, 'key' => false, @@ -2202,9 +2328,9 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'php_postflight_install' => [ - 'name' => 'php_postflight_install', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_POSTFLIGHT_INSTALL_LABEL', + 'php_method_uninstall' => [ + 'name' => 'php_method_uninstall', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_METHOD_UNINSTALL_LABEL', 'type' => 'editor', 'title' => false, 'list' => 'joomla_modules', @@ -2213,7 +2339,7 @@ class Table extends BaseTable implements TableInterface 'db' => [ 'type' => 'MEDIUMTEXT', 'default' => 'EMPTY', - 'GUID' => '8d837989-4a21-4943-bb4c-4d4abb9a7a55', + 'GUID' => 'e76cf555-112a-4021-9a1e-b4ee52d7be8a', 'null_switch' => 'NULL', 'unique_key' => false, 'key' => false, @@ -2238,18 +2364,18 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'php_postflight_update' => [ - 'name' => 'php_postflight_update', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_POSTFLIGHT_UPDATE_LABEL', - 'type' => 'editor', + 'sql' => [ + 'name' => 'sql', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_SQL_LABEL', + 'type' => 'textarea', 'title' => false, 'list' => 'joomla_modules', 'store' => 'base64', - 'tab_name' => 'Script File', + 'tab_name' => 'MySQL', 'db' => [ 'type' => 'MEDIUMTEXT', 'default' => 'EMPTY', - 'GUID' => 'ade283c3-937e-4502-a040-c69d6ddb3c50', + 'GUID' => '5eb879c0-f6e3-45b6-b220-cb5131422a83', 'null_switch' => 'NULL', 'unique_key' => false, 'key' => false, @@ -2274,18 +2400,18 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'php_method_uninstall' => [ - 'name' => 'php_method_uninstall', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_METHOD_UNINSTALL_LABEL', - 'type' => 'editor', + 'sql_uninstall' => [ + 'name' => 'sql_uninstall', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_SQL_UNINSTALL_LABEL', + 'type' => 'textarea', 'title' => false, 'list' => 'joomla_modules', 'store' => 'base64', - 'tab_name' => 'Script File', + 'tab_name' => 'MySQL', 'db' => [ 'type' => 'MEDIUMTEXT', 'default' => 'EMPTY', - 'GUID' => 'e76cf555-112a-4021-9a1e-b4ee52d7be8a', + 'GUID' => 'b877b188-693c-43a3-9121-a37a3943d7c1', 'null_switch' => 'NULL', 'unique_key' => false, 'key' => false, @@ -2310,18 +2436,18 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'sql' => [ - 'name' => 'sql', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_SQL_LABEL', - 'type' => 'textarea', + 'readme' => [ + 'name' => 'readme', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_README_LABEL', + 'type' => 'editor', 'title' => false, 'list' => 'joomla_modules', 'store' => 'base64', - 'tab_name' => 'MySQL', + 'tab_name' => 'Readme', 'db' => [ - 'type' => 'MEDIUMTEXT', + 'type' => 'TEXT', 'default' => 'EMPTY', - 'GUID' => '5eb879c0-f6e3-45b6-b220-cb5131422a83', + 'GUID' => '87a4b892-c4cb-4032-8511-e18ba8c8c202', 'null_switch' => 'NULL', 'unique_key' => false, 'key' => false, @@ -2346,18 +2472,18 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'sql_uninstall' => [ - 'name' => 'sql_uninstall', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_SQL_UNINSTALL_LABEL', - 'type' => 'textarea', + 'update_server_url' => [ + 'name' => 'update_server_url', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_UPDATE_SERVER_URL_LABEL', + 'type' => 'url', 'title' => false, 'list' => 'joomla_modules', - 'store' => 'base64', - 'tab_name' => 'MySQL', + 'store' => NULL, + 'tab_name' => 'Dynamic Integration', 'db' => [ - 'type' => 'MEDIUMTEXT', - 'default' => 'EMPTY', - 'GUID' => 'b877b188-693c-43a3-9121-a37a3943d7c1', + 'type' => 'VARCHAR(255)', + 'default' => '', + 'GUID' => 'e6c263b1-da39-4a73-8585-637dc3a5b8eb', 'null_switch' => 'NULL', 'unique_key' => false, 'key' => false, @@ -2462,24 +2588,6 @@ class Table extends BaseTable implements TableInterface ], ], ], - 'readme' => [ - 'name' => 'readme', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_README_LABEL', - 'type' => 'editor', - 'title' => false, - 'list' => 'joomla_modules', - 'store' => 'base64', - 'tab_name' => 'Readme', - 'db' => [ - 'type' => 'TEXT', - 'default' => 'EMPTY', - 'GUID' => '87a4b892-c4cb-4032-8511-e18ba8c8c202', - 'null_switch' => 'NULL', - 'unique_key' => false, - 'key' => false, - ], - 'link' => NULL, - ], 'add_php_script_construct' => [ 'name' => 'add_php_script_construct', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_SCRIPT_CONSTRUCT_LABEL', @@ -2498,24 +2606,6 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'update_server_url' => [ - 'name' => 'update_server_url', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_UPDATE_SERVER_URL_LABEL', - 'type' => 'url', - 'title' => false, - 'list' => 'joomla_modules', - 'store' => NULL, - 'tab_name' => 'Dynamic Integration', - 'db' => [ - 'type' => 'VARCHAR(255)', - 'default' => '', - 'GUID' => 'e6c263b1-da39-4a73-8585-637dc3a5b8eb', - 'null_switch' => 'NULL', - 'unique_key' => false, - 'key' => false, - ], - 'link' => NULL, - ], 'php_script_construct' => [ 'name' => 'php_script_construct', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_SCRIPT_CONSTRUCT_LABEL', @@ -2534,42 +2624,6 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'add_php_preflight_install' => [ - 'name' => 'add_php_preflight_install', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_PREFLIGHT_INSTALL_LABEL', - 'type' => 'radio', - 'title' => false, - 'list' => 'joomla_modules', - 'store' => NULL, - 'tab_name' => 'Script File', - 'db' => [ - 'type' => 'TINYINT(1)', - 'default' => '0', - 'GUID' => 'd5d03647-f29e-44a4-9e63-5feb9f4adbae', - 'null_switch' => 'NOT NULL', - 'unique_key' => false, - 'key' => true, - ], - 'link' => NULL, - ], - 'php_preflight_install' => [ - 'name' => 'php_preflight_install', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_PHP_PREFLIGHT_INSTALL_LABEL', - 'type' => 'editor', - 'title' => false, - 'list' => 'joomla_modules', - 'store' => 'base64', - 'tab_name' => 'Script File', - 'db' => [ - 'type' => 'MEDIUMTEXT', - 'default' => 'EMPTY', - 'GUID' => '3ca01651-a5c3-46c3-b7a8-bfb0d9f6e105', - 'null_switch' => 'NULL', - 'unique_key' => false, - 'key' => false, - ], - 'link' => NULL, - ], 'add_sales_server' => [ 'name' => 'add_sales_server', 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_SALES_SERVER_LABEL', @@ -2588,9 +2642,9 @@ class Table extends BaseTable implements TableInterface ], 'link' => NULL, ], - 'add_php_preflight_update' => [ - 'name' => 'add_php_preflight_update', - 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_PREFLIGHT_UPDATE_LABEL', + 'add_php_preflight_install' => [ + 'name' => 'add_php_preflight_install', + 'label' => 'COM_COMPONENTBUILDER_JOOMLA_MODULE_ADD_PHP_PREFLIGHT_INSTALL_LABEL', 'type' => 'radio', 'title' => false, 'list' => 'joomla_modules', @@ -2599,7 +2653,7 @@ class Table extends BaseTable implements TableInterface 'db' => [ 'type' => 'TINYINT(1)', 'default' => '0', - 'GUID' => '365d08ee-fe6e-47c4-b567-a001212f2cb6', + 'GUID' => 'd5d03647-f29e-44a4-9e63-5feb9f4adbae', 'null_switch' => 'NOT NULL', 'unique_key' => false, 'key' => true, diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Data/Guid.php b/libraries/vendor_jcb/VDM.Joomla/src/Data/Guid.php index c27ebeebf..938739460 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Data/Guid.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Data/Guid.php @@ -80,6 +80,27 @@ trait Guid return false; } + /** + * Checks if the GUID value is unique and does not already exist. + * + * @param string $guid The GUID value to check. + * @param string $key The key to check and modify values. + * + * @return string The unique GUID value. + * + * @since 5.0.2 + */ + protected function checkGuid(string $guid, string $key): string + { + // Check that the GUID does not already exist + if ($this->items->table($this->getTable())->values([$guid], $key)) + { + return $this->getGuid($key); + } + + return $guid; + } + /** * Generates a fallback GUIDv4 using less secure methods. * @@ -102,27 +123,6 @@ trait Guid ); return $this->checkGuid($guidv4, $key); - } - - /** - * Checks if the GUID value is unique and does not already exist. - * - * @param string $guid The GUID value to check. - * @param string $key The key to check and modify values. - * - * @return string The unique GUID value. - * - * @since 5.0.2 - */ - private function checkGuid(string $guid, string $key): string - { - // Check that the GUID does not already exist - if ($this->items->table($this->getTable())->values([$guid], $key)) - { - return $this->getGuid($key); - } - - return $guid; } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Data/Items.php b/libraries/vendor_jcb/VDM.Joomla/src/Data/Items.php index c50941b78..42c9911f3 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Data/Items.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Data/Items.php @@ -17,6 +17,7 @@ use VDM\Joomla\Interfaces\Data\InsertInterface as Insert; use VDM\Joomla\Interfaces\Data\UpdateInterface as Update; use VDM\Joomla\Interfaces\Data\DeleteInterface as Delete; use VDM\Joomla\Interfaces\Database\LoadInterface as Database; +use VDM\Joomla\Data\Guid; use VDM\Joomla\Interfaces\Data\ItemsInterface; @@ -27,6 +28,13 @@ use VDM\Joomla\Interfaces\Data\ItemsInterface; */ final class Items implements ItemsInterface { + /** + * The Globally Unique Identifier. + * + * @since 5.1.2 + */ + use Guid; + /** * The LoadInterface Class. * @@ -122,7 +130,7 @@ final class Items implements ItemsInterface * @param array $values The ids of the items * @param string $key The key of the values * - * @return array|null The item object or null + * @return array|null The array of item objects or null * @since 3.2.2 */ public function get(array $values, string $key = 'guid'): ?array @@ -268,7 +276,13 @@ final class Items implements ItemsInterface } else { - $sets['insert'] = $items; + $insert = []; + foreach ($items as $item) + { + $row = is_array($item) ? $item : (array) $item; + $insert[] = $this->normalizeGuid($row); + } + $sets['insert'] = $insert; } // If either set is empty, remove it from the result. @@ -331,12 +345,55 @@ final class Items implements ItemsInterface $inSet = in_array($value, $set); if (($inSet && !$inverse) || (!$inSet && $inverse)) { - $result[] = is_array($item) ? $item : (array) $item; // convert all to arrays + $row = is_array($item) ? $item : (array) $item; + if ($inverse) + { + $row = $this->normalizeGuid($row); + } + $result[] = $row; } } } return empty($result) ? null : $result; + } + + /** + * Normalize the row item + * + * @param array $item Items array + * + * @return array + * @since 5.1.2 + */ + private function normalizeGuid(array $item): array + { + if (isset($item['guid']) && $item['guid'] === '') + { + $item['guid'] = $this->getGuid('guid'); + } + return $item; + } + + /** + * Checks if the GUID value is unique and does not already exist. + * + * @param string $guid The GUID value to check. + * @param string $key The key to check and modify values. + * + * @return string The unique GUID value. + * + * @since 5.0.2 + */ + protected function checkGuid(string $guid, string $key): string + { + // Check that the GUID does not already exist + if ($this->table($this->getTable())->values([$guid], $key)) + { + return $this->getGuid($key); + } + + return $guid; } } diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/GrepInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/GrepInterface.php index 24eee2f9f..e2b73bda7 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/GrepInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/GrepInterface.php @@ -63,22 +63,32 @@ interface GrepInterface /** * Get the a path + indexes * - * @param string $guid The unique identifier for the repo. + * @param string $guid The unique identifier for the repo. + * @param bool $reload The switch to reload the index, and not return from cache. * * @return object|null * @since 5.1.1 */ - public function getPathIndexes(string $guid): ?object; + public function getPathIndexes(string $guid, bool $reload = false): ?object; /** * Get the index of a repo * - * @param string $guid The unique identifier for the repo. + * @param string $guid The unique identifier for the repo. + * @param bool $reload The switch to reload the index, and not return from cache. * * @return object|null - * @since 3.2.2 + * @since 3.2.2 */ - public function getRemoteIndex(string $guid): ?object; + public function getRemoteIndex(string $guid, bool $reload = false): ?object; + + /** + * Reset the index of a entity + * + * @return void + * @since 5.1.2 + */ + public function resetEntityIndex(): void; /** * Get the network target name diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Remote/ConfigInterface.php b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Remote/ConfigInterface.php index e850f2e56..9ad109d77 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Remote/ConfigInterface.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Remote/ConfigInterface.php @@ -45,6 +45,14 @@ interface ConfigInterface */ public function getTable(): string; + /** + * Get the current active table list view code name + * + * @return string|null + * @since 5.1.2 + */ + public function getListViewCodeName(): ?string; + /** * Set the current active area * diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Service/Database.php b/libraries/vendor_jcb/VDM.Joomla/src/Service/Database.php index fe04c44f5..35281c8fb 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Service/Database.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Service/Database.php @@ -12,6 +12,8 @@ namespace VDM\Joomla\Service; +use Joomla\CMS\Factory; +use Joomla\Database\DatabaseInterface; use Joomla\DI\Container; use Joomla\DI\ServiceProviderInterface; use VDM\Joomla\Database\Load; @@ -37,6 +39,9 @@ class Database implements ServiceProviderInterface */ public function register(Container $container) { + $container->alias(DatabaseInterface::class, 'Joomla.Database') + ->share('Joomla.Database', [$this, 'getJoomlaDatabase'], true); + $container->alias(Load::class, 'Load') ->share('Load', [$this, 'getLoad'], true); @@ -50,6 +55,26 @@ class Database implements ServiceProviderInterface ->share('Delete', [$this, 'getDelete'], true); } + /** + * Get the Joomla Database + * + * @param Container $container The DI container. + * + * @return DatabaseInterface + * @since 5.1.2 + */ + public function getJoomlaDatabase(Container $container): DatabaseInterface + { + if (Factory::getContainer()->has(DatabaseInterface::class)) + { + return Factory::getContainer()->get(DatabaseInterface::class); + } + else + { + return Factory::getDbo(); + } + } + /** * Get the Core Load Database * @@ -60,7 +85,9 @@ class Database implements ServiceProviderInterface */ public function getLoad(Container $container): Load { - return new Load(); + return new Load( + $container->get('Joomla.Database') + ); } /** @@ -73,7 +100,9 @@ class Database implements ServiceProviderInterface */ public function getInsert(Container $container): Insert { - return new Insert(); + return new Insert( + $container->get('Joomla.Database') + ); } /** @@ -86,7 +115,9 @@ class Database implements ServiceProviderInterface */ public function getUpdate(Container $container): Update { - return new Update(); + return new Update( + $container->get('Joomla.Database') + ); } /** @@ -99,7 +130,9 @@ class Database implements ServiceProviderInterface */ public function getDelete(Container $container): Delete { - return new Delete(); + return new Delete( + $container->get('Joomla.Database') + ); } }