You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

140 lines
4.0 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
/**
* @param $installer
*/
function pre_20110727_tracker_multilingual_convert_tiki($installer)
{
global $multilingual_tracker_content;
global $multilingual_tracker_content_logs;
$fields = $installer->table('tiki_tracker_fields');
$multilingualFields = $fields->fetchColumn(
'fieldId',
[
'isMultilingual' => 'y',
'type' => $fields->in(['t', 'a']),
]
);
$unilingualFields = $fields->fetchColumn(
'fieldId',
[
'isMultilingual' => $fields->not('y'),
'type' => $fields->in(['t', 'a']),
]
);
$table = $installer->table('tiki_tracker_item_fields');
// Clean up data that does not match the field definition
$table->deleteMultiple(
[
'fieldId' => $table->in($multilingualFields),
'lang' => '',
]
);
$table->deleteMultiple(
[
'fieldId' => $table->in($unilingualFields),
'lang' => $table->not(''),
]
);
// Collect the data stored in the multilingual fields
$result = $table->fetchAll(
$table->all(),
[
'lang' => $table->not(''),
'fieldId' => $table->in($multilingualFields),
]
);
$multilingual_tracker_content = [];
foreach ($result as $row) {
$itemId = $row['itemId'];
$fieldId = $row['fieldId'];
$lang = $row['lang'];
$value = $row['value'];
$multilingual_tracker_content[$itemId][$fieldId][$lang] = $value;
}
// Remove all affected data
foreach ($multilingual_tracker_content as $itemId => $fields) {
foreach ($fields as $fieldId => $data) {
$table->deleteMultiple(
[
'itemId' => $itemId,
'fieldId' => $fieldId,
]
);
}
}
// Similar treatment on logs, although less corruption is expected
$table = $installer->table('tiki_tracker_item_field_logs');
$result = $table->fetchAll($table->all(), ['lang' => $table->not(''),]);
$multilingual_tracker_content_logs = [];
foreach ($result as $row) {
$version = $row['version'];
$itemId = $row['itemId'];
$fieldId = $row['fieldId'];
$lang = $row['lang'];
$value = $row['value'];
$multilingual_tracker_content_logs[$itemId][$version][$fieldId][$lang] = $value;
}
$table->deleteMultiple(['lang' => $table->not(''),]);
}
/**
* @param $installer
*/
function post_20110727_tracker_multilingual_convert_tiki($installer)
{
global $multilingual_tracker_content;
global $multilingual_tracker_content_logs;
// Insert back the data in a different format
$table = $installer->table('tiki_tracker_item_fields');
foreach ($multilingual_tracker_content as $itemId => $fields) {
foreach ($fields as $fieldId => $data) {
$table->insert(
[
'itemId' => $itemId,
'fieldId' => $fieldId,
'value' => json_encode($data),
]
);
}
}
$table = $installer->table('tiki_tracker_item_field_logs');
foreach ($multilingual_tracker_content_logs as $itemId => $versions) {
foreach ($versions as $version => $fields) {
foreach ($fields as $fieldId => $data) {
$table->insert(
[
'version' => $version,
'itemId' => $itemId,
'fieldId' => $fieldId,
'value' => json_encode($data),
]
);
}
}
}
$multilingual_tracker_content = null;
$multilingual_tracker_content_logs = null;
}