From e8c2c17dc76a56a0a1010054508fa5c659f046c8 Mon Sep 17 00:00:00 2001 From: aB0t Date: Wed, 20 Mar 2024 14:20:20 +0200 Subject: [PATCH] Release of v4.0.0-alpha5 Add Factory class to the J5 Event class. #1093. Fix customfilelist field to conform to the new namespacing conventions. #1094. Add menus for languages, servers, get snippets to J4 #1095. --- CHANGELOG.md | 13 +- ComponentbuilderInstallerScript.php | 39 ++- README.md | 10 +- admin/README.txt | 10 +- admin/access.xml | 1 + admin/assets/images/icons/languages.png | Bin 0 -> 35804 bytes admin/forms/component_placeholders.xml | 15 +- admin/forms/placeholder.xml | 15 +- .../en-GB/en-GB.com_componentbuilder.ini | 3 + .../en-GB/en-GB.com_componentbuilder.sys.ini | 5 + admin/layouts/fieldtype/fields_fullwidth.php | 148 +---------- .../{3.2.0-beta7.sql => 3.2.0-beta8.sql} | 0 admin/sql/updates/mysql/4.0.0-alpha4.sql | 1 + admin/src/Field/CustomfilelistField.php | 11 +- admin/src/Model/ComponentbuilderModel.php | 3 +- admin/src/Model/FieldtypeModel.php | 248 ------------------ admin/src/Model/FieldtypesModel.php | 2 +- admin/src/Model/PlaceholderModel.php | 12 - admin/src/Model/PlaceholdersModel.php | 4 - admin/src/View/Field/HtmlView.php | 6 +- admin/src/View/Fieldtype/HtmlView.php | 13 - componentbuilder.xml | 9 +- componentbuilder_update_server.xml | 22 +- .../Compiler/JoomlaFive/Event.php | 1 + .../VDM.Joomla/src/Componentbuilder/Table.php | 4 +- 25 files changed, 123 insertions(+), 472 deletions(-) create mode 100644 admin/assets/images/icons/languages.png rename admin/sql/updates/mysql/{3.2.0-beta7.sql => 3.2.0-beta8.sql} (100%) create mode 100644 admin/sql/updates/mysql/4.0.0-alpha4.sql diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b1a3db24..3fc4cc173 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +# v4.0.0-alpha5 + +- Add Factory class to the J5 Event class. #1093 +- Fix customfilelist field to conform to the new namespacing conventions. #1094 +- Add menus for languages, servers, get snippets to J4 #1095 + # v4.0.0-alpha4 - Fix plugin field selection @@ -19,9 +25,6 @@ - First alpha release of Component Builder towards Joomla 4 (very unstable...) -# v3.2.0-beta7 +# v3.2.0-beta8 -- Fix plugin field selection -- Fix plugin params tab layout -- Add issue templates -- Force autoloader to always load \ No newline at end of file +- Add Factory class to the J5 Event class. #1093 \ No newline at end of file diff --git a/ComponentbuilderInstallerScript.php b/ComponentbuilderInstallerScript.php index 1248617ae..494fb5af5 100644 --- a/ComponentbuilderInstallerScript.php +++ b/ComponentbuilderInstallerScript.php @@ -497,6 +497,9 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // Remove Joomla_plugin_files_folders_urls from action logs config table. $this->removeActionLogConfig('com_componentbuilder.joomla_plugin_files_folders_urls'); + // Remove Field from action logs config table. + $this->removeActionLogConfig('com_componentbuilder.field'); + // Remove Joomla_component from action logs config table. $this->removeActionLogConfig('com_componentbuilder.joomla_component'); // little notice as after service, in case of bad experience with component. @@ -1454,7 +1457,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface // Fix the assets table rules column size. - $this->setDatabaseAssetsRulesFix(99360, "MEDIUMTEXT"); + $this->setDatabaseAssetsRulesFix(99520, "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":""}' @@ -2252,6 +2255,22 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface 'COM_COMPONENTBUILDER' ); + // Add Field to the action logs config table. + $this->setActionLogConfig( + // typeTitle + 'FIELD', + // typeAlias + 'com_componentbuilder.field', + // idHolder + 'id', + // titleHolder + 'name', + // tableName + '#__componentbuilder_field', + // textPrefix + 'COM_COMPONENTBUILDER' + ); + // Add Joomla_component to the action logs config table. $this->setActionLogConfig( // typeTitle @@ -3146,7 +3165,7 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface echo '
-

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

'; +

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

'; // Add/Update component in the action logs extensions table. $this->setActionLogsExtensions(); @@ -3935,6 +3954,22 @@ class Com_ComponentbuilderInstallerScript implements InstallerScriptInterface 'COM_COMPONENTBUILDER' ); + // Add/Update Field in the action logs config table. + $this->setActionLogConfig( + // typeTitle + 'FIELD', + // typeAlias + 'com_componentbuilder.field', + // idHolder + 'id', + // titleHolder + 'name', + // tableName + '#__componentbuilder_field', + // textPrefix + 'COM_COMPONENTBUILDER' + ); + // Add/Update Joomla_component in the action logs config table. $this->setActionLogConfig( // typeTitle diff --git a/README.md b/README.md index 2aa07b3c1..cce2ac61d 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.0-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.0-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,13 +144,13 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 15th March, 2024 -+ *Version*: 4.0.0-alpha4 ++ *Last Build*: 20th March, 2024 ++ *Version*: 4.0.0-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*: **725351** ++ *Line count*: **725003** + *Field count*: **2078** -+ *File count*: **5118** ++ *File count*: **5119** + *Folder count*: **518** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com). diff --git a/admin/README.txt b/admin/README.txt index 2aa07b3c1..cce2ac61d 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.0-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.0-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,13 +144,13 @@ TODO + *Author*: [Llewellyn van der Merwe](mailto:joomla@vdm.io) + *Name*: [Component Builder](https://git.vdm.dev/joomla/Component-Builder) + *First Build*: 30th April, 2015 -+ *Last Build*: 15th March, 2024 -+ *Version*: 4.0.0-alpha4 ++ *Last Build*: 20th March, 2024 ++ *Version*: 4.0.0-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*: **725351** ++ *Line count*: **725003** + *Field count*: **2078** -+ *File count*: **5118** ++ *File count*: **5119** + *Folder count*: **518** > This **component** was build with a [Joomla](https://extensions.joomla.org/extension/component-builder/) [Automated Component Builder](https://www.joomlacomponentbuilder.com). diff --git a/admin/access.xml b/admin/access.xml index 86cf7d64b..d15f3cc2f 100644 --- a/admin/access.xml +++ b/admin/access.xml @@ -434,6 +434,7 @@ + diff --git a/admin/assets/images/icons/languages.png b/admin/assets/images/icons/languages.png new file mode 100644 index 0000000000000000000000000000000000000000..94873206ecea9cad638977b7e41286023f2ea746 GIT binary patch literal 35804 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 - + diff --git a/admin/forms/placeholder.xml b/admin/forms/placeholder.xml index 84442d55c..92cea0d71 100644 --- a/admin/forms/placeholder.xml +++ b/admin/forms/placeholder.xml @@ -113,19 +113,20 @@ hint="COM_COMPONENTBUILDER_PLACEHOLDER_TARGET_HINT" autocomplete="off" /> - + diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index 99ba588e7..1253b5fdd 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -4314,6 +4314,7 @@ COM_COMPONENTBUILDER_DASHBOARD_IMPORTJCBPACKAGES="Import JCB Packages

vycfields; $user = Factory::getApplication()->getIdentity(); $id = $displayData->item->id; -// set the edit URL -$edit = "index.php?option=com_componentbuilder&view=fields&task=field.edit"; -// set a return value -$return = ($id) ? "index.php?option=com_componentbuilder&view=fieldtype&layout=edit&id=" . $id : ""; -// check for a return value -$jinput = Factory::getApplication()->input; -if ($_return = $jinput->get('return', null, 'base64')) -{ - $return .= "&return=" . $_return; -} -// check if return value was set -if (StringHelper::check($return)) -{ - // set the referral values - $ref = ($id) ? "&ref=fieldtype&refid=" . $id . "&return=" . urlencode(base64_encode($return)) : "&return=" . urlencode(base64_encode($return)); -} -else -{ - $ref = ($id) ? "&ref=fieldtype&refid=" . $id : ""; -} -// set the create new URL -$new = "index.php?option=com_componentbuilder&view=fields&task=field.edit" . $ref; -// set the create new and close URL -$close_new = "index.php?option=com_componentbuilder&view=fields&task=field.edit"; -// load the action object -$can = ComponentbuilderHelper::getActions('field'); + ?>
-get('field.create')): ?> -
- - -


- - - - - - - - - - - - - - - - - - $item): ?> - authorise('core.manage', 'com_checkin') || $item->checked_out == $user->id || $item->checked_out == 0; - $userChkOut = Factory::getContainer()-> - get(\Joomla\CMS\User\UserFactoryInterface::class)-> - loadUserById($item->checked_out); - $canDo = ComponentbuilderHelper::getActions('field',$item,'fields'); - ?> - - - - - - - - - published == 1): ?> - - published == 0): ?> - - published == 2): ?> - - published == -2): ?> - - - - - - -
- - - - - - - - - - - - - - - - - -
- get('field.edit')): ?> - escape($item->name); ?> - checked_out): ?> - name, $item->checked_out_time, 'fields.', $canCheckin); ?> - - - escape($item->name); ?> - - - escape($item->fieldtype_name); ?> - - datatype); ?> - - indexes); ?> - - null_switch); ?> - - store); ?> - - authorise('core.edit', 'com_componentbuilder.field.category.' . (int)$item->catid)): ?> - escape($item->category_title); ?> - - escape($item->category_title); ?> - - - - - - - - - - - - - - - - - - - id; ?> -
- -
- -
- +oops! error.....
diff --git a/admin/sql/updates/mysql/3.2.0-beta7.sql b/admin/sql/updates/mysql/3.2.0-beta8.sql similarity index 100% rename from admin/sql/updates/mysql/3.2.0-beta7.sql rename to admin/sql/updates/mysql/3.2.0-beta8.sql diff --git a/admin/sql/updates/mysql/4.0.0-alpha4.sql b/admin/sql/updates/mysql/4.0.0-alpha4.sql new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/admin/sql/updates/mysql/4.0.0-alpha4.sql @@ -0,0 +1 @@ + diff --git a/admin/src/Field/CustomfilelistField.php b/admin/src/Field/CustomfilelistField.php index 8d579e2eb..838e02e0d 100644 --- a/admin/src/Field/CustomfilelistField.php +++ b/admin/src/Field/CustomfilelistField.php @@ -43,19 +43,16 @@ class CustomfilelistField extends ListField protected function getOptions() { // get custom folder files - $localfolder = ComponentHelper::getParams('com_componentbuilder')->get('custom_folder_path', JPATH_COMPONENT_ADMINISTRATOR.'/custom'); + $localfolder = ComponentHelper::getParams('com_componentbuilder')->get('custom_folder_path', JPATH_COMPONENT_ADMINISTRATOR . '/custom'); // set the default $options[] = Html::_('select.option', '', Text::sprintf('COM_COMPONENTBUILDER_PLEASE_ADD_FILES_TO_S',$localfolder)); - // inport all needed classes - jimport('joomla.filesystem.file'); - jimport('joomla.filesystem.folder'); // setup the folder if it does not exist - if (!JFolder::exists($localfolder)) + if (!\JFolder::exists($localfolder)) { - JFolder::create($localfolder); + \JFolder::create($localfolder); } // now check if there are files in the folder - if ($files = JFolder::files($localfolder)) + if ($files = \JFolder::files($localfolder)) { $options = array(); foreach ($files as $file) diff --git a/admin/src/Model/ComponentbuilderModel.php b/admin/src/Model/ComponentbuilderModel.php index a3c76ddbd..ff23f7fd1 100644 --- a/admin/src/Model/ComponentbuilderModel.php +++ b/admin/src/Model/ComponentbuilderModel.php @@ -46,7 +46,7 @@ class ComponentbuilderModel extends ListModel $icons = []; // view groups array $viewGroups = array( - 'main' => array('png.compiler', 'png.joomla_components', 'png.joomla_modules', 'png.joomla_plugins', 'png.powers', 'png.search', 'png||importjcbpackages||index.php?option=com_componentbuilder&view=joomla_components&task=joomla_components.smartImport', 'png.admin_views', 'png.custom_admin_views', 'png.site_views', 'png.template.add', 'png.templates', 'png.layouts', 'png.dynamic_get.add', 'png.dynamic_gets', 'png.custom_codes', 'png.placeholders', 'png.libraries', 'png.snippets', 'png.get_snippets', 'png.validation_rules', 'png.field.add', 'png.fields', 'png.fields.catid_qpo0O0oqp_com_componentbuilder_po0O0oq_field', 'png.fieldtypes', 'png.fieldtypes.catid_qpo0O0oqp_com_componentbuilder_po0O0oq_fieldtype', 'png.language_translations', 'png.servers', 'png.help_documents') + 'main' => array('png.compiler', 'png.joomla_components', 'png.joomla_modules', 'png.joomla_plugins', 'png.powers', 'png.search', 'png||importjcbpackages||index.php?option=com_componentbuilder&view=joomla_components&task=joomla_components.smartImport', 'png.admin_views', 'png.custom_admin_views', 'png.site_views', 'png.template.add', 'png.templates', 'png.layouts', 'png.dynamic_get.add', 'png.dynamic_gets', 'png.custom_codes', 'png.placeholders', 'png.libraries', 'png.snippets', 'png.get_snippets', 'png.validation_rules', 'png.field.add', 'png.fields', 'png.fields.catid_qpo0O0oqp_com_componentbuilder_po0O0oq_field', 'png.fieldtypes', 'png.fieldtypes.catid_qpo0O0oqp_com_componentbuilder_po0O0oq_fieldtype', 'png.language_translations', 'png.languages', 'png.servers', 'png.help_documents') ); // view access array $viewAccess = [ @@ -155,6 +155,7 @@ class ComponentbuilderModel extends ListModel 'languages.access' => 'language.access', 'language.access' => 'language.access', 'languages.submenu' => 'language.submenu', + 'languages.dashboard_list' => 'language.dashboard_list', 'server.create' => 'server.create', 'servers.access' => 'server.access', 'server.access' => 'server.access', diff --git a/admin/src/Model/FieldtypeModel.php b/admin/src/Model/FieldtypeModel.php index 233428309..0a4a10aa1 100644 --- a/admin/src/Model/FieldtypeModel.php +++ b/admin/src/Model/FieldtypeModel.php @@ -279,258 +279,10 @@ class FieldtypeModel extends AdminModel $this->db->updateObject('#__componentbuilder_fieldtype', $objectUpdate, 'id'); } } - $this->fieldtypevvvv = $item->id; return $item; } - /** - * Method to get list data. - * - * @return mixed An array of data items on success, false on failure. - */ - public function getVycfields() - { - // Get the user object. - $user = Factory::getApplication()->getIdentity(); - // Create a new query object. - $db = $this->getDatabase(); - $query = $db->getQuery(true); - - // Select some fields - $query->select('a.*'); - $query->select($db->quoteName('c.title','category_title')); - - // From the componentbuilder_field table - $query->from($db->quoteName('#__componentbuilder_field', 'a')); - $query->join('LEFT', $db->quoteName('#__categories', 'c') . ' ON (' . $db->quoteName('a.catid') . ' = ' . $db->quoteName('c.id') . ')'); - - // do not use these filters in the export method - if (!isset($_export) || !$_export) - { - // Filtering "extension" - $filter_extension = $this->state->get("filter.extension"); - $field_ids = array(); - $get_ids = true; - if ($get_ids && $filter_extension !== null && !empty($filter_extension)) - { - // column name, and id - $type_extension = explode('__', $filter_extension); - if (($ids = JCBFilterHelper::linked((int) $type_extension[1], (string) $type_extension[0])) !== null) - { - $field_ids = $ids; - } - else - { - // there is none - $query->where($db->quoteName('a.id') . ' = ' . 0); - $get_ids = false; - } - } - - // Filtering "admin_view" - $filter_admin_view = $this->state->get("filter.admin_view"); - if ($get_ids && $filter_admin_view !== null && !empty($filter_admin_view)) - { - if (($ids = JCBFilterHelper::linked((int) $filter_admin_view, 'admin_view')) !== null) - { - // view will return less fields, so we ignore the component - $field_ids = $ids; - } - else - { - // there is none - $query->where($db->quoteName('a.id') . ' = ' . 0); - $get_ids = false; - } - } - // now check if we have IDs - if ($get_ids && UtilitiesArrayHelper::check($field_ids)) - { - $query->where($db->quoteName('a.id') . ' IN (' . implode(',', $field_ids) . ')'); - } - } - - // From the componentbuilder_fieldtype table. - $query->select($db->quoteName('g.name','fieldtype_name')); - $query->join('LEFT', $db->quoteName('#__componentbuilder_fieldtype', 'g') . ' ON (' . $db->quoteName('a.fieldtype') . ' = ' . $db->quoteName('g.id') . ')'); - - // Filter by fieldtypevvvv global. - $fieldtypevvvv = $this->fieldtypevvvv; - if (is_numeric($fieldtypevvvv )) - { - $query->where('a.fieldtype = ' . (int) $fieldtypevvvv ); - } - elseif (is_string($fieldtypevvvv)) - { - $query->where('a.fieldtype = ' . $db->quote($fieldtypevvvv)); - } - else - { - $query->where('a.fieldtype = -5'); - } - - // Join over the asset groups. - $query->select('ag.title AS access_level'); - $query->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); - // Filter by access level. - $_access = $this->getState('filter.access'); - if ($_access && is_numeric($_access)) - { - $query->where('a.access = ' . (int) $_access); - } - elseif (UtilitiesArrayHelper::check($_access)) - { - // Secure the array for the query - $_access = ArrayHelper::toInteger($_access); - // Filter by the Access Array. - $query->where('a.access IN (' . implode(',', $_access) . ')'); - } - // Implement View Level Access - if (!$user->authorise('core.options', 'com_componentbuilder')) - { - $groups = implode(',', $user->getAuthorisedViewLevels()); - $query->where('a.access IN (' . $groups . ')'); - } - - // Order the results by ordering - $query->order('a.published ASC'); - $query->order('a.ordering ASC'); - - // Load the items - $db->setQuery($query); - $db->execute(); - if ($db->getNumRows()) - { - $items = $db->loadObjectList(); - - // Set values to display correctly. - if (UtilitiesArrayHelper::check($items)) - { - // Get the user object if not set. - if (!isset($user) || !ObjectHelper::check($user)) - { - $user = $this->getCurrentUser(); - } - foreach ($items as $nr => &$item) - { - // Remove items the user can't access. - $access = ($user->authorise('field.access', 'com_componentbuilder.field.' . (int) $item->id) && $user->authorise('field.access', 'com_componentbuilder')); - if (!$access) - { - unset($items[$nr]); - continue; - } - - } - } - - // set selection value to a translatable value - if (UtilitiesArrayHelper::check($items)) - { - foreach ($items as $nr => &$item) - { - // convert datatype - $item->datatype = $this->selectionTranslationVycfields($item->datatype, 'datatype'); - // convert indexes - $item->indexes = $this->selectionTranslationVycfields($item->indexes, 'indexes'); - // convert null_switch - $item->null_switch = $this->selectionTranslationVycfields($item->null_switch, 'null_switch'); - // convert store - $item->store = $this->selectionTranslationVycfields($item->store, 'store'); - } - } - - return $items; - } - return false; - } - - /** - * Method to convert selection values to translatable string. - * - * @return string The translatable string. - */ - public function selectionTranslationVycfields($value,$name) - { - // Array of datatype language strings - if ($name === 'datatype') - { - $datatypeArray = array( - 0 => 'COM_COMPONENTBUILDER_FIELD_SELECT_AN_OPTION', - 'CHAR' => 'COM_COMPONENTBUILDER_FIELD_CHAR', - 'VARCHAR' => 'COM_COMPONENTBUILDER_FIELD_VARCHAR', - 'TEXT' => 'COM_COMPONENTBUILDER_FIELD_TEXT', - 'MEDIUMTEXT' => 'COM_COMPONENTBUILDER_FIELD_MEDIUMTEXT', - 'LONGTEXT' => 'COM_COMPONENTBUILDER_FIELD_LONGTEXT', - 'BLOB' => 'COM_COMPONENTBUILDER_FIELD_BLOB', - 'TINYBLOB' => 'COM_COMPONENTBUILDER_FIELD_TINYBLOB', - 'MEDIUMBLOB' => 'COM_COMPONENTBUILDER_FIELD_MEDIUMBLOB', - 'LONGBLOB' => 'COM_COMPONENTBUILDER_FIELD_LONGBLOB', - 'DATETIME' => 'COM_COMPONENTBUILDER_FIELD_DATETIME', - 'DATE' => 'COM_COMPONENTBUILDER_FIELD_DATE', - 'TIME' => 'COM_COMPONENTBUILDER_FIELD_TIME', - 'INT' => 'COM_COMPONENTBUILDER_FIELD_INT', - 'TINYINT' => 'COM_COMPONENTBUILDER_FIELD_TINYINT', - 'BIGINT' => 'COM_COMPONENTBUILDER_FIELD_BIGINT', - 'FLOAT' => 'COM_COMPONENTBUILDER_FIELD_FLOAT', - 'DECIMAL' => 'COM_COMPONENTBUILDER_FIELD_DECIMAL', - 'DOUBLE' => 'COM_COMPONENTBUILDER_FIELD_DOUBLE' - ); - // Now check if value is found in this array - if (isset($datatypeArray[$value]) && UtilitiesStringHelper::check($datatypeArray[$value])) - { - return $datatypeArray[$value]; - } - } - // Array of indexes language strings - if ($name === 'indexes') - { - $indexesArray = array( - 1 => 'COM_COMPONENTBUILDER_FIELD_UNIQUE_KEY', - 2 => 'COM_COMPONENTBUILDER_FIELD_KEY', - 0 => 'COM_COMPONENTBUILDER_FIELD_NONE' - ); - // Now check if value is found in this array - if (isset($indexesArray[$value]) && UtilitiesStringHelper::check($indexesArray[$value])) - { - return $indexesArray[$value]; - } - } - // Array of null_switch language strings - if ($name === 'null_switch') - { - $null_switchArray = array( - 'NULL' => 'COM_COMPONENTBUILDER_FIELD_NULL', - 'NOT NULL' => 'COM_COMPONENTBUILDER_FIELD_NOT_NULL' - ); - // Now check if value is found in this array - if (isset($null_switchArray[$value]) && UtilitiesStringHelper::check($null_switchArray[$value])) - { - return $null_switchArray[$value]; - } - } - // Array of store language strings - if ($name === 'store') - { - $storeArray = array( - 0 => 'COM_COMPONENTBUILDER_FIELD_DEFAULT', - 1 => 'COM_COMPONENTBUILDER_FIELD_JSON', - 2 => 'COM_COMPONENTBUILDER_FIELD_BASE64', - 3 => 'COM_COMPONENTBUILDER_FIELD_BASIC_ENCRYPTION_LOCALDBKEY', - 5 => 'COM_COMPONENTBUILDER_FIELD_MEDIUM_ENCRYPTION_LOCALFILEKEY', - 4 => 'COM_COMPONENTBUILDER_FIELD_WHMCSKEY_ENCRYPTION', - 6 => 'COM_COMPONENTBUILDER_FIELD_EXPERT_MODE_CUSTOM' - ); - // Now check if value is found in this array - if (isset($storeArray[$value]) && UtilitiesStringHelper::check($storeArray[$value])) - { - return $storeArray[$value]; - } - } - return $value; - } - /** * Method to get the record form. * diff --git a/admin/src/Model/FieldtypesModel.php b/admin/src/Model/FieldtypesModel.php index b1648cbc3..e16c0f911 100644 --- a/admin/src/Model/FieldtypesModel.php +++ b/admin/src/Model/FieldtypesModel.php @@ -426,7 +426,7 @@ class FieldtypesModel extends ListModel // Get a db connection. $db = Factory::getDbo(); // get the columns - $columns = $db->getTableColumns("#__componentbuilder_fieldtype"); + $columns = $db->getTableColumns("#__componentbuilder_[[[view]]]"); if (UtilitiesArrayHelper::check($columns)) { // remove the headers you don't import/export. diff --git a/admin/src/Model/PlaceholderModel.php b/admin/src/Model/PlaceholderModel.php index 7935aa1da..0f07cae82 100644 --- a/admin/src/Model/PlaceholderModel.php +++ b/admin/src/Model/PlaceholderModel.php @@ -195,12 +195,6 @@ class PlaceholderModel extends AdminModel $item->metadata = $registry->toArray(); } - if (!empty($item->value)) - { - // base64 Decode value. - $item->value = base64_decode($item->value); - } - if (empty($item->id)) { @@ -952,12 +946,6 @@ class PlaceholderModel extends AdminModel // add the padding (needed) $data['target'] = '[[[' . trim($data['target']) . ']]]'; - // Set the value string to base64 string. - if (isset($data['value'])) - { - $data['value'] = base64_encode($data['value']); - } - // Set the Params Items to data if (isset($data['params']) && is_array($data['params'])) { diff --git a/admin/src/Model/PlaceholdersModel.php b/admin/src/Model/PlaceholdersModel.php index 672bd971e..0027b30e8 100644 --- a/admin/src/Model/PlaceholdersModel.php +++ b/admin/src/Model/PlaceholdersModel.php @@ -192,8 +192,6 @@ class PlaceholdersModel extends ListModel continue; } - // decode value - $item->value = base64_decode($item->value); } } @@ -360,8 +358,6 @@ class PlaceholdersModel extends ListModel continue; } - // decode value - $item->value = base64_decode($item->value); // unset the values we don't want exported. unset($item->asset_id); unset($item->checked_out); diff --git a/admin/src/View/Field/HtmlView.php b/admin/src/View/Field/HtmlView.php index 5c0a972a4..a13c8ae72 100644 --- a/admin/src/View/Field/HtmlView.php +++ b/admin/src/View/Field/HtmlView.php @@ -246,8 +246,10 @@ class HtmlView extends BaseHtmlView // add return_here $this->document->addScriptDeclaration("var return_here = '" . urlencode(base64_encode((string) \JUri::getInstance())) . "';"); // add the libs for subform (since not adding it via xml but ajax) - Html::_('jquery.ui', array('core', 'sortable')); - Html::_('script', 'system/subform-repeatable.js', array('version' => 'auto', 'relative' => true)); + Factory::getApplication() + ->getDocument() + ->getWebAssetManager() + ->useScript('webcomponent.field-subform'); // set some lang Text::script('COM_COMPONENTBUILDER_PROPERTY_ALREADY_SELECTED_TRY_ANOTHER'); Text::script('COM_COMPONENTBUILDER_TYPE_OR_SELECT_SOME_OPTIONS'); diff --git a/admin/src/View/Fieldtype/HtmlView.php b/admin/src/View/Fieldtype/HtmlView.php index 4b0b71e79..110646ca6 100644 --- a/admin/src/View/Fieldtype/HtmlView.php +++ b/admin/src/View/Fieldtype/HtmlView.php @@ -81,9 +81,6 @@ class HtmlView extends BaseHtmlView $this->referral .= '&return=' . (string) $return; } - // Get Linked view data - $this->vycfields = $this->get('Vycfields'); - // Set the toolbar $this->addToolBar(); @@ -227,16 +224,6 @@ class HtmlView extends BaseHtmlView } // Add Ajax Token $this->getDocument()->addScriptDeclaration("var token = '" . Session::getFormToken() . "';"); - - // Add the CSS for Footable - Html::_('stylesheet', 'https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css', ['version' => 'auto']); - Html::_('stylesheet', 'media/com_componentbuilder/footable-v3/css/footable.standalone.min.css', ['version' => 'auto']); - // Add the JavaScript for Footable (adding all functions) - Html::_('script', 'media/com_componentbuilder/footable-v3/js/footable.min.js', ['version' => 'auto']); - - $footable = "jQuery(document).ready(function() { jQuery(function () { jQuery('.footable').footable();});});"; - $this->getDocument()->addScriptDeclaration($footable); - // add scripts foreach ($this->scripts as $script) { diff --git a/componentbuilder.xml b/componentbuilder.xml index 06a5d2db2..33ca1a083 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,15 +1,15 @@ COM_COMPONENTBUILDER - 15th March, 2024 + 20th March, 2024 Llewellyn van der Merwe joomla@vdm.io https://dev.vdm.io Copyright (C) 2015 Vast Development Method. All rights reserved. GNU General Public License version 2 or later; see LICENSE.txt - 4.0.0-alpha4 + 4.0.0-alpha5 Component Builder (v.4.0.0-alpha4) +

Component Builder (v.4.0.0-alpha5)

The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time. @@ -77,10 +77,13 @@ Whether you're a seasoned [Joomla](https://extensions.joomla.org/extension/compo

COM_COMPONENTBUILDER_MENU_PLACEHOLDERS COM_COMPONENTBUILDER_MENU_LIBRARIES COM_COMPONENTBUILDER_MENU_SNIPPETS + COM_COMPONENTBUILDER_MENU_GET_SNIPPETS COM_COMPONENTBUILDER_MENU_VALIDATION_RULES COM_COMPONENTBUILDER_MENU_FIELDS COM_COMPONENTBUILDER_MENU_FIELDTYPES COM_COMPONENTBUILDER_MENU_LANGUAGE_TRANSLATIONS + COM_COMPONENTBUILDER_MENU_LANGUAGES + COM_COMPONENTBUILDER_MENU_SERVERS COM_COMPONENTBUILDER_MENU_HELP_DOCUMENTS diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml index 2d21c7349..5e6873f38 100644 --- a/componentbuilder_update_server.xml +++ b/componentbuilder_update_server.xml @@ -5,10 +5,10 @@ pkg_component_builder package site - 3.2.0-beta7 + 3.2.0-beta8 https://dev.vdm.io - https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.2.0-beta7.zip + https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.2.0-beta8.zip beta @@ -89,4 +89,22 @@ https://dev.vdm.io + + Component Builder + Builds Complex Joomla Components + pkg_component_builder + package + site + 4.0.0-alpha5 + https://dev.vdm.io + + https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v4.0.0-alpha5.zip + + + alpha + + Llewellyn van der Merwe + https://dev.vdm.io + + \ No newline at end of file diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/Event.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/Event.php index 232fb6221..f38ac5e2d 100644 --- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/Event.php +++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Compiler/JoomlaFive/Event.php @@ -12,6 +12,7 @@ namespace VDM\Joomla\Componentbuilder\Compiler\JoomlaFive; +use Joomla\CMS\Factory; use Joomla\Registry\Registry; use Joomla\CMS\Plugin\PluginHelper; use VDM\Joomla\Utilities\Component\Helper; diff --git a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Table.php b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Table.php index 23626f62e..b235f51eb 100644 --- a/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Table.php +++ b/libraries/jcb_powers/VDM.Joomla/src/Componentbuilder/Table.php @@ -4056,10 +4056,10 @@ class Table extends BaseTable implements Tableinterface 'value' => [ 'name' => 'value', 'label' => 'COM_COMPONENTBUILDER_PLACEHOLDER_VALUE_LABEL', - 'type' => 'text', + 'type' => 'textarea', 'title' => false, 'list' => 'placeholders', - 'store' => 'base64', + 'store' => NULL, 'tab_name' => 'Details', ], ],