Project

General

Profile

Bug #23991 ยป 16310.patch

Administrator Admin, 2010-11-15 20:31

View differences:

class.tx_coreupdates_migrateworkspaces.php (working copy)
*/
public function checkForUpdate(&$description) {
$result = FALSE;
$description = 'Migrates the old hardcoded draft workspace to be a real workspace element and update workspace owner fields to support either users or groups.';
$description = 'Migrates the old hardcoded draft workspace to be a real workspace element,
updates workspace owner fields to support either users or groups and
migrates the old-style workspaces with fixed workflow to a custom-stage workflow';
// TYPO3 version 4.5 and above
if ($this->versionNumber >= 4005000) {
$tables = array_keys($GLOBALS['TYPO3_DB']->admin_get_tables());
// sys_workspace table might not exists if version extension was never installed
if (in_array('sys_workspace', $tables)) {
$result = $this->isOldStyleAdminFieldUsed();
$wsCount = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows('uid', 'sys_workspace', '');
$result = $wsCount > 0;
}
if (!$result) {
......
// There's no TCA available yet
$this->includeTCA();
// install version extension (especially when updating from very old TYPO3 versions
$this->installExtensions(array('version'));
// install version and workspace extension (especially when updating from very old TYPO3 versions
$this->installExtensions(array('version', 'workspaces'));
// migrate all workspaces to support groups and be_users
if ($this->isOldStyleAdminFieldUsed()) {
......
}
}
$workspaces = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('uid, reviewers', 'sys_workspace', '', '', '', '1');
$this->sqlQueries[] = $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery;
$label = 'Review';
foreach($workspaces as $workspace) {
$where = 'parentid=' . $workspace['uid'] . ' AND parenttable="sys_workspace" AND deleted=0';
$stageCount = $GLOBALS['TYPO3_DB']->exec_SELECTcountRows('uid', 'sys_workspace_stage', $where);
$this->sqlQueries[] = $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery;
if ($stageCount == 0) {
// Find all workspaces and add "review" stage record
// Add review users and groups to the new IRRE record
$reviewStageId = $this->createReviewStageForWorkspace($workspace['uid'], $label, $workspace['reviewers']);
// Update all "review" state records in the database to point to the new state
$this->migrateOldRecordsToStage($workspace['uid'], 1, $reviewStageId);
// Update all "ready to publish" records in the database to point to the new ready to publish state
$this->migrateOldRecordsToStage($workspace['uid'], 10, -99);
} else {
// this workspace has stages already at this point we might break something if we continue
}
}
if (is_array($this->sqlQueries) && is_array($databaseQueries)) {
$databaseQueries = array_merge($databaseQueries, $this->sqlQueries);
}
......
}
/**
* Create a new stage for the given workspace
*
* @param integer Workspace ID
* @param string The label of the new stage
* @param string The users or groups which are authorized for that stage
* @return integer The id of the new stage
*/
protected function createReviewStageForWorkspace($workspaceId, $stageLabel, $stageMembers) {
$data = array(
'parentid' => $workspaceId,
'parenttable' => 'sys_workspace',
'title' => $stageLabel,
'responsible_persons' => $stageMembers
);
$GLOBALS['TYPO3_DB']->exec_INSERTquery('sys_workspace_stage', $data);
$this->sqlQueries[] = $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery;
return $GLOBALS['TYPO3_DB']->sql_insert_id();
}
/**
* Updates the stages of placeholder records within the given workspace from $oldId to $newId
*
* @param integer Workspace ID
* @param integer Old stage od
* @param integer New stage od
* @return void
*/
protected function migrateOldRecordsToStage($workspaceId, $oldStageId, $newStageId) {
$tables = array_keys($GLOBALS['TCA']);
$where = 't3ver_wsid = ' . intval($workspaceId) . ' AND t3ver_stage = ' . intval($oldStageId) . ' AND pid = -1';
$values = array(
't3ver_stage' => intval($newStageId)
);
foreach($tables as $table) {
$versioningVer = t3lib_div::intInRange($GLOBALS['TCA'][$table]['ctrl']['versioningWS'], 0, 2, 0);
if ($versioningVer > 0) {
$GLOBALS['TYPO3_DB']->exec_UPDATEquery($table, $where, $values);
$this->sqlQueries[] = $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery;
}
}
}
/**
* Check if there's any workspace which doesn't support the new admin-field format yet
* @return bool
*/
    (1-1/1)