This commit is contained in:
Julio Cesar Laura Avendaño
2019-04-12 14:22:52 -04:00
parent 27e7f88c46
commit a3a88649bd

View File

@@ -3625,59 +3625,36 @@ class WorkspaceTools
} }
/** /**
* Migrate this workspace table Content. * Generate update rows from Content sentence
* *
* @param $className * @param string $tableName
* @param $fields * @param array $fields
* @param mixed|string $lang * @param string $lang
* @throws Exception *
* @return string
*/ */
public function migrateContentWorkspace($className, $fields, $lang = SYS_LANG) public function generateUpdateFromContent($tableName, array $fields, $lang = SYS_LANG)
{ {
try { $sql = "UPDATE " . $tableName . " AS T";
$this->initPropel(true); $i = 0;
$fieldUidName = $fields['uid']; foreach ($fields['fields'] as $field) {
$oCriteria = new Criteria(); $i++;
$oCriteria->clearSelectColumns(); $tableAlias = "C" . $i;
$oCriteria->addAsColumn($fieldUidName, ContentPeer::CON_ID); $sql .= " LEFT JOIN CONTENT " . $tableAlias . " ON (";
$oCriteria->addSelectColumn(ContentPeer::CON_PARENT); $sql .= $tableAlias . ".CON_CATEGORY = '" . $field . "' AND ";
$oCriteria->addSelectColumn(ContentPeer::CON_CATEGORY); $sql .= $tableAlias . ".CON_ID = T." . $fields['uid'] . " AND ";
$oCriteria->addSelectColumn(ContentPeer::CON_VALUE); $sql .= $tableAlias . ".CON_LANG = '" . $lang . "')";
$oCriteria->add(ContentPeer::CON_CATEGORY, $fields['fields'], Criteria::IN);
$oCriteria->add(ContentPeer::CON_LANG, $lang);
$oDataset = ContentPeer::doSelectRS($oCriteria);
$oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$methods = $fields['methods'];
while ($oDataset->next()) {
$row = $oDataset->getRow();
$fieldName = $row['CON_CATEGORY'];
$fieldName = isset($fields['alias']) && isset($fields['alias'][$fieldName]) ? $fields['alias'][$fieldName] : $fieldName;
unset($row['CON_CATEGORY']);
$row[$fieldName] = $row['CON_VALUE'];
unset($row['CON_VALUE']);
$oTable = new $className();
$that = array($oTable, $methods['exists']);
$params = array($row[$fieldUidName]);
if (isset($row['CON_PARENT']) && $row['CON_PARENT'] != '') {
array_push($params, $row['CON_PARENT']);
$fieldName = isset($fields['alias']) && isset($fields['alias']['CON_PARENT']) ? $fields['alias']['CON_PARENT'] : 'CON_PARENT';
$row[$fieldName] = $row['CON_PARENT'];
}
unset($row['CON_PARENT']);
if (call_user_func_array($that, $params)) {
if (isset($methods['update'])) {
$fn = $methods['update'];
$fn($row);
} else {
$oTable->update($row);
}
}
}
$classNamePeer = class_exists($className . 'Peer') ? $className . 'Peer' : $fields['peer'];
CLI::logging("|--> Add content data in table " . $classNamePeer::TABLE_NAME . "\n");
} catch (Exception $e) {
throw ($e);
} }
$sql .= ' SET ';
$i = 0;
foreach ($fields['fields'] as $field) {
$i++;
$tableAlias = "C" . $i;
$fieldName = !empty($fields['alias'][$field]) ? $fields['alias'][$field] : $field;
$sql .= $fieldName . " = " . $tableAlias . ".CON_VALUE, ";
}
$sql = rtrim($sql, ', ');
return $sql;
} }
/** /**
@@ -3687,6 +3664,8 @@ class WorkspaceTools
* @param array $blackList * @param array $blackList
* *
* @return array * @return array
*
* @throws Exception
*/ */
public function migrateContentRun($lang = SYS_LANG, $blackList = []) public function migrateContentRun($lang = SYS_LANG, $blackList = [])
{ {
@@ -3694,13 +3673,40 @@ class WorkspaceTools
define('MEMCACHED_ENABLED', false); define('MEMCACHED_ENABLED', false);
} }
$content = $this->getListContentMigrateTable(); $content = $this->getListContentMigrateTable();
$contentQueries = [];
foreach ($content as $className => $fields) { foreach ($content as $className => $fields) {
if (!in_array($className, $blackList)) { if (!in_array($className, $blackList)) {
$this->migrateContentWorkspace($className, $fields, $lang); // Build class peer name
if (class_exists($className . 'Peer')) {
$classNamePeer = $className . 'Peer';
} else {
$classNamePeer = $fields['peer'];
}
// Build the query
$query = $this->generateUpdateFromContent($classNamePeer::TABLE_NAME, $fields, $lang);
// Instantiate the class to execute the query in background
$contentQueries[] = new RunProcessUpgradeQuery($this->name, $query);
// Add class to the control array
$blackList[] = $className; $blackList[] = $className;
} }
} }
// Run queries in multiple threads
$processesManager = new ProcessesManager($contentQueries);
$processesManager->run();
// If exists an error throw an exception
if (!empty($processesManager->getErrors())) {
$errorMessage = '';
foreach ($processesManager->getErrors() as $error) {
$errorMessage .= $error['rawAnswer'] . PHP_EOL;
}
throw new Exception($errorMessage);
}
return $blackList; return $blackList;
} }