From 5a2e137f31ad88bcfacbe197d728fb4eddeb0820 Mon Sep 17 00:00:00 2001 From: aB0t Date: Fri, 21 Jun 2024 01:37:13 +0200 Subject: [PATCH] Release of v4.0.1-alpha5 Add repositories for better integration with gitea. Refactored the Data classes. Add new Data classes. --- CHANGELOG.md | 11 +- ComponentbuilderInstallerScript.php | 90 +- README.md | 14 +- admin/README.txt | 14 +- admin/access.xml | 23 + admin/assets/css/repositories.css | 13 + admin/assets/css/repository.css | 13 + admin/assets/images/icons/repositories.png | Bin 0 -> 20768 bytes admin/config.xml | 139 +- admin/forms/field.xml | 100 +- admin/forms/fieldtype.xml | 2 - admin/forms/filter_repositories.xml | 100 + admin/forms/joomla_component.xml | 1553 +++++++-------- admin/forms/repository.xml | 305 +++ .../en-GB/en-GB.com_componentbuilder.ini | 191 +- .../en-GB/en-GB.com_componentbuilder.sys.ini | 25 + admin/layouts/field/database_right.php | 1 - .../joomla_component/details_right.php | 6 - admin/layouts/repository/details_above.php | 54 + admin/layouts/repository/details_left.php | 45 + admin/layouts/repository/details_right.php | 45 + .../layouts/repository}/index.html | 0 admin/layouts/repository/publishing.php | 47 + admin/layouts/repository/publlshing.php | 47 + admin/sql/install.mysql.utf8.sql | 114 +- admin/sql/uninstall.mysql.utf8.sql | 1 + .../src/Controller/RepositoriesController.php | 54 + admin/src/Controller/RepositoryController.php | 343 ++++ .../src/Field/RepositoriesfilterbaseField.php | 74 + .../RepositoriesfilterorganisationField.php | 74 + .../RepositoriesfilterrepositoryField.php | 74 + .../Field/RepositoriesfiltertargetField.php | 78 + admin/src/Field/SuperpowerpathsField.php | 83 +- admin/src/Helper/ComponentbuilderHelper.php | 4 + admin/src/Model/ComponentbuilderModel.php | 7 +- admin/src/Model/FieldModel.php | 61 +- admin/src/Model/FieldsModel.php | 1 - admin/src/Model/FieldtypeModel.php | 1 - admin/src/Model/Joomla_componentModel.php | 312 ++- admin/src/Model/Joomla_componentsModel.php | 65 +- admin/src/Model/PowersModel.php | 70 +- admin/src/Model/RepositoriesModel.php | 559 ++++++ admin/src/Model/RepositoryModel.php | 968 +++++++++ admin/src/Table/RepositoryTable.php | 377 ++++ admin/src/View/Power/HtmlView.php | 2 +- admin/src/View/Repositories/HtmlView.php | 221 +++ .../src/View/Repositories}/index.html | 0 admin/src/View/Repository/HtmlView.php | 231 +++ .../src/View/Repository}/index.html | 0 admin/tmpl/field/default.php | 34 - admin/tmpl/repositories/default.php | 51 + admin/tmpl/repositories/default_body.php | 113 ++ admin/tmpl/repositories/default_foot.php | 18 + admin/tmpl/repositories/default_head.php | 65 + admin/tmpl/repositories/default_toolbar.php | 48 + admin/tmpl/repositories/emptystate.php | 28 + .../tmpl/repositories}/index.html | 0 admin/tmpl/repository/default.php | 106 + .../tmpl/repository}/index.html | 0 componentbuilder.xml | 7 +- componentbuilder_update_server.xml | 6 +- .../VDM.Joomla/src/Abstraction/Grep.php | 16 +- .../VDM.Joomla/src/Abstraction/Model.php | 106 +- .../src/Componentbuilder/Compiler/Config.php | 196 +- .../src/Componentbuilder/Compiler/Factory.php | 6 +- .../src/Componentbuilder/Compiler/Power.php | 56 +- .../Compiler/Service/JoomlaPower.php | 62 +- .../Compiler/Service/Power.php | 95 +- .../Interfaces/SuperInterface.php | 52 - .../Componentbuilder/JoomlaPower/Config.php | 69 +- .../JoomlaPower/Database/Insert.php | 34 - .../JoomlaPower/Database/Load.php | 34 - .../JoomlaPower/Database/Update.php | 34 - .../Componentbuilder/JoomlaPower/Factory.php | 8 +- .../src/Componentbuilder/JoomlaPower/Grep.php | 33 +- .../JoomlaPower/Model/Load.php | 37 - .../JoomlaPower/Model/Upsert.php | 38 - .../JoomlaPower/Service/Database.php | 135 -- .../JoomlaPower/Service/JoomlaPower.php | 3 +- .../Componentbuilder/JoomlaPower/Super.php | 6 +- .../src/Componentbuilder/Power/Config.php | 148 +- .../src/Componentbuilder/Power/Factory.php | 8 +- .../Power/Generator/Search.php | 6 +- .../src/Componentbuilder/Power/Grep.php | 54 +- .../Power/Service/Database.php | 135 -- .../Power/Service/Generator.php | 2 +- .../Componentbuilder/Power/Service/Power.php | 3 +- .../src/Componentbuilder/Power/Super.php | 168 +- .../VDM.Joomla/src/Componentbuilder/Table.php | 1746 +++++++++-------- .../Utilities/FilterHelper.php | 36 + .../Componentbuilder/Utilities/RepoHelper.php | 78 + .../VDM.Joomla/src/Data/Action/Delete.php | 112 ++ .../Power/Database => Data/Action}/Insert.php | 66 +- .../Power/Database => Data/Action}/Load.php | 66 +- .../Power/Database => Data/Action}/Update.php | 88 +- .../VDM.Joomla/src/Data/Action/index.html | 1 + .../vendor_jcb/VDM.Joomla/src/Data/Item.php | 254 +++ .../vendor_jcb/VDM.Joomla/src/Data/Items.php | 351 ++++ .../vendor_jcb/VDM.Joomla/src/Data/Remote.php | 169 ++ .../VDM.Joomla/src/Database/Delete.php | 132 ++ .../VDM.Joomla/src/Database/Load.php | 46 +- .../src/Interfaces/Data/DeleteInterface.php | 60 + .../Data}/InsertInterface.php | 25 +- .../src/Interfaces/Data/ItemInterface.php | 86 + .../src/Interfaces/Data/ItemsInterface.php | 85 + .../Data}/LoadInterface.php | 31 +- .../src/Interfaces/Data/RemoteInterface.php | 69 + .../Data}/UpdateInterface.php | 36 +- .../VDM.Joomla/src/Interfaces/Data/index.html | 1 + .../src/Interfaces/DeleteInterface.php | 43 + .../src/Interfaces/ModelInterface.php | 40 +- .../Power => }/Model/Load.php | 29 +- .../Power => }/Model/Upsert.php | 28 +- .../VDM.Joomla/src/Model/index.html | 1 + .../VDM.Joomla/src/Service/Data.php | 162 ++ .../Service/Database.php | 19 +- .../VDM.Joomla/src/Service/Model.php | 75 + .../VDM.Joomla/src/Service/index.html | 1 + media/js/field.js | 65 - media/js/repository.js | 11 + 120 files changed, 8945 insertions(+), 3699 deletions(-) create mode 100644 admin/assets/css/repositories.css create mode 100644 admin/assets/css/repository.css create mode 100644 admin/assets/images/icons/repositories.png create mode 100644 admin/forms/filter_repositories.xml create mode 100644 admin/forms/repository.xml create mode 100644 admin/layouts/repository/details_above.php create mode 100644 admin/layouts/repository/details_left.php create mode 100644 admin/layouts/repository/details_right.php rename {libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/Database => admin/layouts/repository}/index.html (100%) create mode 100644 admin/layouts/repository/publishing.php create mode 100644 admin/layouts/repository/publlshing.php create mode 100644 admin/src/Controller/RepositoriesController.php create mode 100644 admin/src/Controller/RepositoryController.php create mode 100644 admin/src/Field/RepositoriesfilterbaseField.php create mode 100644 admin/src/Field/RepositoriesfilterorganisationField.php create mode 100644 admin/src/Field/RepositoriesfilterrepositoryField.php create mode 100644 admin/src/Field/RepositoriesfiltertargetField.php create mode 100644 admin/src/Model/RepositoriesModel.php create mode 100644 admin/src/Model/RepositoryModel.php create mode 100644 admin/src/Table/RepositoryTable.php create mode 100644 admin/src/View/Repositories/HtmlView.php rename {libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Database => admin/src/View/Repositories}/index.html (100%) create mode 100644 admin/src/View/Repository/HtmlView.php rename {libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Model => admin/src/View/Repository}/index.html (100%) create mode 100644 admin/tmpl/repositories/default.php create mode 100644 admin/tmpl/repositories/default_body.php create mode 100644 admin/tmpl/repositories/default_foot.php create mode 100644 admin/tmpl/repositories/default_head.php create mode 100644 admin/tmpl/repositories/default_toolbar.php create mode 100644 admin/tmpl/repositories/emptystate.php rename {libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Database => admin/tmpl/repositories}/index.html (100%) create mode 100644 admin/tmpl/repository/default.php rename {libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Model => admin/tmpl/repository}/index.html (100%) delete mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Interfaces/SuperInterface.php delete mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Database/Insert.php delete mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Database/Load.php delete mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Database/Update.php delete mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Model/Load.php delete mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Model/Upsert.php delete mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/JoomlaPower/Service/Database.php delete mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Power/Service/Database.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Utilities/RepoHelper.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Data/Action/Delete.php rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder/Power/Database => Data/Action}/Insert.php (66%) rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder/Power/Database => Data/Action}/Load.php (70%) rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder/Power/Database => Data/Action}/Update.php (53%) create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Data/Action/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Data/Item.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Data/Items.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Data/Remote.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Database/Delete.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/DeleteInterface.php rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder/Interfaces/Database => Interfaces/Data}/InsertInterface.php (80%) create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/ItemInterface.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/ItemsInterface.php rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder/Power/Database => Interfaces/Data}/LoadInterface.php (78%) create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/RemoteInterface.php rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder/Interfaces/Database => Interfaces/Data}/UpdateInterface.php (65%) create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Interfaces/Data/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Interfaces/DeleteInterface.php rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder/Power => }/Model/Load.php (84%) rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder/Power => }/Model/Upsert.php (86%) create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Model/index.html create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Service/Data.php rename libraries/vendor_jcb/VDM.Joomla/src/{Componentbuilder => }/Service/Database.php (79%) create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Service/Model.php create mode 100644 libraries/vendor_jcb/VDM.Joomla/src/Service/index.html create mode 100644 media/js/repository.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 0443f6066..4feb6941f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,17 @@ -# v4.0.1-alpha4 +# v4.0.1-alpha5 -- Change the extendsinterfaces field to allow null, #1139 -- Update the Schema class to also update null mismatching if needed +- Add repositories for better integration with gitea +- Refactored the Data classes +- Add new Data classes # v4.0.1-alpha - Fix auto build from SQL in Joomla 4. - Fix permission issue for admin views. - Add in JCB gitea push feature to help maintain JCB core features. -- Add extending options to interfaces. +- Add extending options to interfaces. +- Change the extendsinterfaces field to allow null, #1139 +- Update the Schema class to also update null mismatching if needed # v4.0.0 diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php index 7747e73e9..4f08b6a47 100644 --- a/ComponentbuilderInstallerScript.php +++ b/ComponentbuilderInstallerScript.php @@ -264,6 +264,9 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // Remove Server Data $this->removeViewData("com_componentbuilder.server"); + // Remove Repository Data + $this->removeViewData("com_componentbuilder.repository"); + // Remove Help document Data $this->removeViewData("com_componentbuilder.help_document"); @@ -423,6 +426,9 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // Remove Server from action logs config table. $this->removeActionLogConfig('com_componentbuilder.server'); + // Remove Repository from action logs config table. + $this->removeActionLogConfig('com_componentbuilder.repository'); + // Remove Help_document from action logs config table. $this->removeActionLogConfig('com_componentbuilder.help_document'); @@ -617,11 +623,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": "php_site_event","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"system_name":"system_name","name_code":"name_code","short_description":"short_description","companyname":"companyname","php_site_event":"php_site_event","component_version":"component_version","php_admin_event":"php_admin_event","crowdin_username":"crowdin_username","php_preflight_install":"php_preflight_install","remove_line_breaks":"remove_line_breaks","description":"description","php_method_uninstall":"php_method_uninstall","debug_linenr":"debug_linenr","mvc_versiondate":"mvc_versiondate","css_admin":"css_admin","addreadme":"addreadme","php_postflight_install":"php_postflight_install","add_placeholders":"add_placeholders","sql":"sql","author":"author","update_server_url":"update_server_url","email":"email","add_backup_folder_path":"add_backup_folder_path","website":"website","translation_tool":"translation_tool","add_license":"add_license","buildcompsql":"buildcompsql","license_type":"license_type","php_helper_admin":"php_helper_admin","php_helper_site":"php_helper_site","whmcs_key":"whmcs_key","javascript":"javascript","whmcs_url":"whmcs_url","css_site":"css_site","whmcs_buy_link":"whmcs_buy_link","license":"license","php_preflight_update":"php_preflight_update","bom":"bom","php_postflight_update":"php_postflight_update","image":"image","php_method_install":"php_method_install","copyright":"copyright","sql_uninstall":"sql_uninstall","preferred_joomla_version":"preferred_joomla_version","add_powers":"add_powers","add_sales_server":"add_sales_server","backup_folder_path":"backup_folder_path","add_jcb_powers_path":"add_jcb_powers_path","crowdin_project_identifier":"crowdin_project_identifier","add_php_helper_admin":"add_php_helper_admin","add_admin_event":"add_admin_event","add_php_helper_site":"add_php_helper_site","add_site_event":"add_site_event","add_namespace_prefix":"add_namespace_prefix","add_javascript":"add_javascript","namespace_prefix":"namespace_prefix","add_css_admin":"add_css_admin","add_css_site":"add_css_site","add_menu_prefix":"add_menu_prefix","dashboard_type":"dashboard_type","menu_prefix":"menu_prefix","dashboard":"dashboard","add_php_preflight_install":"add_php_preflight_install","add_php_preflight_update":"add_php_preflight_update","toignore":"toignore","add_php_postflight_install":"add_php_postflight_install","add_php_postflight_update":"add_php_postflight_update","add_php_method_uninstall":"add_php_method_uninstall","export_key":"export_key","add_php_method_install":"add_php_method_install","joomla_source_link":"joomla_source_link","add_sql":"add_sql","export_buy_link":"export_buy_link","add_sql_uninstall":"add_sql_uninstall","assets_table_fix":"assets_table_fix","readme":"readme","add_update_server":"add_update_server","emptycontributors":"emptycontributors","update_server_target":"update_server_target","number":"number","update_server":"update_server","sales_server":"sales_server","add_git_folder_path":"add_git_folder_path","git_folder_path":"git_folder_path","jcb_powers_path":"jcb_powers_path","creatuserhelper":"creatuserhelper","adduikit":"adduikit","crowdin_project_api_key":"crowdin_project_api_key","addfootable":"addfootable","crowdin_account_api_key":"crowdin_account_api_key","add_email_helper":"add_email_helper","buildcomp":"buildcomp","add_php_helper_both":"add_php_helper_both","guid":"guid","php_helper_both":"php_helper_both","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": "php_postflight_update","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"system_name":"system_name","name_code":"name_code","short_description":"short_description","companyname":"companyname","crowdin_project_identifier":"crowdin_project_identifier","backup_folder_path":"backup_folder_path","sql_uninstall":"sql_uninstall","php_postflight_update":"php_postflight_update","css_site":"css_site","mvc_versiondate":"mvc_versiondate","remove_line_breaks":"remove_line_breaks","add_placeholders":"add_placeholders","php_helper_site":"php_helper_site","javascript":"javascript","description":"description","debug_linenr":"debug_linenr","author":"author","php_method_install":"php_method_install","email":"email","website":"website","add_sales_server":"add_sales_server","license":"license","add_jcb_powers_path":"add_jcb_powers_path","bom":"bom","image":"image","php_admin_event":"php_admin_event","copyright":"copyright","php_site_event":"php_site_event","css_admin":"css_admin","php_preflight_update":"php_preflight_update","component_version":"component_version","php_preflight_install":"php_preflight_install","preferred_joomla_version":"preferred_joomla_version","php_postflight_install":"php_postflight_install","add_powers":"add_powers","php_method_uninstall":"php_method_uninstall","sql":"sql","addreadme":"addreadme","update_server_url":"update_server_url","add_backup_folder_path":"add_backup_folder_path","translation_tool":"translation_tool","crowdin_username":"crowdin_username","buildcompsql":"buildcompsql","add_namespace_prefix":"add_namespace_prefix","namespace_prefix":"namespace_prefix","add_php_helper_site":"add_php_helper_site","add_site_event":"add_site_event","add_menu_prefix":"add_menu_prefix","add_javascript":"add_javascript","menu_prefix":"menu_prefix","add_css_admin":"add_css_admin","add_css_site":"add_css_site","dashboard_type":"dashboard_type","toignore":"toignore","dashboard":"dashboard","add_php_preflight_install":"add_php_preflight_install","add_php_preflight_update":"add_php_preflight_update","export_key":"export_key","add_php_postflight_install":"add_php_postflight_install","joomla_source_link":"joomla_source_link","add_php_postflight_update":"add_php_postflight_update","export_buy_link":"export_buy_link","add_php_method_uninstall":"add_php_method_uninstall","add_php_method_install":"add_php_method_install","add_sql":"add_sql","add_sql_uninstall":"add_sql_uninstall","emptycontributors":"emptycontributors","assets_table_fix":"assets_table_fix","number":"number","readme":"readme","add_update_server":"add_update_server","update_server_target":"update_server_target","update_server":"update_server","sales_server":"sales_server","creatuserhelper":"creatuserhelper","add_git_folder_path":"add_git_folder_path","adduikit":"adduikit","git_folder_path":"git_folder_path","addfootable":"addfootable","jcb_powers_path":"jcb_powers_path","add_email_helper":"add_email_helper","add_php_helper_both":"add_php_helper_both","crowdin_project_api_key":"crowdin_project_api_key","php_helper_both":"php_helper_both","crowdin_account_api_key":"crowdin_account_api_key","add_php_helper_admin":"add_php_helper_admin","buildcomp":"buildcomp","php_helper_admin":"php_helper_admin","guid":"guid","add_admin_event":"add_admin_event","name":"name"}}', // router '', // contentHistoryOptions - '{"formFile": "administrator/components/com_componentbuilder/forms/joomla_component.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","remove_line_breaks","debug_linenr","mvc_versiondate","addreadme","add_placeholders","add_backup_folder_path","translation_tool","add_license","license_type","preferred_joomla_version","add_powers","add_sales_server","add_jcb_powers_path","add_php_helper_admin","add_admin_event","add_php_helper_site","add_site_event","add_javascript","add_css_admin","add_css_site","dashboard_type","add_php_preflight_install","add_php_preflight_update","add_php_postflight_install","add_php_postflight_update","add_php_method_uninstall","add_php_method_install","add_sql","add_sql_uninstall","assets_table_fix","add_update_server","emptycontributors","update_server_target","number","update_server","sales_server","add_git_folder_path","creatuserhelper","adduikit","addfootable","add_email_helper","buildcomp","add_php_helper_both"],"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": "dashboard","targetTable": "#__componentbuilder_custom_admin_view","targetColumn": "","displayColumn": "system_name"},{"sourceColumn": "update_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "sales_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"}]}' + '{"formFile": "administrator/components/com_componentbuilder/forms/joomla_component.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","mvc_versiondate","remove_line_breaks","add_placeholders","debug_linenr","add_sales_server","add_jcb_powers_path","preferred_joomla_version","add_powers","addreadme","add_backup_folder_path","translation_tool","add_php_helper_site","add_site_event","add_javascript","add_css_admin","add_css_site","dashboard_type","add_php_preflight_install","add_php_preflight_update","add_php_postflight_install","add_php_postflight_update","add_php_method_uninstall","add_php_method_install","add_sql","add_sql_uninstall","emptycontributors","assets_table_fix","number","add_update_server","update_server_target","update_server","sales_server","creatuserhelper","add_git_folder_path","adduikit","addfootable","add_email_helper","add_php_helper_both","add_php_helper_admin","buildcomp","add_admin_event"],"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": "dashboard","targetTable": "#__componentbuilder_custom_admin_view","targetColumn": "","displayColumn": "system_name"},{"sourceColumn": "update_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "sales_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"}]}' ); // Install Joomla module Content Types. $this->setContentType( @@ -923,7 +929,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // rules '', // fieldMappings - '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "css_views","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": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","fieldtype":"fieldtype","datatype":"datatype","indexes":"indexes","null_switch":"null_switch","store":"store","on_save_model_field":"on_save_model_field","initiator_on_get_model":"initiator_on_get_model","initiator_on_save_model":"initiator_on_save_model","xml":"xml","datalenght":"datalenght","css_views":"css_views","css_view":"css_view","datadefault_other":"datadefault_other","datadefault":"datadefault","datalenght_other":"datalenght_other","on_get_model_field":"on_get_model_field","javascript_view_footer":"javascript_view_footer","javascript_views_footer":"javascript_views_footer","add_css_view":"add_css_view","add_css_views":"add_css_views","add_javascript_view_footer":"add_javascript_view_footer","add_javascript_views_footer":"add_javascript_views_footer","guid":"guid"}}', + '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "javascript_view_footer","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": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","fieldtype":"fieldtype","datatype":"datatype","indexes":"indexes","null_switch":"null_switch","store":"store","on_get_model_field":"on_get_model_field","on_save_model_field":"on_save_model_field","initiator_on_get_model":"initiator_on_get_model","xml":"xml","datalenght":"datalenght","javascript_view_footer":"javascript_view_footer","css_views":"css_views","css_view":"css_view","datadefault_other":"datadefault_other","datadefault":"datadefault","datalenght_other":"datalenght_other","javascript_views_footer":"javascript_views_footer","add_css_view":"add_css_view","add_css_views":"add_css_views","add_javascript_view_footer":"add_javascript_view_footer","add_javascript_views_footer":"add_javascript_views_footer","initiator_on_save_model":"initiator_on_save_model","guid":"guid"}}', // router '', // contentHistoryOptions @@ -1031,6 +1037,23 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // contentHistoryOptions '{"formFile": "administrator/components/com_componentbuilder/forms/server.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","protocol","authentication"],"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"}]}' ); + // Install Repository Content Types. + $this->setContentType( + // typeTitle + 'Componentbuilder Repository', + // typeAlias + 'com_componentbuilder.repository', + // table + '{"special": {"dbtable": "#__componentbuilder_repository","key": "id","type": "RepositoryTable","prefix": "VDM\Component\Componentbuilder\Administrator\Table"}}', + // 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": "null","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","organisation":"organisation","repository":"repository","target":"target","type":"type","base":"base","guid":"guid","access_repo":"access_repo","write_branch":"write_branch","read_branch":"read_branch","token":"token","username":"username"}}', + // router + '', + // contentHistoryOptions + '{"formFile": "administrator/components/com_componentbuilder/forms/repository.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","type","access_repo"],"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"}]}' + ); // Install Help document Content Types. $this->setContentType( // typeTitle @@ -1493,10 +1516,10 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // Fix the assets table rules column size. - $this->setDatabaseAssetsRulesFix(93920, "MEDIUMTEXT"); + $this->setDatabaseAssetsRulesFix(96000, "MEDIUMTEXT"); // Install the global extension params. $this->setExtensionsParams( - '{"autorName":"Llewellyn van der Merwe","autorEmail":"joomla@vdm.io","subform_layouts":"default","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","approved_paths":"default","add_custom_gitea_url":"1","custom_gitea_url":"https://git.vdm.dev","super_powers_core_organisation":"joomla","super_powers_core":"joomla/super-powers","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":"1","type_name_builder":"1","import_guid_only":"1","export_language_strings":"1","development_method":"1","expansion":"0","return_options_build":"2","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","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":"default","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":"1","type_name_builder":"1","import_guid_only":"1","export_language_strings":"1","development_method":"1","expansion":"0","return_options_build":"2","cronjob_backup_type":"1","cronjob_backup_server":"0","backup_package_name":"JCB_Backup_[YEAR]_[MONTH]_[DAY]","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":""}' ); @@ -1879,6 +1902,22 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface 'COM_COMPONENTBUILDER' ); + // Add Repository to the action logs config table. + $this->setActionLogConfig( + // typeTitle + 'REPOSITORY', + // typeAlias + 'com_componentbuilder.repository', + // idHolder + 'id', + // titleHolder + 'system_name', + // tableName + '#__componentbuilder_repository', + // textPrefix + 'COM_COMPONENTBUILDER' + ); + // Add Help_document to the action logs config table. $this->setActionLogConfig( // typeTitle @@ -2327,11 +2366,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": "php_site_event","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"system_name":"system_name","name_code":"name_code","short_description":"short_description","companyname":"companyname","php_site_event":"php_site_event","component_version":"component_version","php_admin_event":"php_admin_event","crowdin_username":"crowdin_username","php_preflight_install":"php_preflight_install","remove_line_breaks":"remove_line_breaks","description":"description","php_method_uninstall":"php_method_uninstall","debug_linenr":"debug_linenr","mvc_versiondate":"mvc_versiondate","css_admin":"css_admin","addreadme":"addreadme","php_postflight_install":"php_postflight_install","add_placeholders":"add_placeholders","sql":"sql","author":"author","update_server_url":"update_server_url","email":"email","add_backup_folder_path":"add_backup_folder_path","website":"website","translation_tool":"translation_tool","add_license":"add_license","buildcompsql":"buildcompsql","license_type":"license_type","php_helper_admin":"php_helper_admin","php_helper_site":"php_helper_site","whmcs_key":"whmcs_key","javascript":"javascript","whmcs_url":"whmcs_url","css_site":"css_site","whmcs_buy_link":"whmcs_buy_link","license":"license","php_preflight_update":"php_preflight_update","bom":"bom","php_postflight_update":"php_postflight_update","image":"image","php_method_install":"php_method_install","copyright":"copyright","sql_uninstall":"sql_uninstall","preferred_joomla_version":"preferred_joomla_version","add_powers":"add_powers","add_sales_server":"add_sales_server","backup_folder_path":"backup_folder_path","add_jcb_powers_path":"add_jcb_powers_path","crowdin_project_identifier":"crowdin_project_identifier","add_php_helper_admin":"add_php_helper_admin","add_admin_event":"add_admin_event","add_php_helper_site":"add_php_helper_site","add_site_event":"add_site_event","add_namespace_prefix":"add_namespace_prefix","add_javascript":"add_javascript","namespace_prefix":"namespace_prefix","add_css_admin":"add_css_admin","add_css_site":"add_css_site","add_menu_prefix":"add_menu_prefix","dashboard_type":"dashboard_type","menu_prefix":"menu_prefix","dashboard":"dashboard","add_php_preflight_install":"add_php_preflight_install","add_php_preflight_update":"add_php_preflight_update","toignore":"toignore","add_php_postflight_install":"add_php_postflight_install","add_php_postflight_update":"add_php_postflight_update","add_php_method_uninstall":"add_php_method_uninstall","export_key":"export_key","add_php_method_install":"add_php_method_install","joomla_source_link":"joomla_source_link","add_sql":"add_sql","export_buy_link":"export_buy_link","add_sql_uninstall":"add_sql_uninstall","assets_table_fix":"assets_table_fix","readme":"readme","add_update_server":"add_update_server","emptycontributors":"emptycontributors","update_server_target":"update_server_target","number":"number","update_server":"update_server","sales_server":"sales_server","add_git_folder_path":"add_git_folder_path","git_folder_path":"git_folder_path","jcb_powers_path":"jcb_powers_path","creatuserhelper":"creatuserhelper","adduikit":"adduikit","crowdin_project_api_key":"crowdin_project_api_key","addfootable":"addfootable","crowdin_account_api_key":"crowdin_account_api_key","add_email_helper":"add_email_helper","buildcomp":"buildcomp","add_php_helper_both":"add_php_helper_both","guid":"guid","php_helper_both":"php_helper_both","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": "php_postflight_update","core_hits": "hits","core_publish_up": "null","core_publish_down": "null","core_access": "access","core_params": "params","core_featured": "null","core_metadata": "metadata","core_language": "null","core_images": "null","core_urls": "null","core_version": "version","core_ordering": "ordering","core_metakey": "metakey","core_metadesc": "metadesc","core_catid": "null","core_xreference": "null","asset_id": "asset_id"},"special": {"system_name":"system_name","name_code":"name_code","short_description":"short_description","companyname":"companyname","crowdin_project_identifier":"crowdin_project_identifier","backup_folder_path":"backup_folder_path","sql_uninstall":"sql_uninstall","php_postflight_update":"php_postflight_update","css_site":"css_site","mvc_versiondate":"mvc_versiondate","remove_line_breaks":"remove_line_breaks","add_placeholders":"add_placeholders","php_helper_site":"php_helper_site","javascript":"javascript","description":"description","debug_linenr":"debug_linenr","author":"author","php_method_install":"php_method_install","email":"email","website":"website","add_sales_server":"add_sales_server","license":"license","add_jcb_powers_path":"add_jcb_powers_path","bom":"bom","image":"image","php_admin_event":"php_admin_event","copyright":"copyright","php_site_event":"php_site_event","css_admin":"css_admin","php_preflight_update":"php_preflight_update","component_version":"component_version","php_preflight_install":"php_preflight_install","preferred_joomla_version":"preferred_joomla_version","php_postflight_install":"php_postflight_install","add_powers":"add_powers","php_method_uninstall":"php_method_uninstall","sql":"sql","addreadme":"addreadme","update_server_url":"update_server_url","add_backup_folder_path":"add_backup_folder_path","translation_tool":"translation_tool","crowdin_username":"crowdin_username","buildcompsql":"buildcompsql","add_namespace_prefix":"add_namespace_prefix","namespace_prefix":"namespace_prefix","add_php_helper_site":"add_php_helper_site","add_site_event":"add_site_event","add_menu_prefix":"add_menu_prefix","add_javascript":"add_javascript","menu_prefix":"menu_prefix","add_css_admin":"add_css_admin","add_css_site":"add_css_site","dashboard_type":"dashboard_type","toignore":"toignore","dashboard":"dashboard","add_php_preflight_install":"add_php_preflight_install","add_php_preflight_update":"add_php_preflight_update","export_key":"export_key","add_php_postflight_install":"add_php_postflight_install","joomla_source_link":"joomla_source_link","add_php_postflight_update":"add_php_postflight_update","export_buy_link":"export_buy_link","add_php_method_uninstall":"add_php_method_uninstall","add_php_method_install":"add_php_method_install","add_sql":"add_sql","add_sql_uninstall":"add_sql_uninstall","emptycontributors":"emptycontributors","assets_table_fix":"assets_table_fix","number":"number","readme":"readme","add_update_server":"add_update_server","update_server_target":"update_server_target","update_server":"update_server","sales_server":"sales_server","creatuserhelper":"creatuserhelper","add_git_folder_path":"add_git_folder_path","adduikit":"adduikit","git_folder_path":"git_folder_path","addfootable":"addfootable","jcb_powers_path":"jcb_powers_path","add_email_helper":"add_email_helper","add_php_helper_both":"add_php_helper_both","crowdin_project_api_key":"crowdin_project_api_key","php_helper_both":"php_helper_both","crowdin_account_api_key":"crowdin_account_api_key","add_php_helper_admin":"add_php_helper_admin","buildcomp":"buildcomp","php_helper_admin":"php_helper_admin","guid":"guid","add_admin_event":"add_admin_event","name":"name"}}', // router '', // contentHistoryOptions - '{"formFile": "administrator/components/com_componentbuilder/forms/joomla_component.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","remove_line_breaks","debug_linenr","mvc_versiondate","addreadme","add_placeholders","add_backup_folder_path","translation_tool","add_license","license_type","preferred_joomla_version","add_powers","add_sales_server","add_jcb_powers_path","add_php_helper_admin","add_admin_event","add_php_helper_site","add_site_event","add_javascript","add_css_admin","add_css_site","dashboard_type","add_php_preflight_install","add_php_preflight_update","add_php_postflight_install","add_php_postflight_update","add_php_method_uninstall","add_php_method_install","add_sql","add_sql_uninstall","assets_table_fix","add_update_server","emptycontributors","update_server_target","number","update_server","sales_server","add_git_folder_path","creatuserhelper","adduikit","addfootable","add_email_helper","buildcomp","add_php_helper_both"],"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": "dashboard","targetTable": "#__componentbuilder_custom_admin_view","targetColumn": "","displayColumn": "system_name"},{"sourceColumn": "update_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "sales_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"}]}' + '{"formFile": "administrator/components/com_componentbuilder/forms/joomla_component.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","mvc_versiondate","remove_line_breaks","add_placeholders","debug_linenr","add_sales_server","add_jcb_powers_path","preferred_joomla_version","add_powers","addreadme","add_backup_folder_path","translation_tool","add_php_helper_site","add_site_event","add_javascript","add_css_admin","add_css_site","dashboard_type","add_php_preflight_install","add_php_preflight_update","add_php_postflight_install","add_php_postflight_update","add_php_method_uninstall","add_php_method_install","add_sql","add_sql_uninstall","emptycontributors","assets_table_fix","number","add_update_server","update_server_target","update_server","sales_server","creatuserhelper","add_git_folder_path","adduikit","addfootable","add_email_helper","add_php_helper_both","add_php_helper_admin","buildcomp","add_admin_event"],"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": "dashboard","targetTable": "#__componentbuilder_custom_admin_view","targetColumn": "","displayColumn": "system_name"},{"sourceColumn": "update_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"},{"sourceColumn": "sales_server","targetTable": "#__componentbuilder_server","targetColumn": "id","displayColumn": "name"}]}' ); // Update Joomla module Content Types. $this->setContentType( @@ -2633,7 +2672,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // rules '', // fieldMappings - '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "css_views","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": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","fieldtype":"fieldtype","datatype":"datatype","indexes":"indexes","null_switch":"null_switch","store":"store","on_save_model_field":"on_save_model_field","initiator_on_get_model":"initiator_on_get_model","initiator_on_save_model":"initiator_on_save_model","xml":"xml","datalenght":"datalenght","css_views":"css_views","css_view":"css_view","datadefault_other":"datadefault_other","datadefault":"datadefault","datalenght_other":"datalenght_other","on_get_model_field":"on_get_model_field","javascript_view_footer":"javascript_view_footer","javascript_views_footer":"javascript_views_footer","add_css_view":"add_css_view","add_css_views":"add_css_views","add_javascript_view_footer":"add_javascript_view_footer","add_javascript_views_footer":"add_javascript_views_footer","guid":"guid"}}', + '{"common": {"core_content_item_id": "id","core_title": "name","core_state": "published","core_alias": "null","core_created_time": "created","core_modified_time": "modified","core_body": "javascript_view_footer","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": "catid","core_xreference": "null","asset_id": "asset_id"},"special": {"name":"name","fieldtype":"fieldtype","datatype":"datatype","indexes":"indexes","null_switch":"null_switch","store":"store","on_get_model_field":"on_get_model_field","on_save_model_field":"on_save_model_field","initiator_on_get_model":"initiator_on_get_model","xml":"xml","datalenght":"datalenght","javascript_view_footer":"javascript_view_footer","css_views":"css_views","css_view":"css_view","datadefault_other":"datadefault_other","datadefault":"datadefault","datalenght_other":"datalenght_other","javascript_views_footer":"javascript_views_footer","add_css_view":"add_css_view","add_css_views":"add_css_views","add_javascript_view_footer":"add_javascript_view_footer","add_javascript_views_footer":"add_javascript_views_footer","initiator_on_save_model":"initiator_on_save_model","guid":"guid"}}', // router '', // contentHistoryOptions @@ -2741,6 +2780,23 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // contentHistoryOptions '{"formFile": "administrator/components/com_componentbuilder/forms/server.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","protocol","authentication"],"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"}]}' ); + // Update Repository Content Types. + $this->setContentType( + // typeTitle + 'Componentbuilder Repository', + // typeAlias + 'com_componentbuilder.repository', + // table + '{"special": {"dbtable": "#__componentbuilder_repository","key": "id","type": "RepositoryTable","prefix": "VDM\Component\Componentbuilder\Administrator\Table"}}', + // 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": "null","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","organisation":"organisation","repository":"repository","target":"target","type":"type","base":"base","guid":"guid","access_repo":"access_repo","write_branch":"write_branch","read_branch":"read_branch","token":"token","username":"username"}}', + // router + '', + // contentHistoryOptions + '{"formFile": "administrator/components/com_componentbuilder/forms/repository.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","type","access_repo"],"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"}]}' + ); // Update Help document Content Types. $this->setContentType( // typeTitle @@ -3210,7 +3266,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface echo '
-

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

'; +

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

'; // Add/Update component in the action logs extensions table. $this->setActionLogsExtensions(); @@ -3583,6 +3639,22 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface 'COM_COMPONENTBUILDER' ); + // Add/Update Repository in the action logs config table. + $this->setActionLogConfig( + // typeTitle + 'REPOSITORY', + // typeAlias + 'com_componentbuilder.repository', + // idHolder + 'id', + // titleHolder + 'system_name', + // tableName + '#__componentbuilder_repository', + // textPrefix + 'COM_COMPONENTBUILDER' + ); + // Add/Update Help_document in the action logs config table. $this->setActionLogConfig( // typeTitle diff --git a/README.md b/README.md index f1fe2587c..8e9f5e40d 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have! -You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.1-alpha4) with **ALL** its features and **ALL** concepts totally open-source and free! +You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.1-alpha5) with **ALL** its features and **ALL** concepts totally open-source and free! > Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45) @@ -144,14 +144,14 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 7th June, 2024 -+ *Version*: 4.0.1-alpha4 ++ *Last Build*: 20th June, 2024 ++ *Version*: 4.0.1-alpha5 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **749939** -+ *Field count*: **2100** -+ *File count*: **5298** -+ *Folder count*: **528** ++ *Line count*: **758355** ++ *Field count*: **2104** ++ *File count*: **5355** ++ *Folder count*: **532** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) diff --git a/admin/README.txt b/admin/README.txt index f1fe2587c..8e9f5e40d 100644 --- a/admin/README.txt +++ b/admin/README.txt @@ -9,7 +9,7 @@ The Component Builder for [Joomla](https://extensions.joomla.org/extension/compo Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/component-builder/) developer, or have just started, Component Builder will save you lots of time and money. A real must have! -You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.1-alpha4) with **ALL** its features and **ALL** concepts totally open-source and free! +You can install it quite easily and with no limitations. On [gitea](https://git.vdm.dev/joomla/Component-Builder/tags) is the latest release (4.0.1-alpha5) with **ALL** its features and **ALL** concepts totally open-source and free! > Watch Quick Build of a Hello World component in [JCB on Youtube](https://www.youtube.com/watch?v=IQfsLYIeblk&list=PLQRGFI8XZ_wtGvPQZWBfDzzlERLQgpMRE&index=45) @@ -144,14 +144,14 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 7th June, 2024 -+ *Version*: 4.0.1-alpha4 ++ *Last Build*: 20th June, 2024 ++ *Version*: 4.0.1-alpha5 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **749939** -+ *Field count*: **2100** -+ *File count*: **5298** -+ *Folder count*: **528** ++ *Line count*: **758355** ++ *Field count*: **2104** ++ *File count*: **5355** ++ *Folder count*: **532** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com). > Developed by [Llewellyn van der Merwe](mailto:joomla@vdm.io) diff --git a/admin/access.xml b/admin/access.xml index 9557fb999..3391674c7 100644 --- a/admin/access.xml +++ b/admin/access.xml @@ -483,6 +483,18 @@ + + + + + + + + + + + + @@ -766,6 +778,17 @@ +
+ + + + + + + + + +
diff --git a/admin/assets/css/repositories.css b/admin/assets/css/repositories.css new file mode 100644 index 000000000..2731fc5aa --- /dev/null +++ b/admin/assets/css/repositories.css @@ -0,0 +1,13 @@ +/** + * @package Joomla.Component.Builder + * + * @created 30th April, 2015 + * @author Llewellyn van der Merwe + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +/* CSS Document */ + + diff --git a/admin/assets/css/repository.css b/admin/assets/css/repository.css new file mode 100644 index 000000000..2731fc5aa --- /dev/null +++ b/admin/assets/css/repository.css @@ -0,0 +1,13 @@ +/** + * @package Joomla.Component.Builder + * + * @created 30th April, 2015 + * @author Llewellyn van der Merwe + * @git Joomla Component Builder + * @copyright Copyright (C) 2015 Vast Development Method. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ + +/* CSS Document */ + + diff --git a/admin/assets/images/icons/repositories.png b/admin/assets/images/icons/repositories.png new file mode 100644 index 0000000000000000000000000000000000000000..32d7a05590e4b488e1fbf2628fbdfd605f211714 GIT binary patch literal 20768 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 - - - -