forked from joomla/Component-Builder
Added the table and field validation to avoid import breakages due to new table or fields not found in the older local install of JCB.
This commit is contained in:
parent
9fd59f2353
commit
3a4a0e613b
@ -125,11 +125,11 @@ Watch the [proposed development workflow](https://vdm.bz/proposed-development-wo
|
||||
+ *Author*: [Llewellyn van der Merwe](mailto:llewellyn@joomlacomponentbuilder.com)
|
||||
+ *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 6th July, 2018
|
||||
+ *Last Build*: 7th July, 2018
|
||||
+ *Version*: 2.8.2
|
||||
+ *Copyright*: Copyright (C) 2015 - 2018 Vast Development Method. All rights reserved.
|
||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||
+ *Line count*: **186219**
|
||||
+ *Line count*: **186287**
|
||||
+ *Field count*: **1058**
|
||||
+ *File count*: **1238**
|
||||
+ *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)
|
||||
+ *Name*: [Component Builder](https://github.com/vdm-io/Joomla-Component-Builder)
|
||||
+ *First Build*: 30th April, 2015
|
||||
+ *Last Build*: 6th July, 2018
|
||||
+ *Last Build*: 7th July, 2018
|
||||
+ *Version*: 2.8.2
|
||||
+ *Copyright*: Copyright (C) 2015 - 2018 Vast Development Method. All rights reserved.
|
||||
+ *License*: GNU General Public License version 2 or later; see LICENSE.txt
|
||||
+ *Line count*: **186219**
|
||||
+ *Line count*: **186287**
|
||||
+ *Field count*: **1058**
|
||||
+ *File count*: **1238**
|
||||
+ *Folder count*: **197**
|
||||
|
@ -3896,6 +3896,7 @@ COM_COMPONENTBUILDER_FIELD_ADD_JAVASCRIPT_VIEW_FOOTER_LABEL="Add JavaScript (vie
|
||||
COM_COMPONENTBUILDER_FIELD_BASESIXTY_FOUR="base64"
|
||||
COM_COMPONENTBUILDER_FIELD_BASIC_ENCRYPTION_LOCALDBKEY="Basic Encryption (local-DB-key)"
|
||||
COM_COMPONENTBUILDER_FIELD_BIGINT="BIGINT"
|
||||
COM_COMPONENTBUILDER_FIELD_BSB_NOT_FOUND_IN_LOCAL_DATABASE_TABLE_S_SO_IMPORTED_OF_ITS_VALUES_FAILED_PLEASE_UPDATE_YOUR_JCB_INSTALL_AND_TRY_AGAIN="Field <b>%s</b> not found in local database table (%s) so imported of its values failed, please update your JCB install and try again."
|
||||
COM_COMPONENTBUILDER_FIELD_CATID_DESCRIPTION="select one of the following categories"
|
||||
COM_COMPONENTBUILDER_FIELD_CATID_LABEL="Category"
|
||||
COM_COMPONENTBUILDER_FIELD_CHAR="CHAR"
|
||||
@ -6416,6 +6417,7 @@ COM_COMPONENTBUILDER_S_BEING_IMPORTED="%s Being Imported"
|
||||
COM_COMPONENTBUILDER_S_NOT_LINKED="%s Not Linked"
|
||||
COM_COMPONENTBUILDER_S_PLEASE_WAIT_THE_COMPONENT_IS_BEING_COMPILED="%s, please wait! The component is being compiled"
|
||||
COM_COMPONENTBUILDER_TAB="Tab"
|
||||
COM_COMPONENTBUILDER_TABLE_BSB_NOT_FOUND_IN_THE_LOCAL_DATABASE_SO_ITS_VALUES_COULD_NOT_BE_IMPORTED_PLEASE_UPDATE_YOUR_JCB_INSTALL_AND_TRY_AGAIN="Table <b>%s</b> not found in the local database so its values could not be imported, please update your JCB install and try again."
|
||||
COM_COMPONENTBUILDER_TARGET_BEHAVIOUR="Target Behaviour"
|
||||
COM_COMPONENTBUILDER_TARGET_FIELDS="Target Field/s"
|
||||
COM_COMPONENTBUILDER_TARGET_PATH="Target Path"
|
||||
|
@ -2117,7 +2117,7 @@ class ComponentbuilderModelAjax extends JModelList
|
||||
'php_after_delete','php_after_publish','php_ajaxmethod','php_allowedit','php_batchcopy',
|
||||
'php_batchmove','php_before_delete','php_before_publish','php_before_save','php_controller',
|
||||
'php_controller_list','php_document','php_getitem','php_getitems','php_getitems_after_all',
|
||||
'php_getlistquery','php_import','php_import_display','php_import_ext','php_import_headers',
|
||||
'php_getlistquery','php_import','php_import_display','php_import_ext','php_import_headers','php_getform',
|
||||
'php_import_save','php_import_setdata','php_model','php_model_list','php_postsavehook','php_save');
|
||||
$targets['admin_view']['view'] = 'admin_views';
|
||||
$targets['admin_view']['not_base64'] = array();
|
||||
|
@ -81,6 +81,8 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy
|
||||
protected $divergedDataMover = array();
|
||||
protected $fieldTypes = array();
|
||||
protected $isMultiple = array();
|
||||
protected $tableColumns = array();
|
||||
protected $fieldImportErrors = array();
|
||||
protected $specialValue = false;
|
||||
protected $checksum = null;
|
||||
protected $checksumURLs = array('vdm' => 'https://raw.githubusercontent.com/vdm-io/JCB-Packages/master/', 'jcb' => 'https://raw.githubusercontent.com/vdm-io/JCB-Community-Packages/master/');
|
||||
@ -702,8 +704,15 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy
|
||||
'component_custom_admin_views', 'component_updates', 'component_mysql_tweaks',
|
||||
'component_custom_admin_menus', 'component_config', 'component_dashboard', 'component_files_folders'
|
||||
);
|
||||
// get prefix
|
||||
$prefix = $this->_db->getPrefix();
|
||||
// get local tables
|
||||
$localTables = $this->_db->getTableList();
|
||||
// smart table loop
|
||||
foreach ($tables as $table)
|
||||
{
|
||||
// only continue the import if the table is available locally
|
||||
if (in_array($prefix . 'componentbuilder_' . $table, $localTables))
|
||||
{
|
||||
// save the table to database
|
||||
if (!$this->saveSmartItems($table))
|
||||
@ -711,6 +720,11 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->app->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_TABLE_BSB_NOT_FOUND_IN_THE_LOCAL_DATABASE_SO_ITS_VALUES_COULD_NOT_BE_IMPORTED_PLEASE_UPDATE_YOUR_JCB_INSTALL_AND_TRY_AGAIN', '#__componentbuilder_' . $table), 'warning');
|
||||
}
|
||||
}
|
||||
// do a after all run on all items that need it
|
||||
$this->updateAfterAll();
|
||||
// finally move the old datasets
|
||||
@ -2205,6 +2219,8 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy
|
||||
// update the subform ids
|
||||
$this->updateSubformsIDs($item, $type, $updaterT);
|
||||
}
|
||||
// remove all fields/columns not part of the current table
|
||||
$this->removingFields($type, $item);
|
||||
// final action prep
|
||||
switch($action)
|
||||
{
|
||||
@ -2236,6 +2252,56 @@ class ComponentbuilderModelImport_joomla_components extends JModelLegacy
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* remove all fields/columns not part of the current table
|
||||
*
|
||||
* @param string $type The table this item belongs to
|
||||
* @param object $item The item to clean
|
||||
*
|
||||
* @return viod
|
||||
*/
|
||||
protected function removingFields($type, &$item)
|
||||
{
|
||||
// get the columns
|
||||
$columns = $this->getTableColumns("#__componentbuilder_" . $type);
|
||||
if (ComponentbuilderHelper::checkArray($columns))
|
||||
{
|
||||
foreach ($item as $name => $value)
|
||||
{
|
||||
if (!isset($columns[$name]))
|
||||
{
|
||||
// we must show a warning that this field was not imported (but just once)
|
||||
if (!isset($this->fieldImportErrors[$type.$name]))
|
||||
{
|
||||
$this->app->enqueueMessage(JText::sprintf('COM_COMPONENTBUILDER_FIELD_BSB_NOT_FOUND_IN_LOCAL_DATABASE_TABLE_S_SO_IMPORTED_OF_ITS_VALUES_FAILED_PLEASE_UPDATE_YOUR_JCB_INSTALL_AND_TRY_AGAIN', $name, '#__componentbuilder_' . $type), 'warning');
|
||||
// make sure the message is not loaded again
|
||||
$this->fieldImportErrors[$type.$name] = true;
|
||||
}
|
||||
// remove the field & value
|
||||
unset($item->{$name});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* get table columns
|
||||
*
|
||||
* @param string $table The table
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getTableColumns($table)
|
||||
{
|
||||
// check if the columns are in memory
|
||||
if (!isset($this->tableColumns[$table]))
|
||||
{
|
||||
// get the columns
|
||||
$this->tableColumns[$table] = $this->_db->getTableColumns($table);
|
||||
}
|
||||
return $this->tableColumns[$table];
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the data that should be moved
|
||||
*
|
||||
|
@ -1607,7 +1607,7 @@ class ComponentbuilderModelJoomla_components extends JModelList
|
||||
'php_after_delete','php_after_publish','php_ajaxmethod','php_allowedit','php_batchcopy',
|
||||
'php_batchmove','php_before_delete','php_before_publish','php_before_save','php_controller',
|
||||
'php_controller_list','php_document','php_getitem','php_getitems','php_getitems_after_all',
|
||||
'php_getlistquery','php_import','php_import_display','php_import_ext','php_import_headers',
|
||||
'php_getlistquery','php_import','php_import_display','php_import_ext','php_import_headers','php_getform',
|
||||
'php_import_save','php_import_setdata','php_model','php_model_list','php_postsavehook','php_save');
|
||||
$targets['admin_view']['view'] = 'admin_views';
|
||||
$targets['admin_view']['not_base64'] = array();
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<extension type="component" version="3.2" method="upgrade">
|
||||
<name>COM_COMPONENTBUILDER</name>
|
||||
<creationDate>6th July, 2018</creationDate>
|
||||
<creationDate>7th July, 2018</creationDate>
|
||||
<author>Llewellyn van der Merwe</author>
|
||||
<authorEmail>llewellyn@joomlacomponentbuilder.com</authorEmail>
|
||||
<authorUrl>http://www.joomlacomponentbuilder.com</authorUrl>
|
||||
|
Loading…
Reference in New Issue
Block a user