BUG 7413 "Problema al importar PMtables" Solved
- some issues for a broken import feature - the table name issue fixed for this version - secure data import was added
This commit is contained in:
@@ -52,10 +52,15 @@ class PmTable
|
|||||||
private $dbConfig;
|
private $dbConfig;
|
||||||
private $db;
|
private $db;
|
||||||
|
|
||||||
function __construct($tableName)
|
private $alterTable = true;
|
||||||
|
|
||||||
|
function __construct($tableName = null)
|
||||||
{
|
{
|
||||||
|
if (isset($tableName)) {
|
||||||
$this->tableName = $tableName;
|
$this->tableName = $tableName;
|
||||||
$this->className = $this->toCamelCase($tableName);
|
$this->className = $this->toCamelCase($tableName);
|
||||||
|
}
|
||||||
|
|
||||||
$this->dbConfig = new StdClass();
|
$this->dbConfig = new StdClass();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,6 +152,11 @@ class PmTable
|
|||||||
return $this->dbConfig;
|
return $this->dbConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setAlterTable($value)
|
||||||
|
{
|
||||||
|
$this->alterTable = $value;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build the pmTable with all dependencies
|
* Build the pmTable with all dependencies
|
||||||
*/
|
*/
|
||||||
@@ -155,15 +165,28 @@ class PmTable
|
|||||||
$this->prepare();
|
$this->prepare();
|
||||||
$this->preparePropelIniFile();
|
$this->preparePropelIniFile();
|
||||||
$this->buildSchema();
|
$this->buildSchema();
|
||||||
|
|
||||||
|
if ($this->alterTable) {
|
||||||
$this->phingbuildModel();
|
$this->phingbuildModel();
|
||||||
$this->phingbuildSql();
|
$this->phingbuildSql();
|
||||||
$this->upgradeDatabase();
|
$this->upgradeDatabase();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildModelFor($dbsUid)
|
||||||
|
{
|
||||||
|
$this->setDataSource($dbsUid);
|
||||||
|
$loadSchema = false;
|
||||||
|
$this->prepare($loadSchema);
|
||||||
|
$this->phingbuildModel();
|
||||||
|
$this->phingbuildSql();
|
||||||
|
$this->upgradeDatabaseFor($this->dataSource);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prepare the pmTable env
|
* Prepare the pmTable env
|
||||||
*/
|
*/
|
||||||
function prepare()
|
function prepare($loadSchema = true)
|
||||||
{
|
{
|
||||||
//prevent execute prepare() twice or more
|
//prevent execute prepare() twice or more
|
||||||
if (is_object($this->dom)) {
|
if (is_object($this->dom)) {
|
||||||
@@ -185,6 +208,13 @@ class PmTable
|
|||||||
G::mk_dir($this->configDir);
|
G::mk_dir($this->configDir);
|
||||||
G::mk_dir($this->dataDir);
|
G::mk_dir($this->dataDir);
|
||||||
|
|
||||||
|
if ($loadSchema) {
|
||||||
|
$this->loadSchema();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function loadSchema()
|
||||||
|
{
|
||||||
$this->dom = new DOMDocument('1.0', 'utf-8');
|
$this->dom = new DOMDocument('1.0', 'utf-8');
|
||||||
$this->dom->preserveWhiteSpace = false;
|
$this->dom->preserveWhiteSpace = false;
|
||||||
$this->dom->formatOutput = true;
|
$this->dom->formatOutput = true;
|
||||||
@@ -214,6 +244,20 @@ class PmTable
|
|||||||
$tableNode->setAttribute('idMethod', 'native');
|
$tableNode->setAttribute('idMethod', 'native');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// specifying collation
|
||||||
|
switch ($this->dbConfig->adapter) {
|
||||||
|
case 'mysql':
|
||||||
|
$vendorNode = $this->dom->createElement('vendor');
|
||||||
|
$vendorNode->setAttribute('type', $this->dbConfig->adapter);
|
||||||
|
$parameterNode = $this->dom->createElement('parameter');
|
||||||
|
$parameterNode->setAttribute('name', 'Collation');
|
||||||
|
$parameterNode->setAttribute('value', 'utf8_general_ci');
|
||||||
|
$vendorNode->appendChild($parameterNode);
|
||||||
|
$tableNode->appendChild($vendorNode);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
foreach ($this->columns as $column) {
|
foreach ($this->columns as $column) {
|
||||||
|
|
||||||
// create the column node
|
// create the column node
|
||||||
@@ -423,6 +467,54 @@ class PmTable
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function upgradeDatabaseFor($dataSource)
|
||||||
|
{
|
||||||
|
$con = Propel::getConnection($dataSource);
|
||||||
|
$stmt = $con->createStatement();
|
||||||
|
$lines = file($this->dataDir . $this->dbConfig->adapter . PATH_SEP . 'schema.sql');
|
||||||
|
$previous = NULL;
|
||||||
|
|
||||||
|
foreach ($lines as $j => $line) {
|
||||||
|
$line = trim($line); // Remove comments from the script
|
||||||
|
|
||||||
|
if (strpos($line, "--") === 0) {
|
||||||
|
$line = substr($line, 0, strpos($line, "--"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($line)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strpos($line, "#") === 0) {
|
||||||
|
$line = substr($line, 0, strpos($line, "#"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (empty($line)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Concatenate the previous line, if any, with the current
|
||||||
|
if ($previous) {
|
||||||
|
$line = $previous . " " . $line;
|
||||||
|
}
|
||||||
|
$previous = NULL;
|
||||||
|
|
||||||
|
// If the current line doesnt end with ; then put this line together
|
||||||
|
// with the next one, thus supporting multi-line statements.
|
||||||
|
if (strrpos($line, ";") != strlen($line) - 1) {
|
||||||
|
$previous = $line;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$line = substr($line, 0, strrpos($line, ";"));
|
||||||
|
|
||||||
|
// execute
|
||||||
|
$stmt->executeQuery($line);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* verify if on the columns list was set a column as primary key
|
* verify if on the columns list was set a column as primary key
|
||||||
* @return boolean to affirm if was defined a column as pk.
|
* @return boolean to affirm if was defined a column as pk.
|
||||||
@@ -513,7 +605,7 @@ class PmTable
|
|||||||
'propel.php.dir' => $this->baseDir
|
'propel.php.dir' => $this->baseDir
|
||||||
);
|
);
|
||||||
|
|
||||||
self::callPhing(array($taskName), PATH_THIRDPARTY . 'propel-generator/build.xml', $options, false);
|
self::callPhing(array($taskName), PATH_THIRDPARTY . 'propel-generator/build.xml', $options, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ class AdditionalTables extends BaseAdditionalTables {
|
|||||||
$oCriteria->addSelectColumn(AdditionalTablesPeer::DBS_UID);
|
$oCriteria->addSelectColumn(AdditionalTablesPeer::DBS_UID);
|
||||||
$oCriteria->add(AdditionalTablesPeer::ADD_TAB_NAME, $name, Criteria::LIKE);
|
$oCriteria->add(AdditionalTablesPeer::ADD_TAB_NAME, $name, Criteria::LIKE);
|
||||||
|
|
||||||
$oDataset = FieldsPeer::doSelectRS($oCriteria);
|
$oDataset = AdditionalTablesPeer::doSelectRS($oCriteria);
|
||||||
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
|
||||||
|
|
||||||
$aRows = Array();
|
$aRows = Array();
|
||||||
@@ -121,7 +121,7 @@ class AdditionalTables extends BaseAdditionalTables {
|
|||||||
$aRows[] = $oDataset->getRow();
|
$aRows[] = $oDataset->getRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
return (sizeof($aRows) > 0)? $aRows: false;
|
return sizeof($aRows) > 0 ? $aRows : false;
|
||||||
}
|
}
|
||||||
catch (Exception $oError) {
|
catch (Exception $oError) {
|
||||||
throw($oError);
|
throw($oError);
|
||||||
@@ -237,7 +237,6 @@ class AdditionalTables extends BaseAdditionalTables {
|
|||||||
|
|
||||||
function deleteAll($id)
|
function deleteAll($id)
|
||||||
{
|
{
|
||||||
try{
|
|
||||||
//deleting pm table
|
//deleting pm table
|
||||||
$additionalTable = AdditionalTables::load($id);
|
$additionalTable = AdditionalTables::load($id);
|
||||||
AdditionalTables::remove($id);
|
AdditionalTables::remove($id);
|
||||||
@@ -253,9 +252,6 @@ class AdditionalTables extends BaseAdditionalTables {
|
|||||||
$pmTable = new pmTable($additionalTable['ADD_TAB_NAME']);
|
$pmTable = new pmTable($additionalTable['ADD_TAB_NAME']);
|
||||||
$pmTable->setDataSource($additionalTable['DBS_UID']);
|
$pmTable->setDataSource($additionalTable['DBS_UID']);
|
||||||
$pmTable->remove();
|
$pmTable->remove();
|
||||||
} catch (Exception $e) {
|
|
||||||
echo $e->getTraceAsString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPHPName($sName) {
|
function getPHPName($sName) {
|
||||||
|
|||||||
@@ -177,15 +177,15 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
/**
|
/**
|
||||||
* save pm table
|
* save pm table
|
||||||
*/
|
*/
|
||||||
public function save()
|
public function save($httpData, $alterTable = true)
|
||||||
{
|
{
|
||||||
require_once 'classes/model/AdditionalTables.php';
|
require_once 'classes/model/AdditionalTables.php';
|
||||||
require_once 'classes/model/Fields.php';
|
require_once 'classes/model/Fields.php';
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$data = $_POST;
|
$data = (array) $httpData;
|
||||||
$data['PRO_UID'] = trim($data['PRO_UID']);
|
$data['PRO_UID'] = trim($data['PRO_UID']);
|
||||||
$data['columns'] = G::json_decode(stripslashes($_POST['columns'])); //decofing data columns
|
$data['columns'] = G::json_decode(stripslashes($httpData->columns)); //decofing data columns
|
||||||
$isReportTable = $data['PRO_UID'] != '' ? true : false;
|
$isReportTable = $data['PRO_UID'] != '' ? true : false;
|
||||||
$oAdditionalTables = new AdditionalTables();
|
$oAdditionalTables = new AdditionalTables();
|
||||||
$oFields = new Fields();
|
$oFields = new Fields();
|
||||||
@@ -228,7 +228,9 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
$pmTable = new pmTable($data['REP_TAB_NAME']);
|
$pmTable = new pmTable($data['REP_TAB_NAME']);
|
||||||
$pmTable->setDataSource($data['REP_TAB_CONNECTION']);
|
$pmTable->setDataSource($data['REP_TAB_CONNECTION']);
|
||||||
$pmTable->setColumns($columns);
|
$pmTable->setColumns($columns);
|
||||||
|
$pmTable->setAlterTable($alterTable);
|
||||||
$pmTable->build();
|
$pmTable->build();
|
||||||
|
unset($pmTable);
|
||||||
$buildResult = ob_get_contents();
|
$buildResult = ob_get_contents();
|
||||||
ob_end_clean();
|
ob_end_clean();
|
||||||
|
|
||||||
@@ -244,7 +246,7 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
'ADD_TAB_TYPE' => $data['REP_TAB_TYPE'],
|
'ADD_TAB_TYPE' => $data['REP_TAB_TYPE'],
|
||||||
'ADD_TAB_GRID' => $data['REP_TAB_GRID']
|
'ADD_TAB_GRID' => $data['REP_TAB_GRID']
|
||||||
);
|
);
|
||||||
if ($data['REP_TAB_UID'] == '') { //new report table
|
if ($data['REP_TAB_UID'] == '' || (isset($httpData->forceUid) && $httpData->forceUid)) { //new report table
|
||||||
//create record
|
//create record
|
||||||
$addTabUid = $oAdditionalTables->create($addTabData);
|
$addTabUid = $oAdditionalTables->create($addTabData);
|
||||||
} else { //editing report table
|
} else { //editing report table
|
||||||
@@ -328,7 +330,7 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
}
|
}
|
||||||
$result->success = true;
|
$result->success = true;
|
||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
$result->success = false;
|
$result->success = true; // if the table does not exist just skip it and don't show messages for it
|
||||||
$result->msg = $e->getMessage();
|
$result->msg = $e->getMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,6 +388,7 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
$this->className = $table['ADD_TAB_CLASS_NAME'];
|
$this->className = $table['ADD_TAB_CLASS_NAME'];
|
||||||
$this->classPeerName = $this->className . 'Peer';
|
$this->classPeerName = $this->className . 'Peer';
|
||||||
$row = (array) $rows;
|
$row = (array) $rows;
|
||||||
|
|
||||||
$row = array_merge(array_change_key_case($row, CASE_LOWER), array_change_key_case($row, CASE_UPPER));
|
$row = array_merge(array_change_key_case($row, CASE_LOWER), array_change_key_case($row, CASE_UPPER));
|
||||||
$toSave = false;
|
$toSave = false;
|
||||||
|
|
||||||
@@ -641,8 +644,11 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
|
|
||||||
//save the file
|
//save the file
|
||||||
if ($_FILES['form']['error']['FILENAME'] == 0) {
|
if ($_FILES['form']['error']['FILENAME'] == 0) {
|
||||||
$PUBLIC_ROOT_PATH = PATH_DATA.'sites'.PATH_SEP.SYS_SYS.PATH_SEP.'public'.PATH_SEP;
|
$oAdditionalTables = new AdditionalTables();
|
||||||
|
$tableNameMap = array();
|
||||||
|
$processQueue = array();
|
||||||
|
|
||||||
|
$PUBLIC_ROOT_PATH = PATH_DATA.'sites'.PATH_SEP.SYS_SYS.PATH_SEP.'public'.PATH_SEP;
|
||||||
$filename = $_FILES['form']['name']['FILENAME'];
|
$filename = $_FILES['form']['name']['FILENAME'];
|
||||||
$tempName = $_FILES['form']['tmp_name']['FILENAME'];
|
$tempName = $_FILES['form']['tmp_name']['FILENAME'];
|
||||||
G::uploadFile($tempName, $PUBLIC_ROOT_PATH, $filename );
|
G::uploadFile($tempName, $PUBLIC_ROOT_PATH, $filename );
|
||||||
@@ -650,152 +656,117 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
$fileContent = file_get_contents($PUBLIC_ROOT_PATH.$filename);
|
$fileContent = file_get_contents($PUBLIC_ROOT_PATH.$filename);
|
||||||
|
|
||||||
if(strpos($fileContent, '-----== ProcessMaker Open Source Private Tables ==-----') === false) {
|
if(strpos($fileContent, '-----== ProcessMaker Open Source Private Tables ==-----') === false) {
|
||||||
$this->success = false;
|
throw new Exception('Invalid File');
|
||||||
$this->message = 'INVALID_FILE';
|
|
||||||
exit(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$oMap = new aTablesMap();
|
|
||||||
|
|
||||||
$fp = fopen($PUBLIC_ROOT_PATH.$filename, "rb");
|
$fp = fopen($PUBLIC_ROOT_PATH.$filename, "rb");
|
||||||
$fsData = intval(fread($fp, 9)); //reading the metadata
|
$fsData = intval(fread($fp, 9)); //reading the metadata
|
||||||
$sType = fread($fp, $fsData); //reading string $oData
|
$sType = fread($fp, $fsData); //reading string $oData
|
||||||
|
|
||||||
require_once 'classes/model/AdditionalTables.php';
|
|
||||||
$oAdditionalTables = new AdditionalTables();
|
|
||||||
require_once 'classes/model/Fields.php';
|
|
||||||
$oFields = new Fields();
|
|
||||||
|
|
||||||
while ( !feof($fp) ) {
|
while ( !feof($fp) ) {
|
||||||
switch($sType) {
|
switch($sType) {
|
||||||
case '@META':
|
case '@META':
|
||||||
$fsData = intval(fread($fp, 9));
|
$fsData = intval(fread($fp, 9));
|
||||||
$METADATA = fread($fp, $fsData);
|
$METADATA = fread($fp, $fsData);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '@SCHEMA':
|
case '@SCHEMA':
|
||||||
$fsUid = intval(fread($fp, 9));
|
$fsUid = intval(fread($fp, 9));
|
||||||
$uid = fread($fp, $fsUid);
|
$uid = fread($fp, $fsUid);
|
||||||
|
|
||||||
$fsData = intval(fread($fp, 9));
|
$fsData = intval(fread($fp, 9));
|
||||||
$schema = fread($fp, $fsData);
|
$schema = fread($fp, $fsData);
|
||||||
$contentSchema = unserialize($schema);
|
$contentSchema = unserialize($schema);
|
||||||
//var_dump($overWrite); print_r($contentSchema); continue;
|
|
||||||
|
$additionalTable = new additionalTables();
|
||||||
|
$tableExists = $additionalTable->loadByName($contentSchema['ADD_TAB_NAME']);
|
||||||
|
$tableNameMap[$contentSchema['ADD_TAB_NAME']] = $contentSchema['ADD_TAB_NAME'];
|
||||||
|
|
||||||
if ($overWrite) {
|
if ($overWrite) {
|
||||||
$aTable = new additionalTables();
|
if($tableExists !== false) {
|
||||||
try{
|
$additionalTable->deleteAll($tableExists[0]['ADD_TAB_UID']);
|
||||||
$tRecord = $aTable->load($uid);
|
|
||||||
$aTable->deleteAll($uid);
|
|
||||||
} catch(Exception $e){
|
|
||||||
$tRecord = $aTable->loadByName($contentSchema['ADD_TAB_NAME']);
|
|
||||||
if($tRecord[0]){
|
|
||||||
$aTable->deleteAll($tRecord[0]['ADD_TAB_UID']);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
else {
|
||||||
#verify if exists some table with the same name
|
if ($tableExists !== false) {// some table exists with the same name
|
||||||
$aTable = new additionalTables();
|
// renaming...
|
||||||
$tRecord = $aTable->loadByName("{$contentSchema['ADD_TAB_NAME']}%");
|
|
||||||
|
|
||||||
if($tRecord){
|
|
||||||
$tNameOld = $contentSchema['ADD_TAB_NAME'];
|
$tNameOld = $contentSchema['ADD_TAB_NAME'];
|
||||||
|
$newTableName = $contentSchema['ADD_TAB_NAME'] . '_' . date('YmdHis');
|
||||||
$contentSchema['ADD_TAB_UID'] = G::generateUniqueID();
|
$contentSchema['ADD_TAB_UID'] = G::generateUniqueID();
|
||||||
$contentSchema['ADD_TAB_NAME'] = "{$contentSchema['ADD_TAB_NAME']}".sizeof($tRecord);
|
$contentSchema['ADD_TAB_NAME'] = $newTableName;
|
||||||
$contentSchema['ADD_TAB_CLASS_NAME'] = "{$contentSchema['ADD_TAB_CLASS_NAME']}".sizeof($tRecord);
|
$contentSchema['ADD_TAB_CLASS_NAME'] = additionalTables::getPHPName($newTableName);
|
||||||
$oMap->addRoute($tNameOld, $contentSchema['ADD_TAB_NAME']);
|
//mapping the table name for posterior uses
|
||||||
|
$tableNameMap[$tNameOld] = $contentSchema['ADD_TAB_NAME'];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// validating invalid bds_uid in old tables definition -> mapped to workflow
|
// validating invalid bds_uid in old tables definition -> mapped to workflow
|
||||||
if (!$contentSchema['DBS_UID'] || $contentSchema['DBS_UID'] == '0') {
|
if (!$contentSchema['DBS_UID'] || $contentSchema['DBS_UID'] == '0' || !$contentSchema['DBS_UID']) {
|
||||||
$contentSchema['DBS_UID'] = 'workflow';
|
$contentSchema['DBS_UID'] = 'workflow';
|
||||||
}
|
}
|
||||||
|
|
||||||
$sAddTabUid = $oAdditionalTables->create(
|
$columns = array();
|
||||||
array(
|
foreach ($contentSchema['FIELDS'] as $field){
|
||||||
'ADD_TAB_UID' => $contentSchema['ADD_TAB_UID'],
|
$column = array(
|
||||||
'ADD_TAB_NAME' => $contentSchema['ADD_TAB_NAME'],
|
'uid' => '',
|
||||||
'ADD_TAB_CLASS_NAME' => $contentSchema['ADD_TAB_CLASS_NAME'],
|
'field_uid' => '',
|
||||||
'ADD_TAB_DESCRIPTION' => $contentSchema['ADD_TAB_DESCRIPTION'],
|
'field_name' => $field['FLD_NAME'],
|
||||||
'ADD_TAB_SDW_LOG_INSERT' => $contentSchema['ADD_TAB_SDW_LOG_INSERT'],
|
'field_dyn' => isset($field['FLD_DYN_NAME']) ? $field['FLD_DYN_NAME'] : '',
|
||||||
'ADD_TAB_SDW_LOG_UPDATE' => $contentSchema['ADD_TAB_SDW_LOG_UPDATE'],
|
'field_label'=> isset($field['FLD_DESCRIPTION']) ? $field['FLD_DESCRIPTION'] : '',
|
||||||
'ADD_TAB_SDW_LOG_DELETE' => $contentSchema['ADD_TAB_SDW_LOG_DELETE'],
|
'field_type' => $field['FLD_TYPE'],
|
||||||
'ADD_TAB_SDW_LOG_SELECT' => $contentSchema['ADD_TAB_SDW_LOG_SELECT'],
|
'field_size' => $field['FLD_SIZE'],
|
||||||
'ADD_TAB_SDW_MAX_LENGTH' => $contentSchema['ADD_TAB_SDW_MAX_LENGTH'],
|
'field_key' => isset($field['FLD_KEY']) ? $field['FLD_KEY'] : 0,
|
||||||
'ADD_TAB_SDW_AUTO_DELETE' => $contentSchema['ADD_TAB_SDW_AUTO_DELETE'],
|
'field_null' => isset($field['FLD_NULL']) ? $field['FLD_NULL'] : 1,
|
||||||
'ADD_TAB_PLG_UID' => $contentSchema['ADD_TAB_PLG_UID'],
|
'field_autoincrement' => isset($field['FLD_AUTO_INCREMENT']) ? $field['FLD_AUTO_INCREMENT'] : 0
|
||||||
'DBS_UID' => $contentSchema['DBS_UID'],
|
|
||||||
'PRO_UID' => isset($contentSchema['PRO_UID'])? $contentSchema['PRO_UID']: '',
|
|
||||||
'ADD_TAB_TYPE' => isset($contentSchema['ADD_TAB_TYPE'])? $contentSchema['ADD_TAB_TYPE']: '',
|
|
||||||
'ADD_TAB_GRID' => isset($contentSchema['ADD_TAB_GRID'])? $contentSchema['ADD_TAB_GRID']: '',
|
|
||||||
'ADD_TAB_TAG' => isset($contentSchema['ADD_TAB_TAG'])? $contentSchema['ADD_TAB_TAG']: '',
|
|
||||||
),
|
|
||||||
$contentSchema['FIELDS']
|
|
||||||
);
|
);
|
||||||
|
$columns[] = $column;
|
||||||
|
|
||||||
$aFields = array();
|
|
||||||
foreach( $contentSchema['FIELDS'] as $iRow => $aRow ){
|
|
||||||
unset($aRow['FLD_UID']);
|
|
||||||
$aRow['ADD_TAB_UID'] = $sAddTabUid;
|
|
||||||
$oFields->create($aRow);
|
|
||||||
$aFields[] = array(
|
|
||||||
'sType' => $contentSchema['FIELDS'][$iRow]['FLD_TYPE'],
|
|
||||||
'iSize' => $contentSchema['FIELDS'][$iRow]['FLD_SIZE'],
|
|
||||||
'sFieldName' => $contentSchema['FIELDS'][$iRow]['FLD_NAME'],
|
|
||||||
'bNull' => $contentSchema['FIELDS'][$iRow]['FLD_NULL'],
|
|
||||||
'bAI' => $contentSchema['FIELDS'][$iRow]['FLD_AUTO_INCREMENT'],
|
|
||||||
'bPrimaryKey' => $contentSchema['FIELDS'][$iRow]['FLD_KEY']
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$oAdditionalTables->createTable($contentSchema['ADD_TAB_NAME'], $contentSchema['DBS_UID'], $aFields);
|
|
||||||
|
|
||||||
for($i=1; $i <= count($contentSchema['FIELDS']); $i++){
|
|
||||||
$contentSchema['FIELDS'][$i]['FLD_NULL'] = $contentSchema['FIELDS'][$i]['FLD_NULL'] == '1' ? 'on' : '';
|
|
||||||
$contentSchema['FIELDS'][$i]['FLD_AUTO_INCREMENT'] = $contentSchema['FIELDS'][$i]['FLD_AUTO_INCREMENT'] == '1' ? 'on' : '';
|
|
||||||
$contentSchema['FIELDS'][$i]['FLD_KEY'] = $contentSchema['FIELDS'][$i]['FLD_KEY'] == '1' ? 'on' : '';
|
|
||||||
$contentSchema['FIELDS'][$i]['FLD_FOREIGN_KEY'] = $contentSchema['FIELDS'][$i]['FLD_FOREIGN_KEY'] == '1' ? 'on' : '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$oAdditionalTables->createPropelClasses($contentSchema['ADD_TAB_NAME'], $contentSchema['ADD_TAB_CLASS_NAME'], $contentSchema['FIELDS'], $sAddTabUid);
|
$tableData = new stdClass();
|
||||||
|
$tableData->REP_TAB_UID = $contentSchema['ADD_TAB_UID'];
|
||||||
|
$tableData->REP_TAB_NAME = $contentSchema['ADD_TAB_NAME'];
|
||||||
|
$tableData->REP_TAB_DSC = $contentSchema['ADD_TAB_DESCRIPTION'];
|
||||||
|
$tableData->REP_TAB_CONNECTION= $contentSchema['DBS_UID'];
|
||||||
|
$tableData->PRO_UID = isset($contentSchema['PRO_UID'])? $contentSchema['PRO_UID'] : '';
|
||||||
|
$tableData->REP_TAB_TYPE = isset($contentSchema['ADD_TAB_TYPE'])? $contentSchema['ADD_TAB_TYPE'] : '';
|
||||||
|
$tableData->REP_TAB_GRID = isset($contentSchema['ADD_TAB_GRID'])? $contentSchema['ADD_TAB_GRID'] : '';
|
||||||
|
$tableData->columns = G::json_encode($columns);
|
||||||
|
$tableData->forceUid = true;
|
||||||
|
|
||||||
$isReportTable = (isset($contentSchema['PRO_UID']) && $contentSchema['PRO_UID'] != '') ? true : false;
|
//save the table
|
||||||
if ($isReportTable) {
|
$alterTable = false;
|
||||||
$oAdditionalTables->populateReportTable($contentSchema['ADD_TAB_NAME'], $contentSchema['DBS_UID'], $contentSchema['ADD_TAB_TYPE'], $contentSchema['FIELDS'], $contentSchema['PRO_UID'], $contentSchema['ADD_TAB_GRID']);
|
if (!isset($processQueue[$contentSchema['DBS_UID']])) {
|
||||||
|
$processQueue[$contentSchema['DBS_UID']] = array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$result = $this->save($tableData, $alterTable);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '@DATA':
|
case '@DATA':
|
||||||
$fstName = intval(fread($fp, 9));
|
$fstName = intval(fread($fp, 9));
|
||||||
$tName = fread($fp, $fstName);
|
$tableName = fread($fp, $fstName);
|
||||||
$fsData = intval(fread($fp, 9));
|
$fsData = intval(fread($fp, 9));
|
||||||
|
//var_dump($fsData);
|
||||||
if ($fsData > 0) {
|
if ($fsData > 0) {
|
||||||
$data = fread($fp, $fsData);
|
$data = fread($fp, $fsData);
|
||||||
$contentData = unserialize($data);
|
$contentData = unserialize($data);
|
||||||
|
|
||||||
//var_dump($data); print_r($contentData); continue;
|
$tableName = $tableNameMap[$tableName];
|
||||||
|
|
||||||
$tName = $oMap->route($tName);
|
|
||||||
|
|
||||||
$oAdditionalTables = new AdditionalTables();
|
$oAdditionalTables = new AdditionalTables();
|
||||||
$tRecord = $oAdditionalTables->loadByName($tName);
|
$table = $oAdditionalTables->loadByName($tableName);
|
||||||
|
|
||||||
if($tRecord){
|
if($table !== false){
|
||||||
foreach($contentData as $data){
|
$processQueue[$contentSchema['DBS_UID']][] = array('id'=>$table[0]['ADD_TAB_UID'], 'records'=>$contentData);
|
||||||
unset($data['DUMMY']);
|
|
||||||
$oAdditionalTables->saveDataInTable($tRecord[0]['ADD_TAB_UID'], $data);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
$fsData = intval(fread($fp, 9));
|
$fsData = intval(fread($fp, 9));
|
||||||
if($fsData > 0){
|
if($fsData > 0){
|
||||||
$sType = fread($fp, $fsData);
|
$sType = fread($fp, $fsData);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -803,12 +774,46 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
$this->success = true;
|
$this->success = true;
|
||||||
$this->message = 'File Imported "'.$filename.'" Successfully';
|
$this->message = 'File Imported "'.$filename.'" Successfully';
|
||||||
|
|
||||||
|
////////////
|
||||||
|
G::loadClass('pmTable');
|
||||||
|
|
||||||
|
foreach ($processQueue as $dbsUid => $tableData) {
|
||||||
|
ob_start();
|
||||||
|
$pmTable = new pmTable();
|
||||||
|
$pmTable->buildModelFor($dbsUid);
|
||||||
|
$buildResult = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
if (count($tableData) > 0) {
|
||||||
|
foreach ($tableData as $rows) {
|
||||||
|
foreach ($rows['records'] as $row) {
|
||||||
|
$data = new StdClass();
|
||||||
|
$data->id = $rows['id'];
|
||||||
|
$data->rows = G::json_encode($row);
|
||||||
|
$this->dataCreate($data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch(Exception $e){
|
}
|
||||||
$this->success = false;
|
catch(Exception $e) {
|
||||||
$this->message = $e->getMessage();
|
$buildResult = ob_get_contents();
|
||||||
|
ob_end_clean();
|
||||||
|
$result->success = false;
|
||||||
|
|
||||||
|
// if it is a propel exception message
|
||||||
|
if (preg_match('/(.*)\s\[(.*):\s(.*)\]\s\[(.*):\s(.*)\]/', $e->getMessage(), $match)) {
|
||||||
|
$result->msg = $match[3];
|
||||||
|
$result->type = ucfirst($pmTable->getDbConfig()->adapter);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$result->msg = $e->getMessage();
|
||||||
|
$result->type = G::loadTranslation('ID_EXCEPTION');
|
||||||
|
}
|
||||||
|
|
||||||
|
$result->trace = $e->getTraceAsString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1351,21 +1356,3 @@ class pmTablesProxy extends HttpProxyController
|
|||||||
return $aFields;
|
return $aFields;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
class aTablesMap{
|
|
||||||
var $aMap;
|
|
||||||
|
|
||||||
function route($uid){
|
|
||||||
if( isset($this->aMap[$uid]) ){
|
|
||||||
return $this->aMap[$uid];
|
|
||||||
} else {
|
|
||||||
return $uid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function addRoute($item, $equal){
|
|
||||||
$this->aMap[$item] = $equal;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user