forked from joomla/Component-Builder
Mode some improvements to the new relation area. Fixed the notice message regarding the linked fields.
This commit is contained in:
parent
640c96ce38
commit
01149bfb7c
@ -125,11 +125,11 @@ Watch the [proposed development workflow](https://vdm.bz/proposed-development-wo
|
|||||||
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||||
+ *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder)
|
+ *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder)
|
||||||
+ *First Build*: 30th April, 2015
|
+ *First Build*: 30th April, 2015
|
||||||
+ *Last Build*: 30th May, 2018
|
+ *Last Build*: 31st May, 2018
|
||||||
+ *Version*: 2.8.0
|
+ *Version*: 2.8.0
|
||||||
+ *Copyright*: Copyright (C) 2015 - 2018 Vast Development Method. All rights reserved.
|
+ *Copyright*: Copyright (C) 2015 - 2018 Vast Development Method. All rights reserved.
|
||||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||||
+ *Line count*: **185584**
|
+ *Line count*: **185591**
|
||||||
+ *Field count*: **1054**
|
+ *Field count*: **1054**
|
||||||
+ *File count*: **1236**
|
+ *File count*: **1236**
|
||||||
+ *Folder count*: **197**
|
+ *Folder count*: **197**
|
||||||
|
@ -125,11 +125,11 @@ Watch the [proposed development workflow](https://vdm.bz/proposed-development-wo
|
|||||||
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||||
+ *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder)
|
+ *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder)
|
||||||
+ *First Build*: 30th April, 2015
|
+ *First Build*: 30th April, 2015
|
||||||
+ *Last Build*: 30th May, 2018
|
+ *Last Build*: 31st May, 2018
|
||||||
+ *Version*: 2.8.0
|
+ *Version*: 2.8.0
|
||||||
+ *Copyright*: Copyright (C) 2015 - 2018 Vast Development Method. All rights reserved.
|
+ *Copyright*: Copyright (C) 2015 - 2018 Vast Development Method. All rights reserved.
|
||||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||||
+ *Line count*: **185584**
|
+ *Line count*: **185591**
|
||||||
+ *Field count*: **1054**
|
+ *Field count*: **1054**
|
||||||
+ *File count*: **1236**
|
+ *File count*: **1236**
|
||||||
+ *Folder count*: **197**
|
+ *Folder count*: **197**
|
||||||
|
@ -191,8 +191,7 @@ class Interpretation extends Fields
|
|||||||
*
|
*
|
||||||
* @param int $nr The line number
|
* @param int $nr The line number
|
||||||
*
|
*
|
||||||
* @return void
|
* @return string
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
private function setLine($nr)
|
private function setLine($nr)
|
||||||
{
|
{
|
||||||
@ -254,7 +253,10 @@ class Interpretation extends Fields
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $view
|
* set Lock License Per
|
||||||
|
*
|
||||||
|
* @param type $view
|
||||||
|
* @param type $target
|
||||||
*/
|
*/
|
||||||
public function setLockLicensePer(&$view, $target)
|
public function setLockLicensePer(&$view, $target)
|
||||||
{
|
{
|
||||||
@ -280,6 +282,14 @@ class Interpretation extends Fields
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check statment license locked
|
||||||
|
*
|
||||||
|
* @param type $boolMethod
|
||||||
|
* @param type $thIIS
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function checkStatmentLicenseLocked($boolMethod, $thIIS = '$this')
|
public function checkStatmentLicenseLocked($boolMethod, $thIIS = '$this')
|
||||||
{
|
{
|
||||||
$statment[] = PHP_EOL . $this->_t(2) . "if (!" . $thIIS . "->" . $boolMethod . "())";
|
$statment[] = PHP_EOL . $this->_t(2) . "if (!" . $thIIS . "->" . $boolMethod . "())";
|
||||||
@ -293,6 +303,14 @@ class Interpretation extends Fields
|
|||||||
return implode(PHP_EOL, $statment);
|
return implode(PHP_EOL, $statment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set Bool License Lock
|
||||||
|
*
|
||||||
|
* @param type $boolMethod
|
||||||
|
* @param type $globalbool
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function setBoolLicenseLock($boolMethod, $globalbool)
|
public function setBoolLicenseLock($boolMethod, $globalbool)
|
||||||
{
|
{
|
||||||
$bool[] = PHP_EOL . PHP_EOL . $this->_t(1) . "/**";
|
$bool[] = PHP_EOL . PHP_EOL . $this->_t(1) . "/**";
|
||||||
@ -325,6 +343,14 @@ class Interpretation extends Fields
|
|||||||
return implode(PHP_EOL, $bool);
|
return implode(PHP_EOL, $bool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set Helper License Lock
|
||||||
|
*
|
||||||
|
* @param type $_VDM
|
||||||
|
* @param type $target
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function setHelperLicenseLock($_VDM, $target)
|
public function setHelperLicenseLock($_VDM, $target)
|
||||||
{
|
{
|
||||||
$helper[] = PHP_EOL . PHP_EOL . $this->_t(1) . "/**";
|
$helper[] = PHP_EOL . PHP_EOL . $this->_t(1) . "/**";
|
||||||
@ -348,6 +374,13 @@ class Interpretation extends Fields
|
|||||||
return implode(PHP_EOL, $helper);
|
return implode(PHP_EOL, $helper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set Init License Lock
|
||||||
|
*
|
||||||
|
* @param type $_VDM
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function setInitLicenseLock($_VDM)
|
public function setInitLicenseLock($_VDM)
|
||||||
{
|
{
|
||||||
$init[] = PHP_EOL . "if (!defined('" . $_VDM . "'))";
|
$init[] = PHP_EOL . "if (!defined('" . $_VDM . "'))";
|
||||||
@ -362,6 +395,11 @@ class Interpretation extends Fields
|
|||||||
return implode(PHP_EOL, $init);
|
return implode(PHP_EOL, $init);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set WHMCS Cryption
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function setWHMCSCryption()
|
public function setWHMCSCryption()
|
||||||
{
|
{
|
||||||
// make sure we have the correct file
|
// make sure we have the correct file
|
||||||
@ -549,6 +587,11 @@ class Interpretation extends Fields
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set Get Crypt Key
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function setGetCryptKey()
|
public function setGetCryptKey()
|
||||||
{
|
{
|
||||||
// ENCRYPT_FILE
|
// ENCRYPT_FILE
|
||||||
@ -714,6 +757,9 @@ class Interpretation extends Fields
|
|||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set Version Controller
|
||||||
|
*/
|
||||||
public function setVersionController()
|
public function setVersionController()
|
||||||
{
|
{
|
||||||
if (ComponentbuilderHelper::checkArray($this->componentData->version_update) || ComponentbuilderHelper::checkArray($this->updateSQLBuilder))
|
if (ComponentbuilderHelper::checkArray($this->componentData->version_update) || ComponentbuilderHelper::checkArray($this->updateSQLBuilder))
|
||||||
@ -821,6 +867,12 @@ class Interpretation extends Fields
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set Dynamic Update XML SQL
|
||||||
|
*
|
||||||
|
* @param array $updateXML
|
||||||
|
* @param bool $current_version
|
||||||
|
*/
|
||||||
public function setDynamicUpdateXMLSQL(&$updateXML, $current_version = false)
|
public function setDynamicUpdateXMLSQL(&$updateXML, $current_version = false)
|
||||||
{
|
{
|
||||||
// start building the update
|
// start building the update
|
||||||
@ -864,6 +916,13 @@ class Interpretation extends Fields
|
|||||||
$this->setUpdateXMLSQL($update_, $updateXML, $addDynamicSQL);
|
$this->setUpdateXMLSQL($update_, $updateXML, $addDynamicSQL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* set Update XML SQL
|
||||||
|
*
|
||||||
|
* @param array $update
|
||||||
|
* @param array $updateXML
|
||||||
|
* @param boolean $addDynamicSQL
|
||||||
|
*/
|
||||||
public function setUpdateXMLSQL(&$update, &$updateXML, &$addDynamicSQL)
|
public function setUpdateXMLSQL(&$update, &$updateXML, &$addDynamicSQL)
|
||||||
{
|
{
|
||||||
// ensure version naming is correct
|
// ensure version naming is correct
|
||||||
@ -931,6 +990,11 @@ class Interpretation extends Fields
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* no Help
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public function noHelp()
|
public function noHelp()
|
||||||
{
|
{
|
||||||
$help = array();
|
$help = array();
|
||||||
@ -6496,23 +6560,36 @@ class Interpretation extends Fields
|
|||||||
{
|
{
|
||||||
// set the fields array
|
// set the fields array
|
||||||
$field = array();
|
$field = array();
|
||||||
|
// use custom code
|
||||||
|
$useCustomCode = (isset($this->fieldRelations[$viewName_list][(int) $item['id']]['join_type']) && $this->fieldRelations[$viewName_list][(int) $item['id']]['join_type'] == 2 &&
|
||||||
|
isset($this->fieldRelations[$viewName_list][(int) $item['id']]['set']) && ComponentbuilderHelper::checkString($this->fieldRelations[$viewName_list][(int) $item['id']]['set']));
|
||||||
// load the main list view field
|
// load the main list view field
|
||||||
$field['[field=' . (int) $item['id'] . ']'] = $this->getListItem($item, $viewName_single, $viewName_list, $itemClass, $doNotEscape, $coreLoad, $core, false, $ref, $escape, $user, $refview);
|
$field['[field=' . (int) $item['id'] . ']'] = $this->getListItem($item, $viewName_single, $viewName_list, $itemClass, $doNotEscape, $coreLoad, $core, false, $ref, $escape, $user, $refview);
|
||||||
|
// code name
|
||||||
|
if (isset($item['code']) && $useCustomCode)
|
||||||
|
{
|
||||||
|
$field['$item->{' . (int) $item['id'] . '}'] = '$item->' . $item['code'];
|
||||||
|
}
|
||||||
// now load the relations
|
// now load the relations
|
||||||
foreach ($this->fieldRelations[$viewName_list][(int) $item['id']]['joinfields'] as $join)
|
foreach ($this->fieldRelations[$viewName_list][(int) $item['id']]['joinfields'] as $join)
|
||||||
{
|
{
|
||||||
$blankClass = '';
|
$blankClass = '';
|
||||||
if (isset($this->listJoinBuilder[$viewName_list]) && isset($this->listJoinBuilder[$viewName_list][(int) $join]))
|
if (isset($this->listJoinBuilder[$viewName_list]) && isset($this->listJoinBuilder[$viewName_list][(int) $join]))
|
||||||
{
|
{
|
||||||
|
// code block
|
||||||
$field['[field=' . (int) $join . ']'] = $this->getListItem($this->listJoinBuilder[$viewName_list][(int) $join], $viewName_single, $viewName_list, $blankClass, $doNotEscape, $coreLoad, $core, false, $ref, $escape, $user, $refview);
|
$field['[field=' . (int) $join . ']'] = $this->getListItem($this->listJoinBuilder[$viewName_list][(int) $join], $viewName_single, $viewName_list, $blankClass, $doNotEscape, $coreLoad, $core, false, $ref, $escape, $user, $refview);
|
||||||
|
// code name
|
||||||
|
if (isset($this->listJoinBuilder[$viewName_list][(int) $join]['code']) && $useCustomCode)
|
||||||
|
{
|
||||||
|
$field['$item->{' . (int) $join . '}'] = '$item->' . $this->listJoinBuilder[$viewName_list][(int) $join]['code'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// join based on join type
|
// join based on join type
|
||||||
if (isset($this->fieldRelations[$viewName_list][(int) $item['id']]['join_type']) && $this->fieldRelations[$viewName_list][(int) $item['id']]['join_type'] == 2 &&
|
if ($useCustomCode)
|
||||||
isset($this->fieldRelations[$viewName_list][(int) $item['id']]['set']) && ComponentbuilderHelper::checkString($this->fieldRelations[$viewName_list][(int) $item['id']]['set']))
|
|
||||||
{
|
{
|
||||||
// custom code
|
// custom code
|
||||||
return PHP_EOL . $this->_t(3) . "<div>" . str_replace(array_keys($field), array_values($field), $this->fieldRelations[$viewName_list][(int) $item['id']]['set']) . PHP_EOL . $this->_t(3) . "</div>";
|
return PHP_EOL . $this->_t(3) . "<div>" . $this->setPlaceholders(str_replace(array_keys($field), array_values($field), $this->fieldRelations[$viewName_list][(int) $item['id']]['set']), $this->placeholders) . PHP_EOL . $this->_t(3) . "</div>";
|
||||||
}
|
}
|
||||||
elseif (isset($this->fieldRelations[$viewName_list][(int) $item['id']]['set']) && ComponentbuilderHelper::checkString($this->fieldRelations[$viewName_list][(int) $item['id']]['set']))
|
elseif (isset($this->fieldRelations[$viewName_list][(int) $item['id']]['set']) && ComponentbuilderHelper::checkString($this->fieldRelations[$viewName_list][(int) $item['id']]['set']))
|
||||||
{
|
{
|
||||||
|
@ -6796,8 +6796,8 @@ 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_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_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_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_SHARE_THE_SNIPPETS_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_HELP="You do not have permission to share the snippets, please contact your system administrator for more help."
|
COM_COMPONENTBUILDER_YOU_DO_NOT_HAVE_PERMISSION_TO_SHARE_THE_SNIPPETS_PLEASE_CONTACT_YOUR_SYSTEM_ADMINISTRATOR_FOR_MORE_HELP="You do not have permission to share the snippets, please contact your system administrator for more help."
|
||||||
COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_FIFTY_S_IS_CONSIDERED_BAD_PRACTICE="You have %s %s. Adding more then 50 %s is considered bad practice."
|
COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_S_S_IS_CONSIDERED_BAD_PRACTICE="You have %s %s. Adding more then %s %s is considered bad practice."
|
||||||
COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_FIFTY_S_IS_CONSIDERED_BAD_PRACTICE_YOUR_S_PAGE_LOAD_IN_JCB_WILL_SLOWDOWN_YOU_SHOULD_CONSIDER_DECOUPLING_SOME_OF_THESE_S="You have %s %s. Adding more then 50 %s is considered bad practice. Your %s page load in JCB will slowdown. You should consider decoupling some of these %s."
|
COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_S_S_IS_CONSIDERED_BAD_PRACTICE_YOUR_S_PAGE_LOAD_IN_JCB_WILL_SLOWDOWN_YOU_SHOULD_CONSIDER_DECOUPLING_SOME_OF_THESE_S="You have %s %s. Adding more then %s %s is considered bad practice. Your %s page load in JCB will slowdown. You should consider decoupling some of these %s."
|
||||||
COM_COMPONENTBUILDER_YOU_MUST_ADD_AN_UNIQUE_FUNCTION_NAME="You must add an unique function name."
|
COM_COMPONENTBUILDER_YOU_MUST_ADD_AN_UNIQUE_FUNCTION_NAME="You must add an unique function name."
|
||||||
COM_COMPONENTBUILDER_YOU_MUST_ADD_AN_UNIQUE_VALIDATION_RULE_NAME="You must add an unique validation rule name."
|
COM_COMPONENTBUILDER_YOU_MUST_ADD_AN_UNIQUE_VALIDATION_RULE_NAME="You must add an unique validation rule name."
|
||||||
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_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"
|
||||||
|
@ -233,6 +233,11 @@ class ComponentbuilderModelAjax extends JModelList
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected $rowNumbers = array(
|
||||||
|
'admin_fields_conditions' => 80,
|
||||||
|
'admin_fields' => 50
|
||||||
|
);
|
||||||
|
|
||||||
protected $buttonArray = array(
|
protected $buttonArray = array(
|
||||||
'library_config' => 'libraries_config',
|
'library_config' => 'libraries_config',
|
||||||
'library_files_folders_urls' => 'libraries_files_folders_urls',
|
'library_files_folders_urls' => 'libraries_files_folders_urls',
|
||||||
@ -702,15 +707,17 @@ class ComponentbuilderModelAjax extends JModelList
|
|||||||
$this->checkRepeatableConversion($fieldsData, $fieldName, $id, $idName);
|
$this->checkRepeatableConversion($fieldsData, $fieldName, $id, $idName);
|
||||||
// get the table
|
// get the table
|
||||||
$table = $this->getSubformTable($type, $fieldsData);
|
$table = $this->getSubformTable($type, $fieldsData);
|
||||||
|
// get row number
|
||||||
|
$number = (isset($this->rowNumbers[$type]) && $this->rowNumbers[$type]) ? $this->rowNumbers[$type] : false;
|
||||||
// set notice of bad practice
|
// set notice of bad practice
|
||||||
$notice = '';
|
$notice = '';
|
||||||
if ($idName === 'admin_view' && isset($this->rowNumber) && $this->rowNumber > 50)
|
if ($number && isset($this->rowNumber) && $this->rowNumber > $number)
|
||||||
{
|
{
|
||||||
$notice = '<div class="alert alert-warning">' . JText::sprintf('COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_FIFTY_S_IS_CONSIDERED_BAD_PRACTICE_YOUR_S_PAGE_LOAD_IN_JCB_WILL_SLOWDOWN_YOU_SHOULD_CONSIDER_DECOUPLING_SOME_OF_THESE_S', $this->rowNumber, $typeName, $typeName, $typeName, $typeName) . '</div>';
|
$notice = '<div class="alert alert-warning">' . JText::sprintf('COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_S_S_IS_CONSIDERED_BAD_PRACTICE_YOUR_S_PAGE_LOAD_IN_JCB_WILL_SLOWDOWN_YOU_SHOULD_CONSIDER_DECOUPLING_SOME_OF_THESE_S', $this->rowNumber, $typeName, $number, $typeName, $typeName, $typeName) . '</div>';
|
||||||
}
|
}
|
||||||
elseif ($idName === 'admin_view' && isset($this->rowNumber))
|
elseif ($number && isset($this->rowNumber))
|
||||||
{
|
{
|
||||||
$notice = '<div class="alert alert-info">' . JText::sprintf('COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_FIFTY_S_IS_CONSIDERED_BAD_PRACTICE', $this->rowNumber, $typeName, $typeName) . '</div>';
|
$notice = '<div class="alert alert-info">' . JText::sprintf('COM_COMPONENTBUILDER_YOU_HAVE_S_S_ADDING_MORE_THEN_S_S_IS_CONSIDERED_BAD_PRACTICE', $this->rowNumber, $typeName, $number, $typeName) . '</div>';
|
||||||
}
|
}
|
||||||
// return table
|
// return table
|
||||||
return $notice.$table;
|
return $notice.$table;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<extension type="component" version="3.2" method="upgrade">
|
<extension type="component" version="3.2" method="upgrade">
|
||||||
<name>COM_COMPONENTBUILDER</name>
|
<name>COM_COMPONENTBUILDER</name>
|
||||||
<creationDate>30th May, 2018</creationDate>
|
<creationDate>31st May, 2018</creationDate>
|
||||||
<author>Llewellyn van der Merwe</author>
|
<author>Llewellyn van der Merwe</author>
|
||||||
<authorEmail>llewellyn@joomlacomponentbuilder.com</authorEmail>
|
<authorEmail>llewellyn@joomlacomponentbuilder.com</authorEmail>
|
||||||
<authorUrl>http://www.joomlacomponentbuilder.com</authorUrl>
|
<authorUrl>http://www.joomlacomponentbuilder.com</authorUrl>
|
||||||
|
Loading…
Reference in New Issue
Block a user