PMC-572
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user