blob: 8ba828c914fef909bda38d2d1d6320c63b1f974b [file] [log] [blame]
gobrien1a8e02f2008-01-30 01:46:26 +00001<?php
2/*******************************************************************************
3 * Copyright (c) 2008 Eclipse Foundation and others.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Eclipse Public License v1.0
6 * which accompanies this distribution, and is available at
7 * http://www.eclipse.org/legal/epl-v10.html
8 *
9 * Contributors:
10 * Eclipse Foundation - Initial API and implementation
droy133e7462008-05-13 17:37:24 +000011 * Motoki MORT mori-m@mxa.nes.nec.co.jp - patch, bug 227366
kitlo9c7c62a2008-10-05 16:05:19 +000012 * Kit Lo (IBM) - patch, bug 217339, generate pseudo translations language packs
13 * Kit Lo (IBM) - patch, bug 234430, need language packs by means of other than update site
kitlo7f522672008-10-21 14:15:54 +000014 * Kit Lo (IBM) - patch, bug 251536, newline char missing after copyright comment on first line
kitlo1173dbd2008-10-21 15:58:36 +000015 * Kit Lo (IBM) - patch, bug 238580, language packs should not include strings that are marked "non-translatable"
kitlo5c9da712008-10-27 12:45:40 +000016 * Kit Lo (IBM) - patch, bug 252140, Illegal token characters in babel fragment names
atoulmedbda4272009-01-20 06:04:22 +000017 * Antoine Toulme (Intalio, Inc) - patch, bug 256430, Fragments with no host jeopardize Eclipse installation
kitlo47df0c62009-01-22 15:16:18 +000018 * Kit Lo (IBM) - patch, bug 261739, Inconsistent use of language names
kitlo8d7c0532009-03-14 23:57:49 +000019 * Sean Flanigan (Red Hat) - patch, bug 261584, wrong output folder
kitlo58d8a5a2008-09-24 20:08:44 +000020 *******************************************************************************/
gobrien1a8e02f2008-01-30 01:46:26 +000021
22/*
kitlo58d8a5a2008-09-24 20:08:44 +000023 * Documentation: http://wiki.eclipse.org/Babel_/_Server_Tool_Specification#Outputs
gobrien1a8e02f2008-01-30 01:46:26 +000024 */
atoulme3fa5f5c2009-01-20 21:26:16 +000025define("METADATA_GENERATOR_LOCATION", "/home/genie/eclipse"); // you might want to read this value from a config file. Not sure yet.
gobrienb854dcb2008-01-30 18:50:45 +000026
kitlo9c7c62a2008-10-05 16:05:19 +000027ini_set("memory_limit", "64M");
atoulme3ac52612009-02-02 13:14:39 +000028require(dirname(__FILE__) . "/../system/backend_functions.php");
atoulme12882d52009-01-26 18:39:17 +000029require(dirname(__FILE__) . "/../system/dbconnection.class.php");
kitlo399df202008-09-30 15:32:25 +000030$dbc = new DBConnection();
31$dbh = $dbc->connect();
droyb6e25c72008-07-18 13:01:13 +000032
atoulme3ac52612009-02-02 13:14:39 +000033$work_dir = $addon->callHook('babel_working');
atoulme12882d52009-01-26 18:39:17 +000034
atoulme3ac52612009-02-02 13:14:39 +000035global $addon;
36$context = $addon->callHook('context');
gobrienb854dcb2008-01-30 18:50:45 +000037
kitlo9c7c62a2008-10-05 16:05:19 +000038$work_context_dir = $work_dir . $context . "/";
39$tmp_dir = $work_context_dir . "tmp/";
40$babel_language_packs_dir = $work_context_dir . "babel_language_packs/";
41$output_dir = $work_context_dir . "output/";
atoulme3ac52612009-02-02 13:14:39 +000042$source_files_dir = dirname(__FILE__) . "/source_files_for_generate/";
gobrienb854dcb2008-01-30 18:50:45 +000043
droydfd5d622008-11-10 20:16:39 +000044# Language pack URL leader, to enable mirrors on download.eclipse.org
45$language_pack_leader = "";
46if($context == "live") {
47 $language_pack_leader = "http://www.eclipse.org/downloads/download.php?r=1&file=/technology/babel/babel_language_packs/";
48}
49
gobrien1a8e02f2008-01-30 01:46:26 +000050$leader = ". . ";
kitlo58d8a5a2008-09-24 20:08:44 +000051$timestamp = date("Ymdhis");
gobrien1a8e02f2008-01-30 01:46:26 +000052
droyd157aac2008-10-07 21:14:33 +000053$rm_command = "rm -rf $work_dir" . "*";
54exec($rm_command);
droy082976e2008-10-07 21:02:23 +000055exec("mkdir -p $output_dir");
56
kitlo9c7c62a2008-10-05 16:05:19 +000057/*
58 * Create language pack links file
59 */
60exec("mkdir -p $babel_language_packs_dir");
droydfd5d622008-11-10 20:16:39 +000061$language_pack_links_file = fopen("${babel_language_packs_dir}index.php", "w");
62fwrite($language_pack_links_file, "<?php\n\$pageTitle = \"Babel Language Packs\";\n");
droy4bef3dc2008-11-10 20:55:06 +000063fwrite($language_pack_links_file, "include \$_SERVER['DOCUMENT_ROOT'] . '/eclipse.org-common/themes/Phoenix/header.php';\n");
droydfd5d622008-11-10 20:16:39 +000064fwrite($language_pack_links_file, "?>\n");
droy03d5c462008-11-10 21:07:01 +000065fwrite($language_pack_links_file, "<div id='maincontent'><div id='midcolumn'>\n");
droydfd5d622008-11-10 20:16:39 +000066fwrite($language_pack_links_file, "\n\t<h1>Babel Language Packs</h1>" .
droyeb6d9b22008-11-24 18:42:28 +000067 "\n\t<h2>Build ID: $timestamp</h2>" .
68 "\n\t<p>The following language packs are based on the community translations entered into the <a href='http://babel.eclipse.org/'>Babel Translation Tool</a>, and may not be complete or entirely accurate. If you find missing or incorrect translations, please use the <a href='http://babel.eclipse.org/'>Babel Translation Tool</a> to update them." .
69 "\n\tAll downloads are provided under the terms and conditions of the <a href='http://www.eclipse.org/legal/epl/notice.php'>Eclipse Foundation Software User Agreement</a> unless otherwise specified.</p>");
droy0b08d292008-05-28 15:18:11 +000070
kitlo58d8a5a2008-09-24 20:08:44 +000071echo "Generating update site\n";
droyeb6d9b22008-11-24 18:42:28 +000072$train_result = mysql_query("SELECT DISTINCT train_id FROM release_train_projects ORDER BY train_id DESC");
kitlo58d8a5a2008-09-24 20:08:44 +000073while (($train_row = mysql_fetch_assoc($train_result)) != null) {
74 $train_id = $train_row['train_id'];
kitlocaeeb2c2009-03-15 01:02:49 +000075 $train_version = "3.5.0";
76 if (strcmp($train_id, "ganymede") == 0) {
77 $train_version = "3.4.0";
78 }
kitlo58d8a5a2008-09-24 20:08:44 +000079 if (strcmp($train_id, "europa") == 0) {
80 $train_version = "3.3.0";
droy0b08d292008-05-28 15:18:11 +000081 }
kitlo9c7c62a2008-10-05 16:05:19 +000082 $train_version_timestamp = "$train_version.v$timestamp";
83 $site_xml = "";
kitlo58d8a5a2008-09-24 20:08:44 +000084
85 $output_dir_for_train = $output_dir . $train_row['train_id'] . "/";
86 exec("mkdir $output_dir_for_train");
87 exec("mkdir ${output_dir_for_train}features/");
88 exec("mkdir ${output_dir_for_train}plugins/");
89
kitlo9c7c62a2008-10-05 16:05:19 +000090 fwrite($language_pack_links_file, "\n\t<h3>Release Train: $train_id</h3>\n\t<ul>");
91
kitlo47df0c62009-01-22 15:16:18 +000092 $language_result = mysql_query("SELECT language_id, iso_code, IF(locale <> '', CONCAT(CONCAT(CONCAT(name, ' ('), locale), ')'), name) as name, is_active, IF(language_id = 1,1,0) AS sorthack FROM languages ORDER BY sorthack, name ASC");
kitlo9c7c62a2008-10-05 16:05:19 +000093 while (($language_row = mysql_fetch_assoc($language_result)) != null) {
droy0b08d292008-05-28 15:18:11 +000094 $language_name = $language_row['name'];
kitlo58d8a5a2008-09-24 20:08:44 +000095 $language_iso = $language_row['iso_code'];
kitlo58d8a5a2008-09-24 20:08:44 +000096 $language_id = $language_row['language_id'];
97 if (strcmp($language_iso, "en") == 0) {
98 $language_iso = "en_AA";
99 $language_name = "Pseudo Translations";
100 }
kitlo9c7c62a2008-10-05 16:05:19 +0000101
102 $site_xml .= "\n\t<category-def name=\"Babel Language Packs in $language_name\" label=\"Babel Language Packs in $language_name\">";
103 $site_xml .= "\n\t\t<description>Babel Language Packs in $language_name</description>";
104 $site_xml .= "\n\t</category-def>";
105
106 fwrite($language_pack_links_file, "\n\t<h4>Language: $language_name</h4>\n\t<ul>");
107
kitlo58d8a5a2008-09-24 20:08:44 +0000108 echo "${leader}Generating language pack for $train_id - $language_name ($language_iso) (language_id=" . $language_id . ")\n";
109
gobrien1a8e02f2008-01-30 01:46:26 +0000110 /*
droy0b08d292008-05-28 15:18:11 +0000111 * Determine which plug-ins need to be in this language pack.
gobrien1a8e02f2008-01-30 01:46:26 +0000112 */
kitlo58d8a5a2008-09-24 20:08:44 +0000113 if (strcmp($language_iso, "en_AA") == 0) {
114 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
115 FROM files AS f
116 INNER JOIN strings AS s ON f.file_id = s.file_id
117 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
118 WHERE f.is_active
119 AND v.train_id = '" . $train_row['train_id'] . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000120 } else {
121 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
122 FROM files AS f
123 INNER JOIN strings AS s ON f.file_id = s.file_id
124 INNER JOIN translations AS t ON (s.string_id = t.string_id AND t.is_active)
125 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
126 WHERE t.language_id = " . $language_id . "
127 AND f.is_active
128 AND v.train_id = '" . $train_row['train_id'] . "'");
129 }
130
droy0b08d292008-05-28 15:18:11 +0000131 $plugins = array();
kitlo9c7c62a2008-10-05 16:05:19 +0000132 $projects = array();
133 $project_versions = array();
134 $pseudo_translations_indexes = array();
kitlo58d8a5a2008-09-24 20:08:44 +0000135 while (($file_row = mysql_fetch_assoc($file_result)) != null) {
136 # save original filename
137 $file_row['origname'] = $file_row['name'];
138
droy02c430a2008-06-02 19:42:08 +0000139 # strip useless CVS structure before the plugin name (bug 221675 c14):
140 $pattern = '/^([a-zA-Z0-9\/_-])+\/([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)(.*)\.properties$/i';
141 $replace = '${2}.${3}${4}.properties';
142 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000143
droy02c430a2008-06-02 19:42:08 +0000144 # strip source folder (bug 221675) (org.eclipse.plugin/source_folder/org/eclipse/plugin)
kitlo8d7c0532009-03-14 23:57:49 +0000145 /*
146 $pattern =
147 '/^
148 ([a-zA-Z0-9_-]+)\. # \1 org.
149 ([a-zA-Z0-9_-]+)\. # \2 eclipse.
150 ([a-zA-Z0-9\._-]+) # \3 datatools.connectivity
151 (.*)\/ # \4 \/plugins\/
152 (\1) # \5 org
153 ([\.\/]) # \6 .
154 (\2) # \7 eclipse
155 ([\.\/]) # \8 .
156 (.*) # \9 datatools.connectivity.ui\/plugin
157 \.properties # .properties
158 $/ix
159 ';
droy02c430a2008-06-02 19:42:08 +0000160 $replace = '${1}.${2}.${3}/${5}${6}${7}${8}${9}.properties';
kitlo8d7c0532009-03-14 23:57:49 +0000161 */
162
163 # fix output folder (bug 261584)
164 $pattern =
165 '/^
166 (.*\/)? # \1 optional outer directories
167 ([a-z]+) # \2 org|com|etc
168 [.] # dot
169 ([^\/]+) # \3 plugin id except org.|com.
170 \/ # slash
171 (.*?\/)? # \4 optional src\/, src\/main\/ etc
172 # \5 resource path (pathname inside resulting jar)
173 # (a) within a org|com directory, or
174 # (b) in plugin root dir.
175 (\2\/.*[.]properties| # org|com\/anything.properties
176 [^\/]+[.]properties) # eg plugin.properties
177 $/ix';
178 $replace = '$2.$3/$5';
179
droy0b08d292008-05-28 15:18:11 +0000180 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000181
182 if (preg_match("/^([a-zA-Z0-9\.]+)\/(.*)$/", $file_row['name'], $matches)) {
droy0b08d292008-05-28 15:18:11 +0000183 $file_row['subname'] = $matches[2];
184 $plugins[$matches[1]][] = $file_row;
185 } else {
186 echo " WARNING: no plug-in name found in file " . $file_row['file_id'] . " \"" . $file_row['name'] . "\"\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000187 }
droy0b08d292008-05-28 15:18:11 +0000188 }
kitlo58d8a5a2008-09-24 20:08:44 +0000189
droy0b08d292008-05-28 15:18:11 +0000190 /*
191 * Generate one plug-in fragment for each plug-in
192 */
kitlo58d8a5a2008-09-24 20:08:44 +0000193 foreach ($plugins as $plugin_name => $plugin_row) {
194 echo "${leader}${leader}Generating plug-in fragment $plugin_name\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000195 /*
droy0b08d292008-05-28 15:18:11 +0000196 * Clean and create the temporary directory
gobrien1a8e02f2008-01-30 01:46:26 +0000197 */
kitlo58d8a5a2008-09-24 20:08:44 +0000198 if (file_exists($tmp_dir)) {
199 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000200 } else {
kitlo58d8a5a2008-09-24 20:08:44 +0000201 exec("mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000202 }
gobrien1a8e02f2008-01-30 01:46:26 +0000203 /*
droy0b08d292008-05-28 15:18:11 +0000204 * Generate each *.properties file
gobrien1a8e02f2008-01-30 01:46:26 +0000205 */
droy0b08d292008-05-28 15:18:11 +0000206 foreach ($plugin_row as $properties_file) {
207 /*
208 * Convert the filename to *_lang.properties, e.g., foo_fr.properties
209 */
210 $filename = $properties_file['subname'];
kitlo58d8a5a2008-09-24 20:08:44 +0000211 if (preg_match( "/^(.*)\.properties$/", $filename, $matches)) {
droy0b08d292008-05-28 15:18:11 +0000212 $filename = $matches[1] . '_' . $language_iso . '.properties';
gobrien1a8e02f2008-01-30 01:46:26 +0000213 }
kitlo58d8a5a2008-09-24 20:08:44 +0000214 echo "${leader}${leader}${leader}Generating properties file $filename (file_id=" . $properties_file['file_id'] . ")\n";
droy0b08d292008-05-28 15:18:11 +0000215 /*
216 * Create any needed sub-directories
217 */
kitlo58d8a5a2008-09-24 20:08:44 +0000218 $fullpath = $tmp_dir . $filename;
219 preg_match("/^((.*)\/)?(.+?)$/", $fullpath, $matches);
220 exec("mkdir -p \"" . $matches[1] . "\"");
droy0b08d292008-05-28 15:18:11 +0000221 /*
222 * Start writing to the file
223 */
kitlo58d8a5a2008-09-24 20:08:44 +0000224 $outp = fopen($fullpath, "w");
kitloc42941d2008-11-20 15:33:00 +0000225 fwrite($outp, "# Copyright by many contributors; see http://babel.eclipse.org/");
kitlo58d8a5a2008-09-24 20:08:44 +0000226 if (strcmp($language_iso, "en_AA") == 0) {
227 $sql = "SELECT string_id, name, value FROM strings WHERE file_id = " . $properties_file['file_id'] .
228 " AND is_active AND non_translatable = 0";
229 $strings_result = mysql_query($sql);
230 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo9c7c62a2008-10-05 16:05:19 +0000231 fwrite($outp, "\n" . $strings_row['name'] . "=" . $properties_file['project_id'] . $strings_row['string_id'] .
232 ":" . $strings_row['value']);
kitlo58d8a5a2008-09-24 20:08:44 +0000233
234 $value = htmlspecialchars($strings_row['value']);
235 if (strlen($value) > 100) {
236 $value = substr($value, 0, 100) . " ...";
237 }
kitlo9c7c62a2008-10-05 16:05:19 +0000238 $pseudo_translations_indexes[$properties_file['project_id']][] = "\n\t\t<li><a href=\"http://babel.eclipse.org/babel/translate.php?project=" .
239 $properties_file['project_id'] . "&version=" . $properties_file['version'] . "&file=" .
240 $properties_file['origname'] . "&string=" . $strings_row['name'] . "\">" .
241 $properties_file['project_id'] . $strings_row['string_id'] . "</a>&nbsp;" . $value . "</li>";
kitlo58d8a5a2008-09-24 20:08:44 +0000242 }
243 } else {
244 $sql = "SELECT
245 strings.name AS 'key',
246 strings.value AS orig,
247 translations.value AS trans
droy0b08d292008-05-28 15:18:11 +0000248 FROM strings, translations
249 WHERE strings.string_id = translations.string_id
droy0b08d292008-05-28 15:18:11 +0000250 AND strings.file_id = " . $properties_file['file_id'] . "
kitlo1173dbd2008-10-21 15:58:36 +0000251 AND strings.is_active
252 AND strings.non_translatable = 0
253 AND translations.language_id = " . $language_id . "
kitlo58d8a5a2008-09-24 20:08:44 +0000254 AND translations.is_active";
255 $strings_result = mysql_query($sql);
256 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo7f522672008-10-21 14:15:54 +0000257 fwrite($outp, "\n" . $strings_row['key'] . "=");
kitlo9c7c62a2008-10-05 16:05:19 +0000258 # echo "${leader1S}${leaderS}${leaderS}${leaderS}" . $strings_row['key'] . "=";
kitlo58d8a5a2008-09-24 20:08:44 +0000259 if ($strings_row['trans']) {
260 # json_encode returns the string with quotes fore and aft. Need to strip them.
261 # $tr_string = preg_replace('/^"(.*)"$/', '${1}', json_encode($strings_row['trans']));
262 # $tr_string = str_replace('\\\\', '\\', $tr_string);
263 $tr_string = toescapedunicode($strings_row['trans']);
264 fwrite($outp, $tr_string);
265 # echo $strings_row['trans'];
266 } else {
267 fwrite($outp, $strings_row['orig']);
268 }
droy0b08d292008-05-28 15:18:11 +0000269 }
droy0b08d292008-05-28 15:18:11 +0000270 }
271 /*
272 * Finish the properties file
273 */
kitlo58d8a5a2008-09-24 20:08:44 +0000274 fclose($outp);
275 echo "${leader}${leader}${leader}Completed properties file $filename\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000276 }
277 /*
droy0b08d292008-05-28 15:18:11 +0000278 * Copy in the various legal files
gobrien1a8e02f2008-01-30 01:46:26 +0000279 */
kitlo9c7c62a2008-10-05 16:05:19 +0000280 exec("cp ${source_files_dir}about.html $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000281 /*
282 * Generate the META-INF/MANIFEST.MF file
283 */
284 $parent_plugin_id = $plugin_name;
kitlo9c7c62a2008-10-05 16:05:19 +0000285 $project_id = $properties_file['project_id'];
kitlo5c9da712008-10-27 12:45:40 +0000286 $fragment_id = "$parent_plugin_id.nl_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000287 $fragment_filename = "${fragment_id}_$train_version_timestamp.jar";
kitlo58d8a5a2008-09-24 20:08:44 +0000288
droy0b08d292008-05-28 15:18:11 +0000289 $plugins[$plugin_name]['id'] = $fragment_id;
kitlo9c7c62a2008-10-05 16:05:19 +0000290 $plugins[$plugin_name]['version'] = $train_version_timestamp;
kitlo58d8a5a2008-09-24 20:08:44 +0000291
292 exec("mkdir $tmp_dir/META-INF" );
293 $outp = fopen("$tmp_dir/META-INF/MANIFEST.MF", "w");
294 fwrite($outp, "Manifest-Version: 1.0\n");
295 fwrite($outp, "Bundle-Name: $parent_plugin_id $language_name NLS Support\n");
296 fwrite($outp, "Bundle-SymbolicName: $fragment_id ;singleton=true\n");
kitlo9c7c62a2008-10-05 16:05:19 +0000297 fwrite($outp, "Bundle-Version: $train_version_timestamp\n");
298 fwrite($outp, "Bundle-Vendor: Eclipse.org\n");
kitlo58d8a5a2008-09-24 20:08:44 +0000299 fwrite($outp, "Fragment-Host: $parent_plugin_id\n");
300 fclose($outp);
droy0b08d292008-05-28 15:18:11 +0000301 /*
302 * Jar up this directory as the fragment plug-in jar
303 */
kitlo58d8a5a2008-09-24 20:08:44 +0000304 system("cd $tmp_dir; jar cfM ${output_dir_for_train}plugins/$fragment_filename .");
305 echo "${leader}${leader}Completed plug-in fragment $plugin_name\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000306
kitlo9c7c62a2008-10-05 16:05:19 +0000307 $projects[$project_id][] = $fragment_id;
308 $project_versions[$project_id] = $properties_file['version'];
droy0b08d292008-05-28 15:18:11 +0000309 }
kitlo9c7c62a2008-10-05 16:05:19 +0000310 foreach ($projects as $project_id => $fragment_ids) {
311 /*
312 * Sort fragment names
313 */
314 asort($fragment_ids);
315 /*
316 * Create ${babel_language_packs_dir}tmp
317 */
318 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features");
319 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/plugins");
320 /*
321 * Clean and create the temporary directory
322 */
323 if (file_exists($tmp_dir)) {
324 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
325 } else {
326 exec("mkdir $tmp_dir");
327 }
328 /*
329 * Create the feature.xml
330 *
331 * TODO <url><update label=... url=... and <url><discovery label=... url=... are not implemented
332 *
333 * <url>
334 * <update label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
335 * <discovery label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
336 * </url>
337 */
kitlo5c9da712008-10-27 12:45:40 +0000338 $feature_id = "org.eclipse.babel.nls_${project_id}_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000339 $feature_filename = "${feature_id}_$train_version_timestamp.jar";
340
341 $project_version = $project_versions[$project_id];
342 $sql = "SELECT pct_complete
343 FROM project_progress
344 WHERE project_id = \"$project_id\"
345 AND version = \"$project_version\"
346 AND language_id = $language_id";
347 $project_pct_complete_result = mysql_query($sql);
348 $project_pct_complete = mysql_result($project_pct_complete_result, 0);
349 if (strcmp($language_iso, "en_AA") == 0) {
350 $project_pct_complete = 100;
351 }
352
353 $outp = fopen("$tmp_dir/feature.xml", "w");
354 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" .
355 "\n<feature" .
356 "\n\tid=\"$feature_id\"" .
357 "\n\tlabel=\"Babel Language Pack for $project_id in $language_name ($project_pct_complete%)\"" .
358 "\n\timage=\"eclipse_update_120.jpg\"" .
359 "\n\tprovider-name=\"%providerName\"" .
360 "\n\tversion=\"$train_version_timestamp\">" .
361 "\n\t<copyright>\n\t\t%copyright\n\t</copyright>" .
362 "\n\t<license url=\"%licenseURL\">\n\t\t%license\n\t</license>" .
363 "\n\t<description>Babel Language Pack for $project_id in $language_name</description>" );
364 foreach ($fragment_ids as $fragment_id) {
365 $jar_name = "${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar";
366 $size = filesize($jar_name);
367 fwrite($outp, "\n\t<plugin fragment=\"true\" id=\"$fragment_id\" unpack=\"false\" " .
368 "version=\"$train_version_timestamp\" download-size=\"$size\" install-size=\"$size\" />");
369 /*
370 * Copy the plugin to ${babel_language_packs_dir}tmp
371 */
372 exec("cp ${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar ${babel_language_packs_dir}tmp/eclipse/plugins");
373 }
374 fwrite($outp, "\n</feature>");
375 fclose($outp);
376 /*
377 * Copy in the various legal files
378 */
379 exec("cp ${source_files_dir}about.html $tmp_dir");
380 exec("cp ${source_files_dir}eclipse_update_120.jpg $tmp_dir");
381 exec("cp ${source_files_dir}epl-v10.html $tmp_dir");
382 exec("cp ${source_files_dir}feature.properties $tmp_dir");
383 exec("cp ${source_files_dir}license.html $tmp_dir");
384 /*
385 * Copy in the Babel Pseudo Translations Index file
386 */
387 if (strcmp($language_iso, "en_AA") == 0) {
388 $pseudo_translations_index_file = fopen("${output_dir}BabelPseudoTranslationsIndex-$project_id.html", "w");
389 fwrite($pseudo_translations_index_file, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">" .
390 "\n<html>\n<head>\n<title>Babel Pseudo Translations Index for $project_id</title>" .
391 "\n<meta http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n</head>" .
392 "\n<body>\n\t<h1>Babel Pseudo Translations Index for $project_id</h1>" .
393 "\n\t<h2>Version: $train_version_timestamp</h2>\n\t<ul>");
394 foreach ($pseudo_translations_indexes[$project_id] as $index) {
395 fwrite($pseudo_translations_index_file, $index);
396 }
droy03d5c462008-11-10 21:07:01 +0000397 fwrite($pseudo_translations_index_file, "\n\t</ul>\n</div></div></body>\n</html>");
kitlo9c7c62a2008-10-05 16:05:19 +0000398 fclose($pseudo_translations_index_file);
399 exec("cp ${output_dir}BabelPseudoTranslationsIndex-$project_id.html $tmp_dir");
400 exec("rm ${output_dir}BabelPseudoTranslationsIndex-$project_id.html");
401 }
402 /*
403 * Copy the feature to ${babel_language_packs_dir}tmp before jar'ing up
404 */
kitloc42941d2008-11-20 15:33:00 +0000405 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
406 exec("cd $tmp_dir; cp * ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
kitlo9c7c62a2008-10-05 16:05:19 +0000407 /*
408 * Zip up language pack
409 */
410 $language_pack_name = "BabelLanguagePack-$project_id-${language_iso}_$train_version_timestamp.zip";
411 exec("cd ${babel_language_packs_dir}tmp; zip -r $babel_language_packs_dir$language_pack_name eclipse");
412 /*
413 * Clean up ${babel_language_packs_dir}tmp
414 */
415 exec("rm -rf ${babel_language_packs_dir}tmp");
416 /*
417 * Add project language pack link to language pack links file
418 */
kitlo18ebeee2008-11-20 15:45:34 +0000419 fwrite($language_pack_links_file, "\n\t<li><a href=\"${language_pack_leader}${language_pack_name}\">$language_pack_name ($project_pct_complete%)</a></li>");
kitlo9c7c62a2008-10-05 16:05:19 +0000420 /*
421 * Jar up this directory as the feature jar
422 */
423 system("cd $tmp_dir; jar cfM ${output_dir_for_train}features/$feature_filename .");
424 /*
425 * Register this feature with the site.xml
426 */
kitloc42941d2008-11-20 15:33:00 +0000427 $site_xml .= "\n\t<feature url=\"features/$feature_filename\" id=\"$feature_id\" version=\"$train_version_timestamp\">";
kitlo9c7c62a2008-10-05 16:05:19 +0000428 $site_xml .= "\n\t\t<category name=\"Babel Language Packs in $language_name\"/>";
429 $site_xml .= "\n\t</feature>";
430 echo "${leader}Completed language pack for $language_name ($language_iso)\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000431 }
kitlo9c7c62a2008-10-05 16:05:19 +0000432 fwrite($language_pack_links_file, "\n\t</ul>");
gobrien1a8e02f2008-01-30 01:46:26 +0000433 }
gobrien1a8e02f2008-01-30 01:46:26 +0000434 /*
droy0b08d292008-05-28 15:18:11 +0000435 * <site mirrorsURL=... implemented in the weekly build process by sed'ing <site>
gobrien1a8e02f2008-01-30 01:46:26 +0000436 */
kitlo58d8a5a2008-09-24 20:08:44 +0000437 $outp = fopen("${output_dir_for_train}site.xml", "w");
kitlo9c7c62a2008-10-05 16:05:19 +0000438 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
439 "\n<site>" .
440 "\n\t<description url=\"http://babel.eclipse.org/\">" .
441 "\n\t\tThis update site contains user-contributed translations of the strings in all Eclipse projects." .
442 "\n\t\tPlease see the http://babel.eclipse.org/ Babel project web pages for a full how-to-use explanation of" .
443 "\n\t\tthese translations as well as how you can contribute to the translations of this and future versions of Eclipse." .
444 "\n\t</description>");
kitlo58d8a5a2008-09-24 20:08:44 +0000445 fwrite($outp, $site_xml);
kitlo9c7c62a2008-10-05 16:05:19 +0000446 fwrite($outp, "\n</site>");
kitlo58d8a5a2008-09-24 20:08:44 +0000447 fclose($outp);
kitlo9c7c62a2008-10-05 16:05:19 +0000448
449 fwrite($language_pack_links_file, "\n\t</ul>");
atoulmedbda4272009-01-20 06:04:22 +0000450
451 // now generate the metadata and add the non-greedy tags
atoulme09ce4642009-01-21 07:46:06 +0000452
atoulme12882d52009-01-26 18:39:17 +0000453 system("sh " . dirname(__FILE__) . "/runMetadata.sh ".
atoulme09ce4642009-01-21 07:46:06 +0000454 METADATA_GENERATOR_LOCATION . " ${output_dir_for_train} ");
atoulmec86be152009-01-21 22:36:31 +0000455 system("xsltproc -o ${output_dir_for_train}content.xml ".
atoulmeb0f0e502009-01-21 17:27:25 +0000456 dirname(__FILE__) . "/content.xsl ${output_dir_for_train}content.xml");
atoulmec8efccd2009-02-13 08:51:59 +0000457 system("cd ${output_dir_for_train} ; jar -fc content.jar content.xml ; jar -fc artifacts.jar artifacts.xml ; rm site.xml");
gobrien1a8e02f2008-01-30 01:46:26 +0000458}
gobrien1a8e02f2008-01-30 01:46:26 +0000459echo "Completed generating update site\n";
460
kitlo9c7c62a2008-10-05 16:05:19 +0000461fwrite($language_pack_links_file, "\n</body>\n</html>");
462fclose($language_pack_links_file);
463
gobrien1a8e02f2008-01-30 01:46:26 +0000464/*
kitlo58d8a5a2008-09-24 20:08:44 +0000465 2. what happens if the translation feature includes plug-in fragments for
466 plug-ins that are not in the current image?
467 does it load correctly and ignore those fragments? if so, good
468 A: warnings appear in the run-time error log
469 does it fail to load? if so, then we need to generate different features, perhaps
470 one feature for each plug or else we need to know more about the project
471 distro structure to know which plug-ins to put in each feature
472 what happens if those plug-ins are later added - does it load the strings now?
473 A: probably not
474 3. need to handle different versions of each feature/plugin/platform; generate different
475 language packs for each
476 */
gobrien1a8e02f2008-01-30 01:46:26 +0000477
kitlo58d8a5a2008-09-24 20:08:44 +0000478$alloutput = fopen($output_dir."langpack_output_".date("m_d_Y"), "w");
479fwrite($alloutput,ob_get_contents());
kitlo399df202008-09-30 15:32:25 +0000480?>