1<?php 2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project 3// 4// All Rights Reserved. See copyright.txt for details and a complete list of authors. 5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. 6// $Id$ 7 8if (strpos($_SERVER["SCRIPT_NAME"], basename(__FILE__)) !== false) { 9 header("location: index.php"); 10 exit; 11} 12 13/** 14 * @param $installer 15 */ 16function pre_20110727_tracker_multilingual_convert_tiki($installer) 17{ 18 global $multilingual_tracker_content; 19 global $multilingual_tracker_content_logs; 20 $fields = $installer->table('tiki_tracker_fields'); 21 22 $multilingualFields = $fields->fetchColumn( 23 'fieldId', 24 [ 25 'isMultilingual' => 'y', 26 'type' => $fields->in(['t', 'a']), 27 ] 28 ); 29 30 $unilingualFields = $fields->fetchColumn( 31 'fieldId', 32 [ 33 'isMultilingual' => $fields->not('y'), 34 'type' => $fields->in(['t', 'a']), 35 ] 36 ); 37 38 $table = $installer->table('tiki_tracker_item_fields'); 39 40 // Clean up data that does not match the field definition 41 $table->deleteMultiple( 42 [ 43 'fieldId' => $table->in($multilingualFields), 44 'lang' => '', 45 ] 46 ); 47 48 $table->deleteMultiple( 49 [ 50 'fieldId' => $table->in($unilingualFields), 51 'lang' => $table->not(''), 52 ] 53 ); 54 55 // Collect the data stored in the multilingual fields 56 $result = $table->fetchAll( 57 $table->all(), 58 [ 59 'lang' => $table->not(''), 60 'fieldId' => $table->in($multilingualFields), 61 ] 62 ); 63 64 $multilingual_tracker_content = []; 65 foreach ($result as $row) { 66 $itemId = $row['itemId']; 67 $fieldId = $row['fieldId']; 68 $lang = $row['lang']; 69 $value = $row['value']; 70 71 $multilingual_tracker_content[$itemId][$fieldId][$lang] = $value; 72 } 73 74 // Remove all affected data 75 foreach ($multilingual_tracker_content as $itemId => $fields) { 76 foreach ($fields as $fieldId => $data) { 77 $table->deleteMultiple( 78 [ 79 'itemId' => $itemId, 80 'fieldId' => $fieldId, 81 ] 82 ); 83 } 84 } 85 86 // Similar treatment on logs, although less corruption is expected 87 $table = $installer->table('tiki_tracker_item_field_logs'); 88 $result = $table->fetchAll($table->all(), ['lang' => $table->not(''),]); 89 $multilingual_tracker_content_logs = []; 90 91 foreach ($result as $row) { 92 $version = $row['version']; 93 $itemId = $row['itemId']; 94 $fieldId = $row['fieldId']; 95 $lang = $row['lang']; 96 $value = $row['value']; 97 98 $multilingual_tracker_content_logs[$itemId][$version][$fieldId][$lang] = $value; 99 } 100 101 $table->deleteMultiple(['lang' => $table->not(''),]); 102} 103 104/** 105 * @param $installer 106 */ 107function post_20110727_tracker_multilingual_convert_tiki($installer) 108{ 109 global $multilingual_tracker_content; 110 global $multilingual_tracker_content_logs; 111 112 // Insert back the data in a different format 113 $table = $installer->table('tiki_tracker_item_fields'); 114 foreach ($multilingual_tracker_content as $itemId => $fields) { 115 foreach ($fields as $fieldId => $data) { 116 $table->insert( 117 [ 118 'itemId' => $itemId, 119 'fieldId' => $fieldId, 120 'value' => json_encode($data), 121 ] 122 ); 123 } 124 } 125 126 $table = $installer->table('tiki_tracker_item_field_logs'); 127 foreach ($multilingual_tracker_content_logs as $itemId => $versions) { 128 foreach ($versions as $version => $fields) { 129 foreach ($fields as $fieldId => $data) { 130 $table->insert( 131 [ 132 'version' => $version, 133 'itemId' => $itemId, 134 'fieldId' => $fieldId, 135 'value' => json_encode($data), 136 ] 137 ); 138 } 139 } 140 } 141 142 $multilingual_tracker_content = null; 143 $multilingual_tracker_content_logs = null; 144} 145