diff --git a/CHANGELOG.md b/CHANGELOG.md index ee97b7b14..bf5549e37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,13 @@ -# v3.2.4-alpha2 +# v3.2.4-alpha3 -- Fix library save as copy error. #1162 -- Fix the error when no components exists. #1164 -- Fix search page error due to File class. +- Fix usergrouplist compiler triggers. #1100 # v3.2.4-alpha -- Add push option to powers area +- Add push option to powers area +- Fix library save as copy error. #1162 +- Fix the error when no components exists. #1164 +- Fix search page error due to File class. # v3.2.3 diff --git a/README.md b/README.md index a1b1fdb2e..c59add56b 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 (3.2.4-alpha2) 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 (3.2.4-alpha3) 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*: 21st August, 2024 -+ *Version*: 3.2.4-alpha2 ++ *Last Build*: 23rd August, 2024 ++ *Version*: 3.2.4-alpha3 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **835591** ++ *Line count*: **840006** + *Field count*: **2098** -+ *File count*: **5678** -+ *Folder count*: **496** ++ *File count*: **5722** ++ *Folder count*: **500** > 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 a1b1fdb2e..c59add56b 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 (3.2.4-alpha2) 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 (3.2.4-alpha3) 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*: 21st August, 2024 -+ *Version*: 3.2.4-alpha2 ++ *Last Build*: 23rd August, 2024 ++ *Version*: 3.2.4-alpha3 + *Copyright*: Copyright (C) 2015 Vast Development Method. All rights reserved. + *License*: GNU General Public License version 2 or later; see LICENSE.txt -+ *Line count*: **835591** ++ *Line count*: **840006** + *Field count*: **2098** -+ *File count*: **5678** -+ *Folder count*: **496** ++ *File count*: **5722** ++ *Folder count*: **500** > 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 e2e564188..2f2cd418c 100644 --- a/admin/access.xml +++ b/admin/access.xml @@ -288,6 +288,9 @@ + + + diff --git a/admin/controllers/fieldtype.php b/admin/controllers/fieldtype.php index 8823ffe89..e46ae1862 100644 --- a/admin/controllers/fieldtype.php +++ b/admin/controllers/fieldtype.php @@ -20,6 +20,7 @@ use Joomla\Utilities\ArrayHelper; use Joomla\CMS\Router\Route; use Joomla\CMS\Session\Session; use Joomla\CMS\Uri\Uri; +use VDM\Joomla\Componentbuilder\Fieldtype\Factory as FieldtypeFactory; /** * Fieldtype Form Controller @@ -48,6 +49,152 @@ class ComponentbuilderControllerFieldtype extends FormController parent::__construct($config); } + + /** + * Resets the specified Joomla Field Type. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the item data posted by the user. + * 3. It checks whether the current user has the necessary permissions to reset the Joomla Field Type. + * 4. It validates the presence of the necessary item identifiers (ID and GUID). + * 5. If the user is authorized and the identifiers are valid, it attempts to reset the specified Joomla Field Type. + * 6. Depending on the result of the reset operation, it sets the appropriate success or error message. + * 7. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful reset, false on failure. + */ + public function resetPowers() + { + // Check for request forgeries + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + // get Item posted + $item = $this->input->post->get('jform', array(), 'array'); + + // check if user has the right + $user = Factory::getUser(); + + // set default error message + $message = '

' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_JOOMLA_FIELD_TYPE') . '

'; + $status = 'error'; + $success = false; + + // load the ID + $id = $item['id'] ?? null; + $guid = $item['guid'] ?? null; + + // check if there is any selections + if ($id === null || $guid === null) + { + // set error message + $message = '

' . Text::_('COM_COMPONENTBUILDER_NOT_SAVED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_FIELD_TYPE_BEFORE_YOU_CAN_USE_THIS_FEATURE') . '

'; + } + elseif($user->authorise('fieldtype.reset', 'com_componentbuilder')) + { + if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->reset([$guid])) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_FIELD_TYPE_HAS_SUCCESSFULLY_BEEN_RESET').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_FIELD_TYPE_HAS_FAILED') . '

'; + } + } + + // set redirect + $redirect_url = Route::_( + 'index.php?option=com_componentbuilder&view=fieldtype' + . $this->getRedirectToItemAppend($id), $success + ); + + $this->setRedirect($redirect_url, $message, $status); + + return $success; + } + + /** + * Pushes the specified Joomla Field Type. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the item data posted by the user. + * 3. It checks whether the current user has the necessary permissions to push the Joomla Field Type. + * 4. It validates the presence of the necessary item identifiers (ID and GUID). + * 5. If the user is authorized and the identifiers are valid, it attempts to push the specified Joomla Field Type. + * 6. Depending on the result of the push operation, it sets the appropriate success or error message. + * 7. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful push, false on failure. + */ + public function pushPowers() + { + // Check for request forgeries + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + // get Item posted + $item = $this->input->post->get('jform', array(), 'array'); + + // check if user has the right + $user = Factory::getUser(); + + // set default error message + $message = '

' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_JOOMLA_FIELD_TYPE') . '

'; + $status = 'error'; + $success = false; + + // load the ID + $id = $item['id'] ?? null; + $guid = $item['guid'] ?? null; + + // check if there is any selections + if ($id === null || $guid === null) + { + // set error message + $message = '

' . Text::_('COM_COMPONENTBUILDER_NOT_SAVED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_FIELD_TYPE_BEFORE_YOU_CAN_USE_THIS_FEATURE') . '

'; + } + elseif($user->authorise('fieldtype.push', 'com_componentbuilder')) + { + try { + if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Set')->items([$guid])) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_FIELD_TYPE_HAS_SUCCESSFULLY_BEEN_PUSHED').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_JOOMLA_FIELD_TYPE_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { + $message = '

' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; + } + } + + // set redirect + $redirect_url = Route::_( + 'index.php?option=com_componentbuilder&view=fieldtype' + . $this->getRedirectToItemAppend($id), $success + ); + + $this->setRedirect($redirect_url, $message, $status); + + return $success; + } + /** * Method override to check if you can add a new record. * diff --git a/admin/controllers/fieldtypes.php b/admin/controllers/fieldtypes.php index aa23f161b..1e82c8809 100644 --- a/admin/controllers/fieldtypes.php +++ b/admin/controllers/fieldtypes.php @@ -20,6 +20,8 @@ use Joomla\CMS\Router\Route; use Joomla\CMS\Session\Session; use VDM\Joomla\Utilities\ArrayHelper as UtilitiesArrayHelper; use VDM\Joomla\Utilities\ObjectHelper; +use VDM\Joomla\Componentbuilder\Fieldtype\Factory as FieldtypeFactory; +use VDM\Joomla\Utilities\GetHelper; /** * Fieldtypes Admin Controller @@ -112,4 +114,219 @@ class ComponentbuilderControllerFieldtypes extends AdminController $this->setRedirect(Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false), $message, 'error'); return; } + + + /** + * Initializes all remote Joomla Field Types and syncs them with the local database. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It checks whether the current user has the necessary permissions to initialize the Joomla Field Types. + * 3. If the user is authorized, it attempts to initialize the remote Joomla Field Types. + * 4. Depending on the result of the initialization operation, it sets the appropriate success or error message. + * 5. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful initialization, false on failure. + */ + public function initPowers() + { + // Check for request forgeries + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + // check if user has the right + $user = Factory::getUser(); + + // set default error message + $message = '

' . Text::_('COM_COMPONENTBUILDER_PERMISSION_DENIED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INITIALIZE_JOOMLA_FIELD_TYPES') . '

'; + $status = 'error'; + $success = false; + + if($user->authorise('fieldtype.init', 'com_componentbuilder')) + { + try { + if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->init()) + { + // set success message + $message = '

' . Text::_('COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_JOOMLA_POWERS') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_JOOMLA_FIELD_TYPES_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES') . '

'; + + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_FIELD_TYPES_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { + $message = '

' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; + } + } + + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success); + $this->setRedirect($redirect_url, $message, $status); + + return $success; + } + + /** + * Resets the selected Joomla Field Types. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the IDs of the selected powers from the user input. + * 3. It sanitizes the input by converting the IDs to integers. + * 4. It checks whether any powers have been selected. + * 5. It checks whether the current user has the necessary permissions to reset the selected Joomla Field Types. + * 6. If the user is authorized and powers are selected, it attempts to reset the selected Joomla Field Types. + * 7. Depending on the result of the reset operation, it sets the appropriate success or error message. + * 8. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful reset, false on failure. + */ + public function resetPowers() + { + // Check for request forgeries + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + // get IDS of the selected powers + $pks = $this->input->post->get('cid', [], 'array'); + + // Sanitize the input + ArrayHelper::toInteger($pks); + + // check if there is any selections + if ($pks === []) + { + // set error message + $message = '

'.Text::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'

'; + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false); + $this->setRedirect($redirect_url, $message, 'error'); + return false; + } + + $status = 'error'; + $success = false; + + // check if user has the right + $user = Factory::getUser(); + if($user->authorise('fieldtype.reset', 'com_componentbuilder')) + { + $guids = GetHelper::vars('fieldtype', $pks, 'id', 'guid'); + + try { + if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Get')->reset($guids)) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_FIELD_TYPES_HAVE_SUCCESSFULLY_BEEN_RESET').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_FIELD_TYPES_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { + $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; + } + + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success); + $this->setRedirect($redirect_url, $message, $status); + + return $success; + } + + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false); + $this->setRedirect($redirect_url); + return $success; + } + + /** + * Pushes the selected Joomla Field Types. + * + * This function performs several checks and operations: + * 1. It verifies the authenticity of the request to prevent request forgery. + * 2. It retrieves the IDs of the selected powers from the user input. + * 3. It sanitizes the input by converting the IDs to integers. + * 4. It checks whether any powers have been selected. + * 5. It checks whether the current user has the necessary permissions to push the selected Joomla Field Types. + * 6. If the user is authorized and powers are selected, it attempts to push the selected Joomla Field Types. + * 7. Depending on the result of the push operation, it sets the appropriate success or error message. + * 8. It redirects the user to a specified URL with the result message and status. + * + * @return bool True on successful push, false on failure. + */ + public function pushPowers() + { + // Check for request forgeries + Session::checkToken() or die(Text::_('JINVALID_TOKEN')); + + // get IDS of the selected powers + $pks = $this->input->post->get('cid', [], 'array'); + + // Sanitize the input + ArrayHelper::toInteger($pks); + + // check if there is any selections + if ($pks === []) + { + // set error message + $message = '

'.Text::_('COM_COMPONENTBUILDER_NO_SELECTION_DETECTED').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_PLEASE_FIRST_MAKE_A_SELECTION_FROM_THE_LIST').'

'; + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false); + $this->setRedirect($redirect_url, $message, 'error'); + return false; + } + + $status = 'error'; + $success = false; + + // check if user has the right + $user = Factory::getUser(); + if($user->authorise('fieldtype.push', 'com_componentbuilder')) + { + $guids = GetHelper::vars('fieldtype', $pks, 'id', 'guid'); + + try { + if (FieldtypeFactory::_('Joomla.Fieldtype.Remote.Set')->items($guids)) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THESE_JOOMLA_FIELD_TYPES_HAVE_SUCCESSFULLY_BEEN_PUSHED').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_JOOMLA_FIELD_TYPES_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { + $message = '

' . Text::_('COM_COMPONENTBUILDER_PUSH_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; + } + + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', $success); + $this->setRedirect($redirect_url, $message, $status); + + return $success; + } + + // set redirect + $redirect_url = Route::_('index.php?option=com_componentbuilder&view=fieldtypes', false); + $this->setRedirect($redirect_url); + return $success; + } } \ No newline at end of file diff --git a/admin/controllers/joomla_power.php b/admin/controllers/joomla_power.php index ee5a8f33b..d9bc1c965 100644 --- a/admin/controllers/joomla_power.php +++ b/admin/controllers/joomla_power.php @@ -49,15 +49,16 @@ class ComponentbuilderControllerJoomla_power extends FormController parent::__construct($config); } + /** - * Resets the specified Joomla power. + * Resets the specified Joomla Power. * * This function performs several checks and operations: * 1. It verifies the authenticity of the request to prevent request forgery. * 2. It retrieves the item data posted by the user. - * 3. It checks whether the current user has the necessary permissions to reset the Joomla power. + * 3. It checks whether the current user has the necessary permissions to reset the Joomla Power. * 4. It validates the presence of the necessary item identifiers (ID and GUID). - * 5. If the user is authorized and the identifiers are valid, it attempts to reset the specified power. + * 5. If the user is authorized and the identifiers are valid, it attempts to reset the specified Joomla Power. * 6. Depending on the result of the reset operation, it sets the appropriate success or error message. * 7. It redirects the user to a specified URL with the result message and status. * @@ -93,23 +94,18 @@ class ComponentbuilderControllerJoomla_power extends FormController } elseif($user->authorise('joomla_power.reset', 'com_componentbuilder')) { - try { - if (JoomlaPowerFactory::_('Joomla.Power.Remote.Get')->reset([$guid])) - { - // set success message - $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; - $message .= '

'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_RESET').'

'; - $status = 'success'; - $success = true; - } - else - { - $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; - $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_POWER_HAS_FAILED') . '

'; - } - } catch (\Exception $e) { + if (JoomlaPowerFactory::_('Joomla.Power.Remote.Get')->reset([$guid])) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_RESET').'

'; + $status = 'success'; + $success = true; + } + else + { $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; - $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_POWER_HAS_FAILED') . '

'; } } @@ -125,14 +121,14 @@ class ComponentbuilderControllerJoomla_power extends FormController } /** - * Pushes the specified Joomla power. + * Pushes the specified Joomla Power. * * This function performs several checks and operations: * 1. It verifies the authenticity of the request to prevent request forgery. * 2. It retrieves the item data posted by the user. - * 3. It checks whether the current user has the necessary permissions to push the Joomla power. + * 3. It checks whether the current user has the necessary permissions to push the Joomla Power. * 4. It validates the presence of the necessary item identifiers (ID and GUID). - * 5. If the user is authorized and the identifiers are valid, it attempts to push the specified power. + * 5. If the user is authorized and the identifiers are valid, it attempts to push the specified Joomla Power. * 6. Depending on the result of the push operation, it sets the appropriate success or error message. * 7. It redirects the user to a specified URL with the result message and status. * diff --git a/admin/controllers/joomla_powers.php b/admin/controllers/joomla_powers.php index f75ea6d91..5b2997b39 100644 --- a/admin/controllers/joomla_powers.php +++ b/admin/controllers/joomla_powers.php @@ -50,13 +50,14 @@ class ComponentbuilderControllerJoomla_powers extends AdminController return parent::getModel($name, $prefix, $config); } + /** - * Initializes all remote Joomla powers and syncs them with the local database. + * Initializes all remote Joomla Powers and syncs them with the local database. * * This function performs several checks and operations: * 1. It verifies the authenticity of the request to prevent request forgery. - * 2. It checks whether the current user has the necessary permissions to initialize the Joomla powers. - * 3. If the user is authorized, it attempts to initialize the remote Joomla powers. + * 2. It checks whether the current user has the necessary permissions to initialize the Joomla Powers. + * 3. If the user is authorized, it attempts to initialize the remote Joomla Powers. * 4. Depending on the result of the initialization operation, it sets the appropriate success or error message. * 5. It redirects the user to a specified URL with the result message and status. * @@ -107,15 +108,15 @@ class ComponentbuilderControllerJoomla_powers extends AdminController } /** - * Resets the selected Joomla powers. + * Resets the selected Joomla Powers. * * This function performs several checks and operations: * 1. It verifies the authenticity of the request to prevent request forgery. * 2. It retrieves the IDs of the selected powers from the user input. * 3. It sanitizes the input by converting the IDs to integers. * 4. It checks whether any powers have been selected. - * 5. It checks whether the current user has the necessary permissions to reset the selected Joomla powers. - * 6. If the user is authorized and powers are selected, it attempts to reset the selected Joomla powers. + * 5. It checks whether the current user has the necessary permissions to reset the selected Joomla Powers. + * 6. If the user is authorized and powers are selected, it attempts to reset the selected Joomla Powers. * 7. Depending on the result of the reset operation, it sets the appropriate success or error message. * 8. It redirects the user to a specified URL with the result message and status. * @@ -186,15 +187,15 @@ class ComponentbuilderControllerJoomla_powers extends AdminController } /** - * Pushes the selected Joomla powers. + * Pushes the selected Joomla Powers. * * This function performs several checks and operations: * 1. It verifies the authenticity of the request to prevent request forgery. * 2. It retrieves the IDs of the selected powers from the user input. * 3. It sanitizes the input by converting the IDs to integers. * 4. It checks whether any powers have been selected. - * 5. It checks whether the current user has the necessary permissions to push the selected Joomla powers. - * 6. If the user is authorized and powers are selected, it attempts to push the selected Joomla powers. + * 5. It checks whether the current user has the necessary permissions to push the selected Joomla Powers. + * 6. If the user is authorized and powers are selected, it attempts to push the selected Joomla Powers. * 7. Depending on the result of the push operation, it sets the appropriate success or error message. * 8. It redirects the user to a specified URL with the result message and status. * diff --git a/admin/controllers/power.php b/admin/controllers/power.php index 79a5d5a22..65cb60120 100644 --- a/admin/controllers/power.php +++ b/admin/controllers/power.php @@ -49,6 +49,7 @@ class ComponentbuilderControllerPower extends FormController parent::__construct($config); } + /** * Resets the specified power. * diff --git a/admin/controllers/powers.php b/admin/controllers/powers.php index 353829c08..f6b4081d1 100644 --- a/admin/controllers/powers.php +++ b/admin/controllers/powers.php @@ -50,13 +50,14 @@ class ComponentbuilderControllerPowers extends AdminController return parent::getModel($name, $prefix, $config); } + /** - * Initializes all remote powers and syncs them with the local database. + * Initializes all remote Powers and syncs them with the local database. * * This function performs several checks and operations: * 1. It verifies the authenticity of the request to prevent request forgery. - * 2. It checks whether the current user has the necessary permissions to initialize the powers. - * 3. If the user is authorized, it attempts to initialize the remote powers. + * 2. It checks whether the current user has the necessary permissions to initialize the Powers. + * 3. If the user is authorized, it attempts to initialize the remote Powers. * 4. Depending on the result of the initialization operation, it sets the appropriate success or error message. * 5. It redirects the user to a specified URL with the result message and status. * @@ -78,19 +79,24 @@ class ComponentbuilderControllerPowers extends AdminController if($user->authorise('power.init', 'com_componentbuilder')) { - if (PowerFactory::_('Power.Remote.Get')->init()) - { - // set success message - $message = '

' . Text::_('COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_POWERS') . '

'; - $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_POWERS_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES') . '

'; + try { + if (PowerFactory::_('Power.Remote.Get')->init()) + { + // set success message + $message = '

' . Text::_('COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_JOOMLA_POWERS') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_POWERS_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES') . '

'; - $status = 'success'; - $success = true; - } - else - { + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_POWERS_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { $message = '

' . Text::_('COM_COMPONENTBUILDER_INITIALIZATION_FAILED') . '

'; - $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_POWERS_HAS_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; } } @@ -102,15 +108,15 @@ class ComponentbuilderControllerPowers extends AdminController } /** - * Resets the selected powers. + * Resets the selected Powers. * * This function performs several checks and operations: * 1. It verifies the authenticity of the request to prevent request forgery. * 2. It retrieves the IDs of the selected powers from the user input. * 3. It sanitizes the input by converting the IDs to integers. * 4. It checks whether any powers have been selected. - * 5. It checks whether the current user has the necessary permissions to reset the selected powers. - * 6. If the user is authorized and powers are selected, it attempts to reset the selected powers. + * 5. It checks whether the current user has the necessary permissions to reset the selected Powers. + * 6. If the user is authorized and powers are selected, it attempts to reset the selected Powers. * 7. Depending on the result of the reset operation, it sets the appropriate success or error message. * 8. It redirects the user to a specified URL with the result message and status. * @@ -148,18 +154,23 @@ class ComponentbuilderControllerPowers extends AdminController { $guids = GetHelper::vars('power', $pks, 'id', 'guid'); - if (PowerFactory::_('Power.Remote.Get')->reset($guids)) - { - // set success message - $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; - $message .= '

'.Text::_('COM_COMPONENTBUILDER_THESE_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET').'

'; - $status = 'success'; - $success = true; - } - else - { + try { + if (PowerFactory::_('Power.Remote.Get')->reset($guids)) + { + // set success message + $message = '

'.Text::_('COM_COMPONENTBUILDER_SUCCESS').'

'; + $message .= '

'.Text::_('COM_COMPONENTBUILDER_THESE_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET').'

'; + $status = 'success'; + $success = true; + } + else + { + $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; + $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THESE_POWERS_HAS_FAILED') . '

'; + } + } catch (\Exception $e) { $message = '

' . Text::_('COM_COMPONENTBUILDER_RESET_FAILED') . '

'; - $message .= '

' . Text::_('COM_COMPONENTBUILDER_THE_RESET_OF_THESE_POWERS_HAS_FAILED') . '

'; + $message .= '

' . \htmlspecialchars($e->getMessage()) . '

'; } // set redirect @@ -176,15 +187,15 @@ class ComponentbuilderControllerPowers extends AdminController } /** - * Pushes the selected powers. + * Pushes the selected Powers. * * This function performs several checks and operations: * 1. It verifies the authenticity of the request to prevent request forgery. * 2. It retrieves the IDs of the selected powers from the user input. * 3. It sanitizes the input by converting the IDs to integers. * 4. It checks whether any powers have been selected. - * 5. It checks whether the current user has the necessary permissions to push the selected powers. - * 6. If the user is authorized and powers are selected, it attempts to push the selected powers. + * 5. It checks whether the current user has the necessary permissions to push the selected Powers. + * 6. If the user is authorized and powers are selected, it attempts to push the selected Powers. * 7. Depending on the result of the push operation, it sets the appropriate success or error message. * 8. It redirects the user to a specified URL with the result message and status. * diff --git a/admin/helpers/componentbuilder.php b/admin/helpers/componentbuilder.php index 4746e618a..5433c8124 100644 --- a/admin/helpers/componentbuilder.php +++ b/admin/helpers/componentbuilder.php @@ -3513,12 +3513,12 @@ abstract class ComponentbuilderHelper 'editor', 'editors', 'email', 'file', 'file', 'filelist', 'folderlist', 'groupedlist', 'headertag', 'helpsite', 'hidden', 'imagelist', 'integer', 'language', 'list', 'media', 'menu', 'modal_menu', 'menuitem', 'meter', 'modulelayout', 'moduleorder', 'moduleposition', 'moduletag', 'note', 'number', 'password', 'plugins', 'predefinedlist', 'radio', 'range', 'repeatable', 'rules', - 'sessionhandler', 'spacer', 'sql', 'subform', 'tag', 'tel', 'templatestyle', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup' + 'sessionhandler', 'spacer', 'sql', 'subform', 'tag', 'tel', 'templatestyle', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup', 'usergrouplist' ), 'plain' => array( 'cachehandler', 'calendar', 'checkbox', 'chromestyle', 'color', 'componentlayout', 'contenttype', 'editor', 'editors', 'captcha', 'email', 'file', 'headertag', 'helpsite', 'hidden', 'integer', 'language', 'media', 'menu', 'modal_menu', 'menuitem', 'meter', 'modulelayout', 'templatestyle', - 'moduleorder', 'moduletag', 'number', 'password', 'range', 'rules', 'tag', 'tel', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup' + 'moduleorder', 'moduletag', 'number', 'password', 'range', 'rules', 'tag', 'tel', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup', 'usergrouplist' ), 'option' => array( 'accesslevel', 'category', 'checkboxes', 'combo', 'contentlanguage', 'databaseconnection', 'components', diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.ini b/admin/language/en-GB/en-GB.com_componentbuilder.ini index 91d19e305..4ca182aa1 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.ini @@ -4227,6 +4227,7 @@ COM_COMPONENTBUILDER_DTEMAILDTDDSDD="
Email
%s
" COM_COMPONENTBUILDER_DTLICENSEDTDDSDD="
License
%s
" COM_COMPONENTBUILDER_DTOWNERDTDDSDD="
Owner
%s
" COM_COMPONENTBUILDER_DTWEBSITEDTDDSDD="
Website
%s
" +COM_COMPONENTBUILDER_DURING_THE_INITIAL_COMPILATION_OF_ANY_COMPONENT_THE_PROCESS_MAY_TAKE_ADDITIONAL_TIME_AS_WE_RETRIEVE_AND_CONFIGURE_THE_ASSOCIATED_SUPERPOWERS_="During the initial compilation of any component, the process may take additional time as we retrieve and configure the associated super-powers.." COM_COMPONENTBUILDER_DYNAMIC_BUTTON_ERROR="Dynamic Button Error" COM_COMPONENTBUILDER_DYNAMIC_GET="Dynamic Get" COM_COMPONENTBUILDER_DYNAMIC_GETS="Dynamic Gets" @@ -4729,6 +4730,8 @@ COM_COMPONENTBUILDER_FIELDTYPE_HAS_DEFAULTS_DESCRIPTION="set the database defaul COM_COMPONENTBUILDER_FIELDTYPE_HAS_DEFAULTS_LABEL="Set Database Defaults" COM_COMPONENTBUILDER_FIELDTYPE_ID="Id" COM_COMPONENTBUILDER_FIELDTYPE_INDEXES_LABEL="Indexes Type" +COM_COMPONENTBUILDER_FIELDTYPE_INIT_BUTTON_ACCESS="Fieldtype Init Button Access" +COM_COMPONENTBUILDER_FIELDTYPE_INIT_BUTTON_ACCESS_DESC="Allows the users in this group to access the init button." COM_COMPONENTBUILDER_FIELDTYPE_INT="INT" COM_COMPONENTBUILDER_FIELDTYPE_JSON="JSON" COM_COMPONENTBUILDER_FIELDTYPE_KEY="KEY" @@ -4770,6 +4773,10 @@ COM_COMPONENTBUILDER_FIELDTYPE_PERMISSION="Permissions" COM_COMPONENTBUILDER_FIELDTYPE_PROPERTIES_DESCRIPTION="Options for this field" COM_COMPONENTBUILDER_FIELDTYPE_PROPERTIES_LABEL="Properties" COM_COMPONENTBUILDER_FIELDTYPE_PUBLISHING="Publishing" +COM_COMPONENTBUILDER_FIELDTYPE_PUSH_BUTTON_ACCESS="Fieldtype Push Button Access" +COM_COMPONENTBUILDER_FIELDTYPE_PUSH_BUTTON_ACCESS_DESC="Allows the users in this group to access the push button." +COM_COMPONENTBUILDER_FIELDTYPE_RESET_BUTTON_ACCESS="Fieldtype Reset Button Access" +COM_COMPONENTBUILDER_FIELDTYPE_RESET_BUTTON_ACCESS_DESC="Allows the users in this group to access the reset button." COM_COMPONENTBUILDER_FIELDTYPE_SAVE_WARNING="Alias already existed so a number was added at the end. You can re-edit the Fieldtype to customise the alias." COM_COMPONENTBUILDER_FIELDTYPE_SELECT_AN_OPTION="Select an option" COM_COMPONENTBUILDER_FIELDTYPE_SEVEN="7" @@ -7621,6 +7628,7 @@ COM_COMPONENTBUILDER_PATH_TO_THE_ZIPPED_PACKAGE_IS_CODESCODE_BR_S_S="Path to the COM_COMPONENTBUILDER_PERMISSIONS="Permissions" COM_COMPONENTBUILDER_PERMISSION_DENIED="Permission Denied!" COM_COMPONENTBUILDER_PFILE_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP="

File at %s/%s gave the following error!
%s

" +COM_COMPONENTBUILDER_PJOOMLA_FIELD_TYPEB_REPOSITORY_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP="

Joomla Field Type repository at %s/%s gave the following error!
%s

" COM_COMPONENTBUILDER_PJOOMLA_POWERB_REPOSITORY_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP="

Joomla Power repository at %s/%s gave the following error!
%s

" COM_COMPONENTBUILDER_PJOOMLA_POWER_BGUIDSB_NOT_FOUNDP="

Joomla Power guid:%s not found!

" COM_COMPONENTBUILDER_PJOOMLA_POWER_BGUIDSB_WAS_FOUND_BUT_MISSING_A_NAMESPACE_VALUE_FOR_JOOMLA_SP="

Joomla Power guid:%s was found, but missing a namespace value for Joomla %s!

" @@ -7991,6 +7999,7 @@ COM_COMPONENTBUILDER_REPOSITORY_GUID_DESCRIPTION="Globally Unique Identifier" COM_COMPONENTBUILDER_REPOSITORY_GUID_HINT="Auto Generated" COM_COMPONENTBUILDER_REPOSITORY_GUID_LABEL="GUID" COM_COMPONENTBUILDER_REPOSITORY_ID="Id" +COM_COMPONENTBUILDER_REPOSITORY_JOOMLA_FIELD_TYPE="Joomla Field Type" COM_COMPONENTBUILDER_REPOSITORY_JOOMLA_POWER="Joomla Power" COM_COMPONENTBUILDER_REPOSITORY_MODIFIED_BY_DESC="The last user that modified this Repository." COM_COMPONENTBUILDER_REPOSITORY_MODIFIED_BY_LABEL="Modified By" @@ -8899,7 +8908,6 @@ COM_COMPONENTBUILDER_SUBMENU_TEMPLATES="Templates" COM_COMPONENTBUILDER_SUBMENU_VALIDATION_RULES="Validation Rules" COM_COMPONENTBUILDER_SUCCESS="Success" COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_JOOMLA_POWERS="Successfully Initialized all Remote Joomla Powers" -COM_COMPONENTBUILDER_SUCCESSFULLY_INITIALIZED_ALL_REMOTE_POWERS="Successfully Initialized all Remote Powers" COM_COMPONENTBUILDER_SUCCESS_THE_SNIPPET_WAS_SAVED="Success! The snippet was saved." COM_COMPONENTBUILDER_SUCCESS_THE_SNIPPET_WAS_SAVED_BUT_THE_MODIFIED_DATE_COULD_NOT_BE_ADJUSTED_BR_BR_BTHIS_MEANS_THE_SNIPPETS_WILL_CONTINUE_TO_APPEAR_OUT_OF_DATEB="Success! The snippet was saved. But the modified date could not be adjusted.

This means the snippets will continue to appear out of date." COM_COMPONENTBUILDER_SUPER_POWER="Super Power" @@ -9046,12 +9054,14 @@ COM_COMPONENTBUILDER_THERE_WAS_AN_ERROR_GETTING_THE_PACKAGE_INFO="There was an e COM_COMPONENTBUILDER_THERE_WAS_A_PROBLEM_BNO_VIEW_OR_ID_FOUND_IN_SESSION_OR_VIEW_NOT_ALLOWED_TO_ACCESS_AREAB_WE_COULD_NOT_LOAD_ANY_LINKED_TO_VALUES_PLEASE_INFORM_YOUR_SYSTEM_ADMINISTRATOR="There was a problem, no view or id found in session or view not allowed to access area, we could not load any linked to values. Please inform your system administrator!" COM_COMPONENTBUILDER_THESE_ARE_THE_SAME_PACKAGES_FOUND_ON_A_S_GITHUBA_AND_CAN_BE_IMPORTED_BY_SIMPLY_MAKING_A_SELECTION_AND_THEN_CLICKING_THE_BGET_PACKAGEB_BUTTONBR_SOME_OF_THESE_PACKAGES_WOULD_REQUIRE_A_KEY_SINCE_THEY_ARE_NOT_FREE="These are the same packages found on gitHub and can be imported by simply making a selection and then clicking the [Get Package] button.
Some of these packages would require a key, since they are not free." COM_COMPONENTBUILDER_THESE_ARE_THE_SAME_PACKAGES_FOUND_ON_A_S_GITHUBA_AND_CAN_BE_IMPORTED_BY_SIMPLY_MAKING_A_SELECTION_AND_THEN_CLICKING_THE_BGET_PACKAGEB_BUTTONBR_SOME_OF_THESE_PACKAGES_WOULD_REQUIRE_A_KEY_SINCE_THEY_ARE_NOT_FREE_A_S_GET_A_KEY_TODAYA="These are the same packages found on gitHub and can be imported by simply making a selection and then clicking the [Get Package] button.
Some of these packages would require a key, since they are not free. Get a key today!." -COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_PUSHED="These Joomla powers have successfully been pushed." -COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET="These Joomla powers have successfully been reset." +COM_COMPONENTBUILDER_THESE_JOOMLA_FIELD_TYPES_HAVE_SUCCESSFULLY_BEEN_PUSHED="These Joomla Field Types have successfully been pushed." +COM_COMPONENTBUILDER_THESE_JOOMLA_FIELD_TYPES_HAVE_SUCCESSFULLY_BEEN_RESET="These Joomla Field Types have successfully been reset." +COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_PUSHED="These Joomla Powers have successfully been pushed." +COM_COMPONENTBUILDER_THESE_JOOMLA_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET="These Joomla Powers have successfully been reset." COM_COMPONENTBUILDER_THESE_OPTIONS_ARE_NOT_AVAILABLE_TO_THE_FIELD_IF_BNONE_DBB_OPTION_IS_SELECTED="These options are not available to the field if None DB option is selected." COM_COMPONENTBUILDER_THESE_OPTIONS_ARE_ONLY_AVAILABLE_TO_THE_FIELD_IF_BSHOW_IN_LIST_VIEWB_OPTION_IS_SELECTED="These options are only available to the field if Show in list view option is selected." -COM_COMPONENTBUILDER_THESE_POWERS_HAVE_SUCCESSFULLY_BEEN_PUSHED="These powers have successfully been pushed." -COM_COMPONENTBUILDER_THESE_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET="These powers have successfully been reset." +COM_COMPONENTBUILDER_THESE_POWERS_HAVE_SUCCESSFULLY_BEEN_PUSHED="These Powers have successfully been pushed." +COM_COMPONENTBUILDER_THESE_POWERS_HAVE_SUCCESSFULLY_BEEN_RESET="These Powers have successfully been reset." COM_COMPONENTBUILDER_THE_ADMIN_CUSTOM_TABS="The admin custom tabs" COM_COMPONENTBUILDER_THE_ADMIN_FIELDS="The admin fields" COM_COMPONENTBUILDER_THE_ADMIN_FIELDS_CONDITIONS="The admin fields conditions" @@ -9096,15 +9106,19 @@ COM_COMPONENTBUILDER_THE_FILE_PATH_BSB_DOES_NOT_EXIST_AND_WAS_NOT_ADDED="The fil COM_COMPONENTBUILDER_THE_FOLDER_PATH_BSB_DOES_NOT_EXIST_AND_WAS_NOT_ADDED="The folder path: %s does not exist, and was not added!" COM_COMPONENTBUILDER_THE_FTP_CONNECTION_FOR_BSB_COULD_NOT_BE_MADE_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP connection for %s could not be made. Please check your signature details!" COM_COMPONENTBUILDER_THE_FTP_SIGNATURE_FOR_BSB_WAS_NOT_WELL_FORMED_PLEASE_CHECK_YOUR_SIGNATURE_DETAILS="The FTP signature for %s was not well formed, please check your signature details!" -COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_POWERS_HAS_FAILED="The initialization of this Joomla powers has failed." -COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_POWERS_HAS_FAILED="The initialization of this powers has failed." -COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_PUSHED="The Joomla power has successfully been pushed." -COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_RESET="The Joomla power has successfully been reset." +COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_FIELD_TYPES_HAS_FAILED="The initialization of this Joomla Field Types has failed." +COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_JOOMLA_POWERS_HAS_FAILED="The initialization of this Joomla Powers has failed." +COM_COMPONENTBUILDER_THE_INITIALIZATION_OF_THIS_POWERS_HAS_FAILED="The initialization of this Powers has failed." +COM_COMPONENTBUILDER_THE_JOOMLA_FIELD_TYPE_HAS_SUCCESSFULLY_BEEN_PUSHED="The Joomla Field Type has successfully been pushed." +COM_COMPONENTBUILDER_THE_JOOMLA_FIELD_TYPE_HAS_SUCCESSFULLY_BEEN_RESET="The Joomla Field Type has successfully been reset." +COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_PUSHED="The Joomla Power has successfully been pushed." +COM_COMPONENTBUILDER_THE_JOOMLA_POWER_HAS_SUCCESSFULLY_BEEN_RESET="The Joomla Power has successfully been reset." COM_COMPONENTBUILDER_THE_KEY_OF_THIS_PACKAGE="The key of this package." COM_COMPONENTBUILDER_THE_LIBRARY_CONFIG_FIELDS="The library config fields" COM_COMPONENTBUILDER_THE_LIBRARY_FILES_FOLDERS_URLS="The library files, folders & URLs" -COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_JOOMLA_POWERS_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES="The local database Joomla powers has successfully been synced with the remote repositories." -COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_POWERS_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES="The local database powers has successfully been synced with the remote repositories." +COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_JOOMLA_FIELD_TYPES_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES="The local database Joomla Field Types has successfully been synced with the remote repositories." +COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_JOOMLA_POWERS_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES="The local database Joomla Powers has successfully been synced with the remote repositories." +COM_COMPONENTBUILDER_THE_LOCAL_DATABASE_POWERS_HAS_SUCCESSFULLY_BEEN_SYNCED_WITH_THE_REMOTE_REPOSITORIES="The local database Powers has successfully been synced with the remote repositories." COM_COMPONENTBUILDER_THE_LOGIN_TO_BSB_HAS_FAILED_PLEASE_CHECK_THAT_YOUR_DETAILS_ARE_CORRECT="The login to %s has failed, please check that your details are correct!" COM_COMPONENTBUILDER_THE_MODULE_FILES_FOLDERS="The module files & folders" COM_COMPONENTBUILDER_THE_MODULE_UPDATES="The module updates" @@ -9120,15 +9134,19 @@ COM_COMPONENTBUILDER_THE_POWER_HAS_SUCCESSFULLY_BEEN_RESET="The power has succes COM_COMPONENTBUILDER_THE_PRIVATE_KEY_FIELD_COULD_NOT_BE_LOADED_FOR_BSB_SERVER="The private key field could not be loaded for %s server!" COM_COMPONENTBUILDER_THE_PRIVATE_KEY_FILE_COULD_NOT_BE_LOADEDFOUND_FOR_BSB_SERVER="The private key file could not be loaded/found for %s server!" COM_COMPONENTBUILDER_THE_PRO_BOARD_IS_LOADING="The pro board is loading" -COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_JOOMLA_POWERS_HAS_FAILED="The push of these Joomla powers has failed." -COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_POWERS_HAS_FAILED="The push of these powers has failed." -COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_JOOMLA_POWER_HAS_FAILED="The push of this Joomla power has failed." +COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_JOOMLA_FIELD_TYPES_HAS_FAILED="The push of these Joomla Field Types has failed." +COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_JOOMLA_POWERS_HAS_FAILED="The push of these Joomla Powers has failed." +COM_COMPONENTBUILDER_THE_PUSH_OF_THESE_POWERS_HAS_FAILED="The push of these Powers has failed." +COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_JOOMLA_FIELD_TYPE_HAS_FAILED="The push of this Joomla Field Type has failed." +COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_JOOMLA_POWER_HAS_FAILED="The push of this Joomla Power has failed." COM_COMPONENTBUILDER_THE_PUSH_OF_THIS_POWER_HAS_FAILED="The push of this power has failed." COM_COMPONENTBUILDER_THE_README_IS_LOADING="The readme is loading" COM_COMPONENTBUILDER_THE_REPLACE_PROCESS_HAD_AN_ERROR_WITH_TABLE="The replace process had an error with table" -COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_POWERS_HAS_FAILED="The reset of these Joomla powers has failed." -COM_COMPONENTBUILDER_THE_RESET_OF_THESE_POWERS_HAS_FAILED="The reset of these powers has failed." -COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_POWER_HAS_FAILED="The reset of this Joomla power has failed." +COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_FIELD_TYPES_HAS_FAILED="The reset of these Joomla Field Types has failed." +COM_COMPONENTBUILDER_THE_RESET_OF_THESE_JOOMLA_POWERS_HAS_FAILED="The reset of these Joomla Powers has failed." +COM_COMPONENTBUILDER_THE_RESET_OF_THESE_POWERS_HAS_FAILED="The reset of these Powers has failed." +COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_FIELD_TYPE_HAS_FAILED="The reset of this Joomla Field Type has failed." +COM_COMPONENTBUILDER_THE_RESET_OF_THIS_JOOMLA_POWER_HAS_FAILED="The reset of this Joomla Power has failed." COM_COMPONENTBUILDER_THE_RESET_OF_THIS_POWER_HAS_FAILED="The reset of this power has failed." COM_COMPONENTBUILDER_THE_SEARCH_FOR_THE_SNIPPETS_ARE_CASE_SENSITIVE_SO_IF_YOU_CHANGED_THE_LOCAL_BNAMESB_OF_EITHER_OR_THE_BSNIPPET_LIBRARY_OR_SNIPPET_TYPESB_IN_ANY_SMALL_WAY_THE_SYSTEM_WILL_NOT_BE_ABLE_TO_CONNECT_YOUR_LOCAL_SNIPPETS_WITH_THOSE_IN_THE_COMMUNITY_REPOSITORY_SO_WE_STRONGLY_ADVICE_TO_BKEEP_TO_THE_COMMUNITY_NAMINGB_TO_AVOID_MISMATCHING_THAT_WILL_IN_TURN_CAUSE_DUPLICATION_SO_IF_YOU_CHANGED_ANY_NAMES_JUST_CHANGE_THEM_BACK_AND_ALL_WILL_AGAIN_WORK_AS_EXPECTED="The search for the snippets are case sensitive so if you changed the local names of either or the snippet, library or snippet types in any small way, the system will not be able to connect your local snippets with those in the community repository. So we strongly advice to keep to the community naming to avoid mismatching, that will in turn cause duplication. So if you changed any names, just change them back and all will again work as expected." COM_COMPONENTBUILDER_THE_SEARCH_PROCESS_HAD_AN_ERROR_WITH_TABLE="The search process had an error with table" @@ -9376,15 +9394,18 @@ COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_ACCESS_THE_SERVER_DETAILS_BS_ COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_CLONE_A_COMPONENT_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_HELP="You do not have permission to clone a component, please contact your system administrator for more help." COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_DOWNLOAD_THE_COMPILER_ANIMATIONS="You do not have permission to download the compiler animations!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_IMPORT_A_COMPONENT_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_HELP="You do not have permission to import a component, please contact your system administrator for more help." -COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INITIALIZE_JOOMLA_POWERS="You do not have permission to initialize Joomla powers" -COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INITIALIZE_POWERS="You do not have permission to initialize powers" +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INITIALIZE_JOOMLA_FIELD_TYPES="You do not have permission to initialize Joomla Field Types" +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INITIALIZE_JOOMLA_POWERS="You do not have permission to initialize Joomla Powers" +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INITIALIZE_POWERS="You do not have permission to initialize Powers" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THESE_EXTENSIONS="You do not have permission to install these extensions!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THE_COMPONENT="You do not have permission to install the component!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THE_MODULE="You do not have permission to install the module!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_INSTALL_THE_PLUGIN="You do not have permission to install the plugin!" -COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_JOOMLA_POWER="You do not have permission to push this Joomla power" +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_JOOMLA_FIELD_TYPE="You do not have permission to push this Joomla Field Type" +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_JOOMLA_POWER="You do not have permission to push this Joomla Power" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_PUSH_THIS_POWER="You do not have permission to push this power" -COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_JOOMLA_POWER="You do not have permission to reset this Joomla power" +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_JOOMLA_FIELD_TYPE="You do not have permission to reset this Joomla Field Type" +COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_JOOMLA_POWER="You do not have permission to reset this Joomla Power" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RESET_THIS_POWER="You do not have permission to reset this power" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_GET_BOILERPLATE_MODULE="You do not have permission to run the get boilerplate module!" COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_RUN_THE_TRANSLATOR_MODULE="You do not have permission to run the translator module!" @@ -9396,7 +9417,8 @@ COM_COMPONENTBUILDER_YOU_MUST_ADD_AN_UNIQUE_PLACEHOLDER="You must add an unique COM_COMPONENTBUILDER_YOU_MUST_ADD_AN_UNIQUE_VALIDATION_RULE_NAME="You must add an unique validation rule name." COM_COMPONENTBUILDER_YOU_MUST_ENABLE_THE_BTIDYB_EXTENSION_IN_YOUR_PHPINI_FILE_SO_WE_CAN_TIDY_UP_YOUR_XML_IF_YOU_NEED_HELP_PLEASE_A_SSTART_HEREA="You must enable the Tidy extension in your php.ini file so we can tidy up your xml! If you need help please start here!" COM_COMPONENTBUILDER_YOU_MUST_FIRST_LINK_AN_ADMIN_OR_A_CUSTOM_ADMIN_VIEW_TO_THIS_COMPONENT_THEN_YOU_CAN_SELECT_IT_HERE="You must first link an admin or a custom admin view to this component, then you can select it here" -COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_POWER_BEFORE_YOU_CAN_USE_THIS_FEATURE="You must first save the Joomla power, before you can use this feature." +COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_FIELD_TYPE_BEFORE_YOU_CAN_USE_THIS_FEATURE="You must first save the Joomla Field Type, before you can use this feature." +COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_JOOMLA_POWER_BEFORE_YOU_CAN_USE_THIS_FEATURE="You must first save the Joomla Power, before you can use this feature." COM_COMPONENTBUILDER_YOU_MUST_FIRST_SAVE_THE_POWER_BEFORE_YOU_CAN_USE_THIS_FEATURE="You must first save the power, before you can use this feature." COM_COMPONENTBUILDER_YOU_MUST_SELECT_A_COMPONENT="You must select a component!" COM_COMPONENTBUILDER_YOU_SHOULD_ADD_THE_CORRECT_OWNER_DETAILS="You should add the correct owner details." diff --git a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini index 5a941ffed..7797eaf23 100644 --- a/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini +++ b/admin/language/en-GB/en-GB.com_componentbuilder.sys.ini @@ -588,6 +588,12 @@ COM_COMPONENTBUILDER_FIELDTYPES_IMPORT="Fieldtypes Import" COM_COMPONENTBUILDER_FIELDTYPES_IMPORT_DESC="Allows the users in this group to import import fieldtypes" COM_COMPONENTBUILDER_FIELDTYPES_SUBMENU="Fieldtypes Submenu" COM_COMPONENTBUILDER_FIELDTYPES_SUBMENU_DESC="Allows the users in this group to submenu of fieldtype" +COM_COMPONENTBUILDER_FIELDTYPE_INIT_BUTTON_ACCESS="Fieldtype Init Button Access" +COM_COMPONENTBUILDER_FIELDTYPE_INIT_BUTTON_ACCESS_DESC="Allows the users in this group to access the init button." +COM_COMPONENTBUILDER_FIELDTYPE_PUSH_BUTTON_ACCESS="Fieldtype Push Button Access" +COM_COMPONENTBUILDER_FIELDTYPE_PUSH_BUTTON_ACCESS_DESC="Allows the users in this group to access the push button." +COM_COMPONENTBUILDER_FIELDTYPE_RESET_BUTTON_ACCESS="Fieldtype Reset Button Access" +COM_COMPONENTBUILDER_FIELDTYPE_RESET_BUTTON_ACCESS_DESC="Allows the users in this group to access the reset button." COM_COMPONENTBUILDER_GET_SNIPPETS_ACCESS="Get Snippets Access" COM_COMPONENTBUILDER_GET_SNIPPETS_ACCESS_DESC="Allows the users in this group to access get snippets." COM_COMPONENTBUILDER_GET_SNIPPETS_CUSTOM_ADMIN_VIEWS_BUTTON_ACCESS="Get Snippets Custom Admin Views Button Access" diff --git a/admin/models/forms/filter_help_documents.xml b/admin/models/forms/filter_help_documents.xml index d025faa01..cd8a0aa83 100644 --- a/admin/models/forms/filter_help_documents.xml +++ b/admin/models/forms/filter_help_documents.xml @@ -73,10 +73,10 @@ - - - - + + + + diff --git a/admin/models/forms/help_document.xml b/admin/models/forms/help_document.xml index 642a4f991..bbd063520 100644 --- a/admin/models/forms/help_document.xml +++ b/admin/models/forms/help_document.xml @@ -115,7 +115,7 @@ - + + groups = JsonHelper::string($item->groups, ', ', 'groups'); + // decode groups + $groupsArray = json_decode($item->groups, true); + if (UtilitiesArrayHelper::check($groupsArray)) + { + $groupsNames = []; + foreach ($groupsArray as $groups) + { + $groupsNames[] = ComponentbuilderHelper::getGroupName($groups); + } + $item->groups = implode(', ', $groupsNames); + } } } @@ -266,7 +274,7 @@ class ComponentbuilderModelHelp_documents extends ListModel else { $search = $db->quote('%' . $db->escape($search) . '%'); - $query->where('(a.title LIKE '.$search.' OR a.type LIKE '.$search.' OR a.location LIKE '.$search.' OR a.admin_view LIKE '.$search.' OR h. LIKE '.$search.' OR a.site_view LIKE '.$search.' OR i. LIKE '.$search.')'); + $query->where('(a.title LIKE '.$search.' OR a.type LIKE '.$search.' OR a.location LIKE '.$search.' OR a.admin_view LIKE '.$search.' OR g. LIKE '.$search.' OR a.site_view LIKE '.$search.' OR h. LIKE '.$search.')'); } } diff --git a/admin/models/repositories.php b/admin/models/repositories.php index dc404fb61..5563cb963 100644 --- a/admin/models/repositories.php +++ b/admin/models/repositories.php @@ -199,7 +199,8 @@ class ComponentbuilderModelRepositories extends ListModel $targetArray = array( 0 => 'COM_COMPONENTBUILDER_REPOSITORY_SELECT_AN_OPTION', 1 => 'COM_COMPONENTBUILDER_REPOSITORY_SUPER_POWER', - 2 => 'COM_COMPONENTBUILDER_REPOSITORY_JOOMLA_POWER' + 2 => 'COM_COMPONENTBUILDER_REPOSITORY_JOOMLA_POWER', + 3 => 'COM_COMPONENTBUILDER_REPOSITORY_JOOMLA_FIELD_TYPE' ); // Now check if value is found in this array if (isset($targetArray[$value]) && StringHelper::check($targetArray[$value])) diff --git a/admin/sql/install.mysql.utf8.sql b/admin/sql/install.mysql.utf8.sql index be19911fb..42278b70c 100644 --- a/admin/sql/install.mysql.utf8.sql +++ b/admin/sql/install.mysql.utf8.sql @@ -2378,10 +2378,10 @@ INSERT INTO `#__componentbuilder_fieldtype` (`id`, `description`, `name`, `prope (36, 'Provides an input field for an email address.', 'Email', '{\"properties0\":{\"name\":\"type\",\"example\":\"email\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be email.\"},\"properties1\":{\"name\":\"name\",\"example\":\"email\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Email Address\",\"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 some description\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties7\":{\"name\":\"class\",\"example\":\"inputbox\",\"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\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field cannot be changed and will automatically inherit the default value\"},\"properties9\":{\"name\":\"disabled\",\"example\":\"false\",\"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\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties11\":{\"name\":\"filter\",\"example\":\"STRING\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties12\":{\"name\":\"validate\",\"example\":\"email\",\"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.\"},\"properties13\":{\"name\":\"unique\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) Used in validation, to check if we should test for uniqueness, to insure that this email does not already belong to another user. Check line 99 in \\/libraries\\/src\\/Form\\/Rule\\/EmailRule.php\"},\"properties14\":{\"name\":\"field\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) used in validation of \\\"equals\\\" to link the field to match.\"},\"properties15\":{\"name\":\"message\",\"example\":\"Error! Please add some text here.\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) The error message that will be displayed instead of the default message.\"},\"properties16\":{\"name\":\"hint\",\"example\":\"your@email.com\",\"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)\"}}', 'Email form field type', '', 1, 7, '', 7, '35948af5-9e79-4454-8dfa-682ee4fdf650'), (37, 'Provides a dropdown list of plugin options from the folder.', 'Plugins', '{\"properties0\":{\"name\":\"type\",\"example\":\"plugins\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be editors.\"},\"properties1\":{\"name\":\"name\",\"example\":\"editor\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an editor\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) (not translatable) is the default value.\"},\"properties4\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the label.\"},\"properties5\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties6\":{\"name\":\"folder\",\"example\":\"editors\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) editors or captcha.\"},\"properties7\":{\"name\":\"filter\",\"example\":\"cmd\",\"adjustable\":\"1\",\"description\":\"(optional) allow the system to save certain html tags or raw data.\"},\"properties8\":{\"name\":\"showon\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) show this field on the bases of the value in another field. https:\\/\\/joomla.stackexchange.com\\/a\\/17682\\/2166\"}}', 'Provides a dropdown list of plugin options from the folder.', '', 1, 8, '', 8, '37fa4e1d-b7ca-4a8f-aa4b-d8085c135233'), (38, 'Provides the use of a captcha plugin.', 'Captcha', '{\"properties0\":{\"name\":\"type\",\"example\":\"captcha\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be captcha.\"},\"properties3\":{\"name\":\"name\",\"example\":\"captcha\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"validate\",\"example\":\"captcha\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be captcha.\"},\"properties1\":{\"name\":\"label\",\"example\":\"Captcha\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties4\":{\"name\":\"description\",\"example\":\"We do not like spam, please show us you are human\",\"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\":\"namespace\",\"example\":\"componentbuilder\",\"description\":\"(optional) the component name seems to work\"}}', 'Captcha robot check.', '', 1, 2, '', 9, '206fdad4-14d0-45f1-9c84-3d09abf48a39'), -(39, 'The list form field type provides a drop down list or a list box of custom-defined entries. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Groupedlist', '{\"properties0\":{\"name\":\"type\",\"example\":\"groupedlist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be groupedlist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mygrouplist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an option\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"list_class\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties6\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties7\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) filter options\"},\"properties8\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties9\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field. This value will determine which method is used to validate the value for a field.\"},\"properties10\":{\"name\":\"option\",\"example\":\"Group Name@@1,1|Option 1|1,2|Option 2|1,Group Name 2@@2,3|Option 3|2\",\"adjustable\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties11\":{\"name\":\"useglobal\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) if set to true, it will show the value that is set in the global configuration if found in the database.\"},\"properties12\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default list item value.\"},\"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\"},\"properties14\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a drop down list of custom-defined entries.', '', 1, 2, '', 10, '088d47c0-b058-4894-b92e-dcf1b9d5a722'), -(40, 'The modulelayout form field type provides a drop down list of all available layouts for a module, grouped by core and template. If the parameter has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Modulelayout', '{\"properties0\":{\"name\":\"type\",\"example\":\"modulelayout\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be modulelayout.\"},\"properties1\":{\"name\":\"name\",\"example\":\"layout\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Layout\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Module layout\",\"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\":\"module\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a specific module name (e.g. mod_articles_category).\"},\"properties5\":{\"name\":\"client_id\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional). If 0 (site): Forces searching for layouts only in directories \\/modules\\/[MODULENAME]\\/tmpl\\/ and all \\/templates\\/[TEMPLATENAME]\\/html\\/[MODULENAME]\\/. If 1 (administrator): Forces searching for layouts only in directories \\/administrator\\/modules\\/[MODULENAME]\\/tmpl\\/ and all \\/administrator\\/templates\\/[TEMPLATENAME]\\/html\\/[MODULENAME]\\/.\\r\\n\"},\"properties6\":{\"name\":\"template\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a template name (e.g. protostar or isis). If set forces searching for module template overrides only in this template.\"}}', 'modulelayout', '', 1, 1, '', 11, '7520c8f4-543d-4c7a-8e4f-e2da71c3b1cd'), -(43, 'Provides a combobox field, which offers a list like the List Form Field Type, but additionally allows free text.', 'Combo', '{\"properties0\":{\"name\":\"type\",\"example\":\"combo\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be combo.\"},\"properties1\":{\"name\":\"name\",\"example\":\"type\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Type\",\"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) tooltip for the form field.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"combobox\",\"adjustable\":\"1\",\"description\":\"(optional) specify your own classes for additonal markup, defaults to \\\"combobox\\\".\"},\"properties6\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) filter options\"},\"properties7\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties8\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field. This value will determine which method is used to validate the value for a field.\"},\"properties9\":{\"name\":\"option\",\"example\":\"0|Option 1,1|Option 2,2|Option 1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties10\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default list item value.\"},\"properties11\":{\"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\"},\"properties12\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'Provides a combobox list field, allows free text.', '', 1, 2, '', 13, '2c8b128f-7da2-4f55-b1d7-3613f902f590'), -(44, 'The imagelist form field type provides a drop down list of image files in a specified directory. Only files with .png, .gif, .jpg, .bmp, .ico extensions are listed. 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.\r\n\r\nBy default, the first item on the list is \'- Do not use -\' (which is translatable) and is given the value \'-1\' and this is followed by \'- Use default -\' (also translatable) given the value \'0\'.', 'Imagelist', '{\"properties0\":{\"name\":\"type\",\"example\":\"imagelist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be imagelist.\"},\"properties6\":{\"name\":\"name\",\"example\":\"myimagelist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties5\":{\"name\":\"label\",\"example\":\"Select an image\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties4\":{\"name\":\"directory\",\"example\":\"images\\/stories\",\"adjustable\":\"1\",\"description\":\"(optional) is the filesystem path to the directory containing the image files to be listed. If omitted the directory given by JPATH_ROOT is assumed.\"},\"properties3\":{\"name\":\"default\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is the default image file name.\"},\"properties2\":{\"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.\"},\"properties1\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to filter the list of image files selected for inclusion in the drop-down list. If omitted, all image 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.\"},\"properties9\":{\"name\":\"exclude\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a regular expression string which is used to exclude image 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 image file names listed. Also note that the file name will be saved without the extension too.\"},\"properties7\":{\"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\"}}', 'Provides a drop down list of image files from a specified directory.', '', 1, 1, '', 14, '72680e92-2859-49c6-ad92-c2329c52f9f8'); +(39, 'The list form field type provides a drop down list or a list box of custom-defined entries. If the field has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Groupedlist', '{\"properties0\":{\"name\":\"type\",\"example\":\"groupedlist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be groupedlist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"mygrouplist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an option\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as a tooltip when the user moves the mouse over the drop-down box.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"list_class\",\"adjustable\":\"1\",\"description\":\"(optional) is a CSS class name for the HTML form field. If omitted this will default to \'inputbox\'.\"},\"properties6\":{\"name\":\"multiple\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) is whether multiple items can be selected at the same time (true or false).\"},\"properties7\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) filter options\"},\"properties8\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties9\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field. This value will determine which method is used to validate the value for a field.\"},\"properties10\":{\"name\":\"option\",\"example\":\"Group Name@@1,1|Option 1|1,2|Option 2|1,Group Name 2@@2,3|Option 3|2\",\"adjustable\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties11\":{\"name\":\"useglobal\",\"example\":\"false\",\"adjustable\":\"1\",\"description\":\"(optional) if set to true, it will show the value that is set in the global configuration if found in the database.\"},\"properties12\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default list item value.\"},\"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\"},\"properties14\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'provides a drop down list of custom-defined entries.', '', 1, 3, '', 10, '088d47c0-b058-4894-b92e-dcf1b9d5a722'), +(40, 'The modulelayout form field type provides a drop down list of all available layouts for a module, grouped by core and template. If the parameter has a saved value this is selected when the page is first loaded. If not, the default value (if any) is selected.', 'Modulelayout', '{\"properties0\":{\"name\":\"type\",\"example\":\"modulelayout\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be modulelayout.\"},\"properties1\":{\"name\":\"name\",\"example\":\"layout\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Layout\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"translatable\":\"1\",\"description\":\"(mandatory) (translatable) is the descriptive title of the field.\"},\"properties3\":{\"name\":\"description\",\"example\":\"Module layout\",\"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\":\"module\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a specific module name (e.g. mod_articles_category).\"},\"properties5\":{\"name\":\"client_id\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional). If 0 (site): Forces searching for layouts only in directories \\/modules\\/[MODULENAME]\\/tmpl\\/ and all \\/templates\\/[TEMPLATENAME]\\/html\\/[MODULENAME]\\/. If 1 (administrator): Forces searching for layouts only in directories \\/administrator\\/modules\\/[MODULENAME]\\/tmpl\\/ and all \\/administrator\\/templates\\/[TEMPLATENAME]\\/html\\/[MODULENAME]\\/.\\r\\n\"},\"properties6\":{\"name\":\"template\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) is a template name (e.g. protostar or isis). If set forces searching for module template overrides only in this template.\"}}', 'modulelayout', '', 1, 2, '', 11, '7520c8f4-543d-4c7a-8e4f-e2da71c3b1cd'), +(43, 'Provides a combobox field, which offers a list like the List Form Field Type, but additionally allows free text.', 'Combo', '{\"properties0\":{\"name\":\"type\",\"example\":\"combo\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be combo.\"},\"properties1\":{\"name\":\"name\",\"example\":\"type\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the parameter.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Type\",\"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) tooltip for the form field.\"},\"properties4\":{\"name\":\"message\",\"example\":\"\",\"adjustable\":\"1\",\"translatable\":\"1\",\"description\":\"(optional) (translatable) is text that will be shown as error on validation.\"},\"properties5\":{\"name\":\"class\",\"example\":\"combobox\",\"adjustable\":\"1\",\"description\":\"(optional) specify your own classes for additonal markup, defaults to \\\"combobox\\\".\"},\"properties6\":{\"name\":\"filter\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) filter options\"},\"properties7\":{\"name\":\"required\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The field must be filled before submitting the form.\"},\"properties8\":{\"name\":\"validate\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) The validation method for the form field. This value will determine which method is used to validate the value for a field.\"},\"properties9\":{\"name\":\"option\",\"example\":\"0|Option 1,1|Option 2,2|Option 1\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) set the options of this radio. Separate options with commas and use the pipe symbol to separate value from text.\"},\"properties10\":{\"name\":\"default\",\"example\":\"0\",\"adjustable\":\"1\",\"description\":\"(optional) is the default list item value.\"},\"properties11\":{\"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\"},\"properties12\":{\"name\":\"onchange\",\"example\":\"\",\"adjustable\":\"1\",\"description\":\"(optional) HTML equivalent attribute (javascript use)\"}}', 'Provides a combobox list field, allows free text.', '', 1, 3, '', 13, '2c8b128f-7da2-4f55-b1d7-3613f902f590'), +(44, 'The imagelist form field type provides a drop down list of image files in a specified directory. Only files with .png, .gif, .jpg, .bmp, .ico extensions are listed. 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.\r\n\r\nBy default, the first item on the list is \'- Do not use -\' (which is translatable) and is given the value \'-1\' and this is followed by \'- Use default -\' (also translatable) given the value \'0\'.', 'Imagelist', '{\"properties0\":{\"name\":\"type\",\"example\":\"imagelist\",\"mandatory\":\"1\",\"description\":\"(mandatory) must be imagelist.\"},\"properties1\":{\"name\":\"name\",\"example\":\"myimagelist\",\"adjustable\":\"1\",\"mandatory\":\"1\",\"description\":\"(mandatory) is the unique name of the field.\"},\"properties2\":{\"name\":\"label\",\"example\":\"Select an image\",\"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 image 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 image 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 image files selected for inclusion in the drop-down list. If omitted, all image 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 image 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 image 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\"}}', 'Provides a drop down list of image files from a specified directory.', '', 1, 3, '', 14, '72680e92-2859-49c6-ad92-c2329c52f9f8'); -- -- Dumping data for table `#__componentbuilder_language` diff --git a/admin/views/compiler/tmpl/default.php b/admin/views/compiler/tmpl/default.php index 1832c6875..eec98231b 100644 --- a/admin/views/compiler/tmpl/default.php +++ b/admin/views/compiler/tmpl/default.php @@ -188,6 +188,7 @@ document.addEventListener('DOMContentLoaded', function() {

user->name); ?>

.

+

builder_gif_size); ?>
diff --git a/admin/views/fieldtype/view.html.php b/admin/views/fieldtype/view.html.php index 08d3a362d..f509bcea2 100644 --- a/admin/views/fieldtype/view.html.php +++ b/admin/views/fieldtype/view.html.php @@ -161,6 +161,16 @@ class ComponentbuilderViewFieldtype extends HtmlView { ToolbarHelper::custom('fieldtype.save2copy', 'save-copy.png', 'save-copy_f2.png', 'JTOOLBAR_SAVE_AS_COPY', false); } + if ($this->canDo->get('fieldtype.reset')) + { + // add Reset button. + ToolbarHelper::custom('fieldtype.resetPowers', 'joomla custom-button-resetpowers', '', 'COM_COMPONENTBUILDER_RESET', false); + } + if ($this->canDo->get('fieldtype.push')) + { + // add Push button. + ToolbarHelper::custom('fieldtype.pushPowers', 'share custom-button-pushpowers', '', 'COM_COMPONENTBUILDER_PUSH', false); + } ToolbarHelper::cancel('fieldtype.cancel', 'JTOOLBAR_CLOSE'); } } diff --git a/admin/views/fieldtypes/view.html.php b/admin/views/fieldtypes/view.html.php index b21c54966..1fb562b1c 100644 --- a/admin/views/fieldtypes/view.html.php +++ b/admin/views/fieldtypes/view.html.php @@ -154,6 +154,21 @@ class ComponentbuilderViewFieldtypes extends HtmlView ToolbarHelper::custom('fieldtypes.exportData', 'download', '', 'COM_COMPONENTBUILDER_EXPORT_DATA', true); } } + if ($this->user->authorise('fieldtype.init', 'com_componentbuilder')) + { + // add Init button. + ToolbarHelper::custom('fieldtypes.initPowers', 'health custom-button-initpowers', '', 'COM_COMPONENTBUILDER_INIT', false); + } + if ($this->user->authorise('fieldtype.reset', 'com_componentbuilder')) + { + // add Reset button. + ToolbarHelper::custom('fieldtypes.resetPowers', 'joomla custom-button-resetpowers', '', 'COM_COMPONENTBUILDER_RESET', false); + } + if ($this->user->authorise('fieldtype.push', 'com_componentbuilder')) + { + // add Push button. + ToolbarHelper::custom('fieldtypes.pushPowers', 'share custom-button-pushpowers', '', 'COM_COMPONENTBUILDER_PUSH', false); + } if ($this->canDo->get('core.import') && $this->canDo->get('fieldtype.import')) { diff --git a/admin/views/help_documents/tmpl/default_head.php b/admin/views/help_documents/tmpl/default_head.php index 69d0602cd..ee585f899 100644 --- a/admin/views/help_documents/tmpl/default_head.php +++ b/admin/views/help_documents/tmpl/default_head.php @@ -45,10 +45,10 @@ use Joomla\CMS\HTML\HTMLHelper as Html; listDirn, $this->listOrder); ?> - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> - listDirn, $this->listOrder); ?> + listDirn, $this->listOrder); ?> canState): ?> diff --git a/admin/views/help_documents/view.html.php b/admin/views/help_documents/view.html.php index 249d9b311..688e7da03 100644 --- a/admin/views/help_documents/view.html.php +++ b/admin/views/help_documents/view.html.php @@ -310,8 +310,8 @@ class ComponentbuilderViewHelp_documents extends HtmlView 'a.title' => Text::_('COM_COMPONENTBUILDER_HELP_DOCUMENT_TITLE_LABEL'), 'a.type' => Text::_('COM_COMPONENTBUILDER_HELP_DOCUMENT_TYPE_LABEL'), 'a.location' => Text::_('COM_COMPONENTBUILDER_HELP_DOCUMENT_LOCATION_LABEL'), - 'h.' => Text::_('COM_COMPONENTBUILDER_HELP_DOCUMENT_ADMIN_VIEW_LABEL'), - 'i.' => Text::_('COM_COMPONENTBUILDER_HELP_DOCUMENT_SITE_VIEW_LABEL'), + 'g.' => Text::_('COM_COMPONENTBUILDER_HELP_DOCUMENT_ADMIN_VIEW_LABEL'), + 'h.' => Text::_('COM_COMPONENTBUILDER_HELP_DOCUMENT_SITE_VIEW_LABEL'), 'a.id' => Text::_('JGRID_HEADING_ID') ); } diff --git a/componentbuilder.xml b/componentbuilder.xml index 6e96fc5ce..94c796d0e 100644 --- a/componentbuilder.xml +++ b/componentbuilder.xml @@ -1,15 +1,15 @@ COM_COMPONENTBUILDER - 21st August, 2024 + 23rd August, 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 - 3.2.4-alpha2 + 3.2.4-alpha3 Component Builder (v.3.2.4-alpha2) +

Component Builder (v.3.2.4-alpha3)

The Component Builder for [Joomla](https://extensions.joomla.org/extension/component-builder/) is highly advanced tool that is truly able to build extremely complex components in a fraction of the time. diff --git a/componentbuilder_update_server.xml b/componentbuilder_update_server.xml index 7716d49ba..9ac0afe30 100644 --- a/componentbuilder_update_server.xml +++ b/componentbuilder_update_server.xml @@ -187,7 +187,7 @@ 3.2.4-alpha https://dev.vdm.io - https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.2.4-alpha2.zip + https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.2.4-alpha3.zip alpha @@ -202,10 +202,10 @@ pkg_component_builder package site - 3.2.4-alpha2 + 3.2.4-alpha3 https://dev.vdm.io - https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.2.4-alpha2.zip + https://git.vdm.dev/api/v1/repos/joomla/pkg-component-builder/archive/v3.2.4-alpha3.zip alpha diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/Builders.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/Builders.php index ada8df795..4c5e0301d 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/Builders.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/Builders.php @@ -1116,7 +1116,7 @@ final class Builders break; } // just a heads-up for usergroups set to multiple - if ($typeName === 'usergroup') + if ($typeName === 'usergroup' || $typeName === 'usergrouplist') { $this->sitefielddata->set( $nameSingleCode, $name, 'json', $typeName diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/ConfigFieldsetsGroupControl.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/ConfigFieldsetsGroupControl.php index 3904bf70d..b4e35687d 100644 --- a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/ConfigFieldsetsGroupControl.php +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Compiler/Creator/ConfigFieldsetsGroupControl.php @@ -138,7 +138,7 @@ final class ConfigFieldsetsGroupControl { $this->configfieldsets->add('component', Indent::_(2) . 'configfieldsets->add('component', Indent::_(3) . 'type="usergroup"'); + $this->configfieldsets->add('component', Indent::_(3) . 'type="usergrouplist"'); $this->configfieldsets->add('component', Indent::_(3) . 'label="' . $label . '"'); $this->configfieldsets->add('component', Indent::_(3) . 'description="' . $lang . '_TARGET_GROUP_DESC"'); 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 ddf57c236..434f7f98d 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 @@ -36,13 +36,13 @@ final class Groups 'color', 'combo', 'componentlayout', 'contentlanguage', 'contenttype', 'databaseconnection', 'components', 'editor', 'editors', 'email', 'file', 'file', 'filelist', 'folderlist', 'groupedlist', 'headertag', 'helpsite', 'hidden', 'imagelist', 'integer', 'language', 'list', 'media', 'menu', 'modal_menu', 'menuitem', 'meter', 'modulelayout', 'moduleorder', 'moduleposition', - 'moduletag', 'note', 'number', 'password', 'plugins', 'predefinedlist', 'radio', 'range', 'repeatable', 'rules', + 'moduletag', 'note', 'number', 'password', 'plugins', 'predefinedlist', 'radio', 'range', 'repeatable', 'rules', 'usergrouplist', 'sessionhandler', 'spacer', 'sql', 'subform', 'tag', 'tel', 'templatestyle', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup' ], 'plain' => [ 'cachehandler', 'calendar', 'checkbox', 'chromestyle', 'color', 'componentlayout', 'contenttype', 'editor', 'editors', 'captcha', 'email', 'file', 'headertag', 'helpsite', 'hidden', 'integer', 'language', 'media', 'menu', 'modal_menu', 'menuitem', 'meter', 'modulelayout', 'templatestyle', - 'moduleorder', 'moduletag', 'number', 'password', 'range', 'rules', 'tag', 'tel', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup' + 'moduleorder', 'moduletag', 'number', 'password', 'range', 'rules', 'tag', 'tel', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup' , 'usergrouplist' ], 'option' => [ 'accesslevel', 'category', 'checkboxes', 'combo', 'contentlanguage', 'databaseconnection', 'components', 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 616341c55..ddfb9ab19 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 @@ -18062,7 +18062,7 @@ class Interpretation extends Fields . "\$query = \$db->getQuery(true);"; // check if usergroup as we change to an object query - if ($filter['type'] === 'usergroup') + if ($filter['type'] === 'usergroup' || $filter['type'] === 'usergrouplist') { $function[] = PHP_EOL . Indent::_(2) . "//" . Line::_(__Line__, __Class__) . " Select the text."; @@ -18139,7 +18139,7 @@ class Interpretation extends Fields . $nameListCode . "');"; } // check if usergroup as we change to an object query - if ($filter['type'] !== 'usergroup') + if ($filter['type'] !== 'usergroup' && $filter['type'] !== 'usergrouplist') { $function[] = Indent::_(3) . "\$_results = array_unique(\$_results);"; @@ -18197,7 +18197,7 @@ class Interpretation extends Fields } else { - if ($filter['type'] === 'usergroup') + if ($filter['type'] === 'usergroup' || $filter['type'] === 'usergrouplist') { $function[] = Indent::_(4) . "//" . Line::_( __LINE__,__CLASS__ @@ -20677,7 +20677,7 @@ class Interpretation extends Fields break; } - if ($item['type'] === 'usergroup' && !$export + if (($item['type'] === 'usergroup' || $item['type'] === 'usergrouplist') && !$export && $item['method'] != 6) { $fix .= PHP_EOL . Indent::_(1) . $tab . Indent::_(3) . "//" @@ -20704,7 +20704,7 @@ class Interpretation extends Fields . $item['name'] . "Names);"; $fix .= PHP_EOL . Indent::_(1) . $tab . Indent::_(3) . "}"; } - /* elseif ($item['type'] === 'usergroup' && $export) + /* elseif (($item['type'] === 'usergroup' || $item['type'] === 'usergrouplist') && $export) { $fix .= PHP_EOL.Indent::_(1).$tab.Indent::_(3) . "//".Line::_(__Line__, __Class__)." decode ".$item['name']; $fix .= PHP_EOL.Indent::_(1).$tab.Indent::_(3) . "\$".$item['name']."Array = ".$decode."(\$item->".$item['name'].$suffix_decode.");"; diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Config.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Config.php new file mode 100644 index 000000000..21f21ccce --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Config.php @@ -0,0 +1,147 @@ + + * @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\Fieldtype; + + +use Joomla\Registry\Registry as JoomlaRegistry; +use Joomla\CMS\Factory as JoomlaFactory; +use VDM\Joomla\Utilities\GetHelper; +use VDM\Joomla\Utilities\StringHelper; +use VDM\Joomla\Componentbuilder\Utilities\RepoHelper; +use VDM\Joomla\Componentbuilder\Abstraction\BaseConfig; + + +/** + * Compiler Configurations + * + * All these functions are accessed via the direct name without the get: + * example: $this->component_code_name calls: $this->getComponentcodename() + * + * All values once called are cached, yet can be updated directly: + * example: $this->component_code_name = 'new_code_name'; // be warned! + * + * @since 5.0.3 + */ +class Config extends BaseConfig +{ + /** + * The Global Joomla Configuration + * + * @var JoomlaRegistry + * @since 5.0.3 + */ + protected JoomlaRegistry $config; + + /** + * Constructor + * + * @param Input|null $input Input + * @param Registry|null $params The component parameters + * @param Registry|null $config The Joomla configuration + * + * @throws \Exception + * @since 5.0.3 + */ + public function __construct(?Input $input = null, ?JoomlaRegistry $params = null, ?JoomlaRegistry $config = null) + { + parent::__construct($input, $params); + + $this->config = $config ?: JoomlaFactory::getConfig(); + } + + /** + * get Gitea Username + * + * @return string the access token + * @since 5.0.3 + */ + protected function getGiteausername(): ?string + { + return $this->params->get('gitea_username'); + } + + /** + * get Gitea Access Token + * + * @return string the access token + * @since 5.0.3 + */ + protected function getGiteatoken(): ?string + { + return $this->params->get('gitea_token'); + } + + /** + * Get fieldtype core organisation + * + * @return string The fieldtype core organisation + * @since 5.0.3 + */ + protected function getJoomlafieldtypecoreorganisation(): string + { + // the VDM default organisation is [joomla] + $organisation = 'joomla'; + + return $this->params->get('joomla_fieldtype_core_organisation', $organisation); + } + + /** + * Get Joomla fieldtype init repos + * + * @return array The init repositories on Gitea + * @since 5.0.3 + */ + protected function getJoomlafieldtypeinitrepos(): array + { + // some defaults repos we need by JCB + $repos = []; + // get the users own power repo (can overwrite all) + if (!empty($this->gitea_username)) + { + $repos[$this->gitea_username . '.joomla-fieldtype'] = (object) ['organisation' => $this->gitea_username, 'repository' => 'joomla-fieldtype', 'read_branch' => 'master']; + } + $repos[$this->joomla_fieldtype_core_organisation . '.joomla-fieldtype'] = (object) ['organisation' => $this->joomla_fieldtype_core_organisation, 'repository' => 'joomla-fieldtype', 'read_branch' => 'master']; + + return $repos; + } + + /** + * Get joomla fieldtype approved paths + * + * @return array The approved paths to the repositories on Gitea + * @since 5.0.3 + */ + protected function getApprovedjoomlapaths(): array + { + // some defaults repos we need by JCB + $approved = $this->joomla_fieldtype_init_repos; + + $paths = RepoHelper::get(3); // Joomla Field Type = 3 + + if ($paths !== null) + { + foreach ($paths as $path) + { + $owner = $path->organisation ?? null; + $repo = $path->repository ?? null; + if ($owner !== null && $repo !== null) + { + // we make sure to get only the objects + $approved = ["{$owner}.{$repo}" => $path] + $approved; + } + } + } + + return array_values($approved); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Factory.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Factory.php new file mode 100644 index 000000000..249140f94 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Factory.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\Fieldtype; + + +use Joomla\DI\Container; +use VDM\Joomla\Componentbuilder\Fieldtype\Service\Fieldtype as Power; +use VDM\Joomla\Service\Database; +use VDM\Joomla\Service\Model; +use VDM\Joomla\Service\Data; +use VDM\Joomla\Componentbuilder\Service\Gitea; +use VDM\Joomla\Componentbuilder\Power\Service\Gitea as GiteaPower; +use VDM\Joomla\Gitea\Service\Utilities as GiteaUtilities; +use VDM\Joomla\Interfaces\FactoryInterface; +use VDM\Joomla\Abstraction\Factory as ExtendingFactory; + + +/** + * Field Type Power Factory + * + * @since 5.0.3 + */ +abstract class Factory extends ExtendingFactory implements FactoryInterface +{ + /** + * Create a container object + * + * @return Container + * @since 5.0.3 + */ + protected static function createContainer(): Container + { + return (new Container()) + ->registerServiceProvider(new Power()) + ->registerServiceProvider(new Database()) + ->registerServiceProvider(new Model()) + ->registerServiceProvider(new Data()) + ->registerServiceProvider(new Gitea()) + ->registerServiceProvider(new GiteaPower()) + ->registerServiceProvider(new GiteaUtilities()); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Grep.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Grep.php new file mode 100644 index 000000000..b0e1ac190 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Grep.php @@ -0,0 +1,151 @@ + + * @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\Fieldtype; + + +use Joomla\CMS\Language\Text; +use VDM\Joomla\Interfaces\GrepInterface; +use VDM\Joomla\Abstraction\Grep as ExtendingGrep; + + +/** + * Global Resource Empowerment Platform + * + * The Grep feature will try to find your joomla power in the repositories listed in the global + * Options of JCB in the super powers tab, and if it can't be found there will try the global core + * Super powers of JCB. All searches are performed according the [algorithm:cascading] + * See documentation for more details: https://git.vdm.dev/joomla/super-powers/wiki + * + * @since 5.0.3 + */ +final class Grep extends ExtendingGrep implements GrepInterface +{ + /** + * Order of global search + * + * @var array + * @since 5.0.3 + **/ + protected array $order = ['remote']; + + /** + * Search for a remote item + * + * @param string $guid The global unique id of the item + * + * @return object|null + * @since 5.0.3 + */ + protected function searchRemote(string $guid): ?object + { + // check if it exists remotely + if (($path = $this->existsRemotely($guid)) !== null) + { + return $this->getRemote($path, $guid); + } + + return null; + } + + /** + * Get a remote joomla power + * + * @param object $path The repository path details + * @param string $guid The global unique id of the power + * + * @return object|null + * @since 5.0.3 + */ + protected function getRemote(object $path, string $guid): ?object + { + $power = null; + if (empty($path->index->{$guid}->path)) + { + return $power; + } + + // get the branch name + $branch = $this->getBranchName($path); + + // load the base and token if set + $this->contents->load_($path->base ?? null, $path->token ?? null); + + // get the settings + if (($power = $this->loadRemoteFile($path->organisation, $path->repository, $path->index->{$guid}->path . '/item.json', $branch)) !== null && + isset($power->guid)) + { + // set the git details in params + $path_guid = $path->guid ?? null; + if ($path_guid !== null) + { + // get the Settings meta + if (($meta = $this->contents->metadata($path->organisation, $path->repository, $path->index->{$guid}->path . '/item.json', $branch)) !== null && + isset($meta->sha)) + { + if (isset($power->params) && is_object($power->params) && + isset($power->params->source) && is_array($power->params->source)) + { + $power->params->source[$path_guid . '-settings'] = $meta->sha; + } + else + { + $power->params = (object) [ + 'source' => [$path_guid . '-settings' => $meta->sha] + ]; + } + } + // get the README meta + if (($meta = $this->contents->metadata($path->organisation, $path->repository, $path->index->{$guid}->path . '/README.md', $branch)) !== null && + isset($meta->sha)) + { + if (isset($power->params) && is_object($power->params) && + isset($power->params->source) && is_array($power->params->source)) + { + $power->params->source[$path_guid . '-readme'] = $meta->sha; + } + else + { + $power->params = (object) [ + 'source' => [$path_guid . '-readme' => $meta->sha] + ]; + } + } + } + } + + // reset back to the global base and token + $this->contents->reset_(); + + return $power; + } + + /** + * Set repository messages and errors based on given conditions. + * + * @param string $message The message to set (if error) + * @param string $path Path value + * @param string $repository Repository name + * @param string $organisation Organisation name + * @param string|null $base Base URL + * + * @return void + * @since 5.0.3 + */ + protected function setRemoteIndexMessage(string $message, string $path, string $repository, string $organisation, ?string $base): void + { + $this->app->enqueueMessage( + Text::sprintf('COM_COMPONENTBUILDER_PJOOMLA_FIELD_TYPEB_REPOSITORY_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP', $this->contents->api(), $path, $message), + 'Error' + ); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Item.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Item.php new file mode 100644 index 000000000..038c77fe8 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Item.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\Fieldtype\Readme; + + +use VDM\Joomla\Interfaces\Readme\ItemInterface; + + +/** + * Compiler Field Type Item Readme + * + * @since 5.0.3 + */ +final class Item implements ItemInterface +{ + /** + * Get an item readme + * + * @param object $item An item details. + * + * @return string + * @since 3.2.2 + */ + public function get(object $item): string + { + // build readme + $readme = ["``` + ██╗ ██████╗ ██████╗ ███╗ ███╗██╗ █████╗ ███████╗██╗███████╗██╗ ██████╗ ████████╗██╗ ██╗██████╗ ███████╗ + ██║██╔═══██╗██╔═══██╗████╗ ████║██║ ██╔══██╗ ██╔════╝██║██╔════╝██║ ██╔══██╗ ╚══██╔══╝╚██╗ ██╔╝██╔══██╗██╔════╝ + ██║██║ ██║██║ ██║██╔████╔██║██║ ███████║ █████╗ ██║█████╗ ██║ ██║ ██║ ██║ ╚████╔╝ ██████╔╝█████╗ +██ ██║██║ ██║██║ ██║██║╚██╔╝██║██║ ██╔══██║ ██╔══╝ ██║██╔══╝ ██║ ██║ ██║ ██║ ╚██╔╝ ██╔═══╝ ██╔══╝ +╚█████╔╝╚██████╔╝╚██████╔╝██║ ╚═╝ ██║███████╗██║ ██║ ██║ ██║███████╗███████╗██████╔╝ ██║ ██║ ██║ ███████╗ + ╚════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝ +```"]; + // system name + $readme[] = "# " . $item->name; + + if (!empty($item->description)) + { + $readme[] = "\n" . $item->description; + } + elseif (!empty($item->short_description)) + { + $readme[] = "\n" . $item->short_description; + } + + $readme[] = "\nThe Joomla! field types within this repository provide an essential mechanism for integrating Joomla-related field type into the Joomla Component Builder (JCB). Each field type is meticulously designed to ensure compatibility and ease of use within the JCB framework, allowing developers to effortlessly incorporate and manage custom fields in their components. By utilizing the reset functionality, users can seamlessly update individual field types to align with the latest versions maintained in our core repository, ensuring that their projects benefit from the most up-to-date features and fixes. Additionally, for those who prefer a more personalized approach, the repository can be forked, enabling developers to maintain and distribute their customized field types independently from the broader JCB community. This level of flexibility underscores the open-source nature of JCB, offering you the freedom to adapt and extend your components according to your specific needs, while still benefiting from a robust, community-driven ecosystem."; + + // yes you can remove this, but why? + $readme[] = "\n---\n``` + ██╗ ██████╗██████╗ + ██║██╔════╝██╔══██╗ + ██║██║ ██████╔╝ +██ ██║██║ ██╔══██╗ +╚█████╔╝╚██████╗██████╔╝ + ╚════╝ ╚═════╝╚═════╝ +```\n> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)\n\n"; + + return implode("\n", $readme); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Main.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Main.php new file mode 100644 index 000000000..55d465425 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/Main.php @@ -0,0 +1,234 @@ + + * @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\Fieldtype\Readme; + + +use VDM\Joomla\Interfaces\Readme\MainInterface; + + +/** + * Field Type Main Readme + * + * @since 5.0.3 + */ +final class Main implements MainInterface +{ + /** + * Get Main Readme + * + * @param array $items All items of this repository. + * + * @return string + * @since 3.2.0 + */ + public function get(array $items): string + { + // build readme + $readme = ["``` + ██╗ ██████╗ ██████╗ ███╗ ███╗██╗ █████╗ + ██║██╔═══██╗██╔═══██╗████╗ ████║██║ ██╔══██╗ + ██║██║ ██║██║ ██║██╔████╔██║██║ ███████║ +██ ██║██║ ██║██║ ██║██║╚██╔╝██║██║ ██╔══██║ +╚█████╔╝╚██████╔╝╚██████╔╝██║ ╚═╝ ██║███████╗██║ ██║ + ╚════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ + +███████╗██╗███████╗██╗ ██████╗ ████████╗██╗ ██╗██████╗ ███████╗███████╗ +██╔════╝██║██╔════╝██║ ██╔══██╗ ╚══██╔══╝╚██╗ ██╔╝██╔══██╗██╔════╝██╔════╝ +█████╗ ██║█████╗ ██║ ██║ ██║ ██║ ╚████╔╝ ██████╔╝█████╗ ███████╗ +██╔══╝ ██║██╔══╝ ██║ ██║ ██║ ██║ ╚██╔╝ ██╔═══╝ ██╔══╝ ╚════██║ +██║ ██║███████╗███████╗██████╔╝ ██║ ██║ ██║ ███████╗███████║ +╚═╝ ╚═╝╚══════╝╚══════╝╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝ +```"]; + + // default description of super powers + $readme[] = "\n### What is JCB Joomla Field Types?\nThe Joomla field types provide a powerful way to map Joomla-related field types, enabling seamless integration with Joomla Component Builder (JCB). This repository serves as a centralized system for maintaining, updating, and distributing these field types throughout the JCB ecosystem.\n +\n +When you need to update any field type in JCB, simply select the desired field type and click the "reset" button. This action will automatically sync the selected field type with its corresponding version hosted in our core repository, ensuring you always have the latest updates.\n +\n +Moreover, if you wish to tailor the field types to your specific needs, you can fork the repository and point your JCB instance to your fork. This allows you to maintain and update field types independently from the main JCB community, offering the flexibility that is at the heart of open-source philosophy.\n +\n +We believe this approach empowers you to extend and customize JCB to fit your unique requirements, exemplifying the true spirit of freedom in software development. We trust you will find this capability both useful and aligned with the expectations of how open-source software should function.\n"; + + // get the readme body + $readme[] = $this->readmeBuilder($items); + + // yes you can remove this, but why? + $readme[] = "\n---\n``` + ██╗ ██████╗ ██████╗ ███╗ ███╗██╗ █████╗ + ██║██╔═══██╗██╔═══██╗████╗ ████║██║ ██╔══██╗ + ██║██║ ██║██║ ██║██╔████╔██║██║ ███████║ +██ ██║██║ ██║██║ ██║██║╚██╔╝██║██║ ██╔══██║ +╚█████╔╝╚██████╔╝╚██████╔╝██║ ╚═╝ ██║███████╗██║ ██║ + ╚════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ + ██████╗ ██████╗ ███╗ ███╗██████╗ ██████╗ ███╗ ██╗███████╗███╗ ██╗████████╗ +██╔════╝██╔═══██╗████╗ ████║██╔══██╗██╔═══██╗████╗ ██║██╔════╝████╗ ██║╚══██╔══╝ +██║ ██║ ██║██╔████╔██║██████╔╝██║ ██║██╔██╗ ██║█████╗ ██╔██╗ ██║ ██║ +██║ ██║ ██║██║╚██╔╝██║██╔═══╝ ██║ ██║██║╚██╗██║██╔══╝ ██║╚██╗██║ ██║ +╚██████╗╚██████╔╝██║ ╚═╝ ██║██║ ╚██████╔╝██║ ╚████║███████╗██║ ╚████║ ██║ + ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═══╝ ╚═╝ +██████╗ ██╗ ██╗██╗██╗ ██████╗ ███████╗██████╗ +██╔══██╗██║ ██║██║██║ ██╔══██╗██╔════╝██╔══██╗ +██████╔╝██║ ██║██║██║ ██║ ██║█████╗ ██████╔╝ +██╔══██╗██║ ██║██║██║ ██║ ██║██╔══╝ ██╔══██╗ +██████╔╝╚██████╔╝██║███████╗██████╔╝███████╗██║ ██║ +╚═════╝ ╚═════╝ ╚═╝╚══════╝╚═════╝ ╚══════╝╚═╝ ╚═╝ +```\n> Build with [Joomla Component Builder](https://git.vdm.dev/joomla/Component-Builder)\n\n"; + + return implode("\n", $readme); + } + + /** + * The readme builder + * + * @param array $classes The powers. + * + * @return string + * @since 3.2.0 + */ + private function readmeBuilder(array &$items): string + { + $classes = []; + foreach ($items as $guid => $power) + { + // add to the sort bucket + $classes[] = [ + 'name' => $power['name'], + 'link' => $this->indexLinkPower($power) + ]; + } + + return $this->readmeModel($classes); + } + + /** + * Sort and model the readme classes + * + * @param array $classes The powers. + * + * @return string + * @since 3.2.0 + */ + private function readmeModel(array &$classes): string + { + $this->sortClasses($classes); + + return $this->generateIndex($classes); + } + + /** + * Generate the index string for classes + * + * @param array $classes The sorted classes + * + * @return string The index string + */ + private function generateIndex(array &$classes): string + { + $result = "# Index of Joomla! Field Types\n"; + + foreach ($classes as $class) + { + // Add the class details + $result .= "\n - " . $class['link']; + } + + return $result; + } + + /** + * Sort the flattened array using a single sorting function + * + * @param array $classes The classes to sort + * + * @since 3.2.0 + */ + private function sortClasses(array &$classes): void + { + usort($classes, function ($a, $b) { + return $this->compareName($a, $b); + }); + } + + /** + * Compare the name of two classes + * + * @param array $a First class + * @param array $b Second class + * + * @return int Comparison result + * @since 3.2.0 + */ + private function compareName(array $a, array $b): int + { + return strcmp($a['name'], $b['name']); + } + + /** + * Build the Link to the power in this repository + * + * @param array $power The power details. + * + * @return string + * @since 3.2.0 + */ + private function indexLinkPower(array &$power): string + { + $name = $power['name'] ?? 'error'; + return '**' . $name . "** | " + . $this->linkPowerRepo($power) . ' | ' + . $this->linkPowerSettings($power) . ' | ' + . $this->linkPowerDesc($power); + } + + /** + * Build the Link to the power in this repository + * + * @param array $power The power details. + * + * @return string + * @since 3.2.0 + */ + private function linkPowerRepo(array &$power): string + { + $path = $power['path'] ?? 'error'; + return '[Details](' . $path . ')'; + } + + /** + * Build the Link to the power settings in this repository + * + * @param array $power The power details. + * + * @return string + * @since 3.2.0 + */ + private function linkPowerSettings(array &$power): string + { + $settings = $power['settings'] ?? 'error'; + return '[Settings](' . $settings . ')'; + } + + /** + * Get the short description + * + * @param array $power The power details. + * + * @return string + * @since 3.2.0 + */ + private function linkPowerDesc(array &$power): string + { + $jpk = $power['desc'] ?? ''; + return $jpk; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Readme/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/Get.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/Get.php new file mode 100644 index 000000000..4f004f3c6 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/Get.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\Fieldtype\Remote; + + +use VDM\Joomla\Interfaces\Remote\GetInterface; +use VDM\Joomla\Abstraction\Remote\Get as ExtendingGet; + + +/** + * Remote Get Field Type of JCB + * + * @since 5.0.3 + */ +final class Get extends ExtendingGet implements GetInterface +{ + /** + * Table Name + * + * @var string + * @since 5.0.3 + */ + protected string $table = 'fieldtype'; +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/Set.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/Set.php new file mode 100644 index 000000000..61554544b --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/Set.php @@ -0,0 +1,218 @@ + + * @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\Fieldtype\Remote; + + +use VDM\Joomla\Interfaces\Remote\SetInterface; +use VDM\Joomla\Abstraction\Remote\Set as ExtendingSet; + + +/** + * Set Field Type based on global unique ids to remote repository + * + * @since 5.0.3 + */ +final class Set extends ExtendingSet implements SetInterface +{ + /** + * Table Name + * + * @var string + * @since 5.0.3 + */ + protected string $table = 'fieldtype'; + + /** + * Area Name + * + * @var string + * @since 5.0.3 + */ + protected string $area = 'Joomla Field Type'; + + /** + * Prefix Key + * + * @var string + * @since 5.0.3 + */ + protected string $prefix_key = ''; + + /** + * The item map + * + * @var array + * @since 5.0.3 + */ + protected array $map = [ + 'name' => 'name', + 'short_description' => 'short_description', + 'description' => 'description', + 'properties' => 'properties', + 'has_defaults' => 'has_defaults', + 'datatype' => 'datatype', + 'datalenght' => 'datalenght', + 'datalenght_other' => 'datalenght_other', + 'datadefault' => 'datadefault', + 'datadefault_other' => 'datadefault_other', + 'indexes' => 'indexes', + 'null_switch' => 'null_switch', + 'store' => 'store', + 'guid' => 'guid' + ]; + + /** + * The index map + * + * @var array + * @since 5.0.3 + */ + protected array $index_map = [ + 'name' => 'index_map_IndexName', + 'desc' => 'index_map_ShortDescription', + 'settings' => 'index_map_IndexSettingsPath', + 'path' => 'index_map_IndexPath', + 'guid' => 'index_map_IndexGUID' + ]; + + /** + * update an existing item (if changed) + * + * @param object $item + * @param object $existing + * @param object $repo + * + * @return bool + * @since 5.0.3 + */ + protected function updateItem(object $item, object $existing, object $repo): bool + { + // make sure there was a change + $sha = $existing->params->source[$repo->guid . '-settings'] ?? null; + $existing = $this->mapItem($existing); + if ($sha === null || $this->areObjectsEqual($item, $existing)) + { + return false; + } + + $this->git->update( + $repo->organisation, // The owner name. + $repo->repository, // The repository name. + 'src/' . $item->guid . '/' . $this->getSettingsPath(), // The file path. + json_encode($item, JSON_PRETTY_PRINT), // The file content. + 'Update ' . $item->name, // The commit message. + $sha, // The blob SHA of the old file. + $repo->write_branch // The branch name. + ); + + return true; + } + + /** + * create a new item + * + * @param object $item + * @param object $repo + * + * @return void + * @since 5.0.3 + */ + protected function createItem(object $item, object $repo): void + { + $this->git->create( + $repo->organisation, // The owner name. + $repo->repository, // The repository name. + 'src/' . $item->guid . '/' . $this->getSettingsPath(), // The file path. + json_encode($item, JSON_PRETTY_PRINT), // The file content. + 'Create ' . $item->name, // The commit message. + $repo->write_branch // The branch name. + ); + } + + /** + * update an existing item readme + * + * @param object $item + * @param object $existing + * @param object $repo + * + * @return void + * @since 5.0.3 + */ + protected function updateItemReadme(object $item, object $existing, object $repo): void + { + // make sure there was a change + $sha = $existing->params->source[$repo->guid . '-readme'] ?? null; + if ($sha === null) + { + return; + } + + $this->git->update( + $repo->organisation, // The owner name. + $repo->repository, // The repository name. + 'src/' . $item->guid . '/README.md', // The file path. + $this->itemReadme->get($item), // The file content. + 'Update ' . $item->name . ' readme file', // The commit message. + $sha, // The blob SHA of the old file. + $repo->write_branch // The branch name. + ); + } + + /** + * create a new item readme + * + * @param object $item + * @param object $repo + * + * @return void + * @since 5.0.3 + */ + protected function createItemReadme(object $item, object $repo): void + { + $this->git->create( + $repo->organisation, // The owner name. + $repo->repository, // The repository name. + 'src/' . $item->guid . '/README.md', // The file path. + $this->itemReadme->get($item), // The file content. + 'Create ' . $item->name . ' readme file', // The commit message. + $repo->write_branch // The branch name. + ); + } + + /** + * Get the item name for the index values + * + * @param object $item + * + * @return string|null + * @since 5.0.3 + */ + protected function index_map_IndexName(object $item): ?string + { + return $item->name ?? null; + } + + /** + * Get the item Short Description for the index values + * + * @param object $item + * + * @return string|null + * @since 5.0.3 + */ + protected function index_map_ShortDescription(object $item): ?string + { + return $item->short_description ?? null; + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Remote/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Service/Fieldtype.php b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Service/Fieldtype.php new file mode 100644 index 000000000..669f522c6 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Service/Fieldtype.php @@ -0,0 +1,169 @@ + + * @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\Fieldtype\Service; + + +use Joomla\DI\Container; +use Joomla\DI\ServiceProviderInterface; +use VDM\Joomla\Componentbuilder\Fieldtype\Config; +use VDM\Joomla\Componentbuilder\Table; +use VDM\Joomla\Componentbuilder\Fieldtype\Grep; +use VDM\Joomla\Componentbuilder\Fieldtype\Remote\Get; +use VDM\Joomla\Componentbuilder\Fieldtype\Remote\Set; +use VDM\Joomla\Componentbuilder\Fieldtype\Readme\Item as ItemReadme; +use VDM\Joomla\Componentbuilder\Fieldtype\Readme\Main as MainReadme; + + +/** + * Field Type Service Provider + * + * @since 5.0.3 + */ +class Fieldtype implements ServiceProviderInterface +{ + /** + * Registers the service provider with a DI container. + * + * @param Container $container The DI container. + * + * @return void + * @since 3.2.1 + */ + public function register(Container $container) + { + $container->alias(Config::class, 'Config') + ->share('Config', [$this, 'getConfig'], true); + + $container->alias(Table::class, 'Table') + ->share('Table', [$this, 'getTable'], true); + + $container->alias(Grep::class, 'Joomla.Fieldtype.Grep') + ->share('Joomla.Fieldtype.Grep', [$this, 'getGrep'], true); + + $container->alias(Get::class, 'Joomla.Fieldtype.Remote.Get') + ->share('Joomla.Fieldtype.Remote.Get', [$this, 'getRemoteGet'], true); + + $container->alias(Set::class, 'Joomla.Fieldtype.Remote.Set') + ->share('Joomla.Fieldtype.Remote.Set', [$this, 'getRemoteSet'], true); + + $container->alias(ItemReadme::class, 'Joomla.Fieldtype.Readme.Item') + ->share('Joomla.Fieldtype.Readme.Item', [$this, 'getItemReadme'], true); + + $container->alias(MainReadme::class, 'Joomla.Fieldtype.Readme.Main') + ->share('Joomla.Fieldtype.Readme.Main', [$this, 'getMainReadme'], true); + } + + /** + * Get The Config Class. + * + * @param Container $container The DI container. + * + * @return Config + * @since 3.2.1 + */ + public function getConfig(Container $container): Config + { + return new Config(); + } + + /** + * Get The Table Class. + * + * @param Container $container The DI container. + * + * @return Table + * @since 3.2.1 + */ + public function getTable(Container $container): Table + { + return new Table(); + } + + /** + * Get The Grep Class. + * + * @param Container $container The DI container. + * + * @return Grep + * @since 3.2.1 + */ + public function getGrep(Container $container): Grep + { + return new Grep( + $container->get('Gitea.Repository.Contents'), + $container->get('Config')->approved_joomla_paths + ); + } + + /** + * Get The Remote Get Class. + * + * @param Container $container The DI container. + * + * @return Get + * @since 3.2.1 + */ + public function getRemoteGet(Container $container): Get + { + return new Get( + $container->get('Joomla.Fieldtype.Grep'), + $container->get('Data.Item') + ); + } + + /** + * Get The Remote Set Class. + * + * @param Container $container The DI container. + * + * @return Set + * @since 3.2.2 + */ + public function getRemoteSet(Container $container): Set + { + return new Set( + $container->get('Config')->approved_joomla_paths, + $container->get('Joomla.Fieldtype.Grep'), + $container->get('Data.Items'), + $container->get('Joomla.Fieldtype.Readme.Item'), + $container->get('Joomla.Fieldtype.Readme.Main'), + $container->get('Gitea.Repository.Contents') + ); + } + + /** + * Get The Item Class. + * + * @param Container $container The DI container. + * + * @return ItemReadme + * @since 3.2.1 + */ + public function getItemReadme(Container $container): ItemReadme + { + return new ItemReadme(); + } + + /** + * Get The Main Class. + * + * @param Container $container The DI container. + * + * @return MainReadme + * @since 3.2.1 + */ + public function getMainReadme(Container $container): MainReadme + { + return new MainReadme(); + } +} + diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Service/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Service/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/Service/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/index.html b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/index.html new file mode 100644 index 000000000..fa6d84e80 --- /dev/null +++ b/libraries/vendor_jcb/VDM.Joomla/src/Componentbuilder/Fieldtype/index.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/script.php b/script.php index ba8ec991a..25931ee09 100644 --- a/script.php +++ b/script.php @@ -7159,7 +7159,7 @@ class Com_ComponentbuilderInstallerScript { $rule_length = $db->loadResult(); // Check the size of the rules column - if ($rule_length <= 102560) + if ($rule_length <= 103040) { // Fix the assets table rules column size $fix_rules_size = "ALTER TABLE `#__assets` CHANGE `rules` `rules` MEDIUMTEXT NOT NULL COMMENT 'JSON encoded access control. Enlarged to MEDIUMTEXT by JCB';"; @@ -10001,7 +10001,7 @@ class Com_ComponentbuilderInstallerScript echo '

-

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

'; +

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

'; // Set db if not set already. if (!isset($db)) diff --git a/site/helpers/componentbuilder.php b/site/helpers/componentbuilder.php index 7fc54f692..7074c4f5f 100644 --- a/site/helpers/componentbuilder.php +++ b/site/helpers/componentbuilder.php @@ -3510,12 +3510,12 @@ abstract class ComponentbuilderHelper 'editor', 'editors', 'email', 'file', 'file', 'filelist', 'folderlist', 'groupedlist', 'headertag', 'helpsite', 'hidden', 'imagelist', 'integer', 'language', 'list', 'media', 'menu', 'modal_menu', 'menuitem', 'meter', 'modulelayout', 'moduleorder', 'moduleposition', 'moduletag', 'note', 'number', 'password', 'plugins', 'predefinedlist', 'radio', 'range', 'repeatable', 'rules', - 'sessionhandler', 'spacer', 'sql', 'subform', 'tag', 'tel', 'templatestyle', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup' + 'sessionhandler', 'spacer', 'sql', 'subform', 'tag', 'tel', 'templatestyle', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup', 'usergrouplist' ), 'plain' => array( 'cachehandler', 'calendar', 'checkbox', 'chromestyle', 'color', 'componentlayout', 'contenttype', 'editor', 'editors', 'captcha', 'email', 'file', 'headertag', 'helpsite', 'hidden', 'integer', 'language', 'media', 'menu', 'modal_menu', 'menuitem', 'meter', 'modulelayout', 'templatestyle', - 'moduleorder', 'moduletag', 'number', 'password', 'range', 'rules', 'tag', 'tel', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup' + 'moduleorder', 'moduletag', 'number', 'password', 'range', 'rules', 'tag', 'tel', 'text', 'textarea', 'timezone', 'url', 'user', 'usergroup', 'usergrouplist' ), 'option' => array( 'accesslevel', 'category', 'checkboxes', 'combo', 'contentlanguage', 'databaseconnection', 'components', diff --git a/site/language/en-GB/en-GB.com_componentbuilder.ini b/site/language/en-GB/en-GB.com_componentbuilder.ini index 7ed1da60c..3949b5bd5 100644 --- a/site/language/en-GB/en-GB.com_componentbuilder.ini +++ b/site/language/en-GB/en-GB.com_componentbuilder.ini @@ -100,6 +100,7 @@ COM_COMPONENTBUILDER_PACKAGE_OWNER_DETAILS_NOT_FOUND="Package owner details not COM_COMPONENTBUILDER_PACKAGE_OWNER_NOT_SET="Package Owner Not Set" COM_COMPONENTBUILDER_PAIDLOCKED="Paid/Locked" COM_COMPONENTBUILDER_PFILE_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP="

File at %s/%s gave the following error!
%s

" +COM_COMPONENTBUILDER_PJOOMLA_FIELD_TYPEB_REPOSITORY_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP="

Joomla Field Type repository at %s/%s gave the following error!
%s

" COM_COMPONENTBUILDER_PJOOMLA_POWERB_REPOSITORY_AT_BSSB_GAVE_THE_FOLLOWING_ERRORBR_SP="

Joomla Power repository at %s/%s gave the following error!
%s

" COM_COMPONENTBUILDER_PJOOMLA_POWER_BGUIDSB_NOT_FOUNDP="

Joomla Power guid:%s not found!

" COM_COMPONENTBUILDER_PJOOMLA_POWER_BGUIDSB_WAS_FOUND_BUT_MISSING_A_NAMESPACE_VALUE_FOR_JOOMLA_SP="

Joomla Power guid:%s was found, but missing a namespace value for Joomla %s!

"