Index: branches/5.2.x/core/install/upgrades.php =================================================================== diff -u -N -r14888 -r14924 --- branches/5.2.x/core/install/upgrades.php (.../upgrades.php) (revision 14888) +++ branches/5.2.x/core/install/upgrades.php (.../upgrades.php) (revision 14924) @@ -1,6 +1,6 @@ transformFieldPhrases(); + $this->moveTranslation('LA_COL_', 'LA_FLD_', 'ColumnTranslation'); } /** - * Merges column and field phrases - * - * @return void - */ - protected function transformFieldPhrases() - { - $sql = 'SELECT * - FROM ' . TABLE_PREFIX . 'Phrase - WHERE PhraseKey LIKE "LA_COL_%"'; - $column_phrases = $this->Conn->Query($sql, 'PhraseKey'); - - $sql = 'SELECT * - FROM ' . TABLE_PREFIX . 'Phrase - WHERE PhraseKey LIKE "LA_FLD_%"'; - $field_phrases = $this->Conn->Query($sql, 'PhraseKey'); - - $ml_helper =& $this->Application->recallObject('kMultiLanguageHelper'); - /* @var $ml_helper kMultiLanguageHelper */ - - $delete_ids = Array (); - $ml_helper->createFields('phrases'); - $languages = $ml_helper->getLanguages(); - - foreach ($column_phrases as $phrase_key => $phrase_info) { - $field_phrase_key = 'LA_FLD_' . substr($phrase_key, 7); - - if ( !isset($field_phrases[$field_phrase_key]) ) { - continue; - } - - $fields_hash = Array (); - - // copy column phrase main translation into field phrase column translation - foreach ($languages as $language_id) { - $fields_hash['l' . $language_id . '_ColumnTranslation'] = $phrase_info['l' . $language_id . '_Translation']; - } - - $delete_ids[] = $phrase_info['PhraseId']; - $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'Phrase', 'PhraseId = ' . $field_phrases[$field_phrase_key]['PhraseId']); - } - - // delete all column phrases, that were absorbed by field phrases - if ( $delete_ids ) { - $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Phrase - WHERE PhraseId IN (' . implode(',', $delete_ids) . ')'; - $this->Conn->Query($sql); - - - $sql = 'DELETE FROM ' . TABLE_PREFIX . 'PhraseCache'; - $this->Conn->Query($sql); - } - } - - /** * Update to 5.2.0-B1; Transform list sortings storage * * @param string $mode when called mode {before, after) @@ -1835,7 +1781,9 @@ { if ($mode == 'after') { $this->transformSortings(); - $this->transformFieldPhrases(); // because of "la_col_ItemPrefix" phrase + $this->moveTranslation('LA_COL_', 'LA_FLD_', 'ColumnTranslation'); // because of "la_col_ItemPrefix" phrase + $this->moveTranslation('LA_HINT_', 'LA_FLD_', 'HintTranslation'); + $this->moveTranslation('LA_HINT_', 'LA_CONFIG_', 'HintTranslation'); $this->createPageRevisions(); } } @@ -1898,6 +1846,72 @@ } } + /** + * Merges several phrases into one (e.g. la_col_ + la_hint_ into designated columns of la_fld_ phrases) + * + * @param string $source_prefix + * @param string $target_prefix + * @param string $db_column + * @return void + * @access protected + */ + public function moveTranslation($source_prefix, $target_prefix, $db_column) + { + $source_phrases = $this->getPhrasesByMask($source_prefix . '%'); + $target_phrases = $this->getPhrasesByMask($target_prefix . '%'); + + $ml_helper =& $this->Application->recallObject('kMultiLanguageHelper'); + /* @var $ml_helper kMultiLanguageHelper */ + + $delete_ids = Array (); + $ml_helper->createFields('phrases'); + $languages = $ml_helper->getLanguages(); + + foreach ($source_phrases as $phrase_key => $phrase_info) { + $target_phrase_key = $target_prefix . substr($phrase_key, strlen($source_prefix)); + + if ( !isset($target_phrases[$target_phrase_key]) ) { + continue; + } + + $fields_hash = Array (); + + // copy column phrase main translation into field phrase column translation + foreach ($languages as $language_id) { + $fields_hash['l' . $language_id . '_' . $db_column] = $phrase_info['l' . $language_id . '_Translation']; + } + + $delete_ids[] = $phrase_info['PhraseId']; + $this->Conn->doUpdate($fields_hash, TABLE_PREFIX . 'Phrase', 'PhraseId = ' . $target_phrases[$target_phrase_key]['PhraseId']); + } + + // delete all column phrases, that were absorbed by field phrases + if ( $delete_ids ) { + $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Phrase + WHERE PhraseId IN (' . implode(',', $delete_ids) . ')'; + $this->Conn->Query($sql); + + $sql = 'DELETE FROM ' . TABLE_PREFIX . 'PhraseCache'; + $this->Conn->Query($sql); + } + } + + /** + * Returns phrases by mask + * + * @param string $mask + * @return Array + * @access protected + */ + protected function getPhrasesByMask($mask) + { + $sql = 'SELECT * + FROM ' . TABLE_PREFIX . 'Phrase + WHERE PhraseKey LIKE ' . $this->Conn->qstr($mask); + + return $this->Conn->Query($sql, 'PhraseKey'); + } + protected function createPageRevisions() { $sql = 'SELECT DISTINCT PageId