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