blob: 95883751ce239d89d82279831a35842fa768a06a [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
kitlocc405032009-04-04 01:10:30 +000020 * Kit Lo (IBM) - patch, bug 270456, Unable to use Babel PTT to verify PDE in the eclipse SDK
kitlo58d8a5a2008-09-24 20:08:44 +000021 *******************************************************************************/
gobrien1a8e02f2008-01-30 01:46:26 +000022
23/*
kitlo58d8a5a2008-09-24 20:08:44 +000024 * Documentation: http://wiki.eclipse.org/Babel_/_Server_Tool_Specification#Outputs
gobrien1a8e02f2008-01-30 01:46:26 +000025 */
atoulme3fa5f5c2009-01-20 21:26:16 +000026define("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 +000027
droyaa172502009-05-06 20:50:07 +000028ini_set("memory_limit", "512M");
atoulme3ac52612009-02-02 13:14:39 +000029require(dirname(__FILE__) . "/../system/backend_functions.php");
atoulme12882d52009-01-26 18:39:17 +000030require(dirname(__FILE__) . "/../system/dbconnection.class.php");
kitlo399df202008-09-30 15:32:25 +000031$dbc = new DBConnection();
32$dbh = $dbc->connect();
droyb6e25c72008-07-18 13:01:13 +000033
atoulme3ac52612009-02-02 13:14:39 +000034$work_dir = $addon->callHook('babel_working');
atoulme12882d52009-01-26 18:39:17 +000035
atoulme3ac52612009-02-02 13:14:39 +000036global $addon;
37$context = $addon->callHook('context');
gobrienb854dcb2008-01-30 18:50:45 +000038
kitlo9c7c62a2008-10-05 16:05:19 +000039$work_context_dir = $work_dir . $context . "/";
40$tmp_dir = $work_context_dir . "tmp/";
41$babel_language_packs_dir = $work_context_dir . "babel_language_packs/";
42$output_dir = $work_context_dir . "output/";
atoulme3ac52612009-02-02 13:14:39 +000043$source_files_dir = dirname(__FILE__) . "/source_files_for_generate/";
gobrienb854dcb2008-01-30 18:50:45 +000044
droydfd5d622008-11-10 20:16:39 +000045# Language pack URL leader, to enable mirrors on download.eclipse.org
46$language_pack_leader = "";
47if($context == "live") {
48 $language_pack_leader = "http://www.eclipse.org/downloads/download.php?r=1&file=/technology/babel/babel_language_packs/";
49}
50
gobrien1a8e02f2008-01-30 01:46:26 +000051$leader = ". . ";
kitlo58d8a5a2008-09-24 20:08:44 +000052$timestamp = date("Ymdhis");
gobrien1a8e02f2008-01-30 01:46:26 +000053
droyd157aac2008-10-07 21:14:33 +000054$rm_command = "rm -rf $work_dir" . "*";
55exec($rm_command);
droy082976e2008-10-07 21:02:23 +000056exec("mkdir -p $output_dir");
57
kitlo9c7c62a2008-10-05 16:05:19 +000058/*
59 * Create language pack links file
60 */
61exec("mkdir -p $babel_language_packs_dir");
droydfd5d622008-11-10 20:16:39 +000062$language_pack_links_file = fopen("${babel_language_packs_dir}index.php", "w");
kitlo78f97432009-03-17 22:28:58 +000063fwrite($language_pack_links_file, "<?php\n\$pageTitle = \"Babel Language Packs\";");
64fwrite($language_pack_links_file, "\ninclude \$_SERVER['DOCUMENT_ROOT'] . '/eclipse.org-common/themes/Phoenix/header.php';");
65fwrite($language_pack_links_file, "\n?>");
66fwrite($language_pack_links_file, "\n\t<div id='maincontent'>");
67fwrite($language_pack_links_file, "\n\t<div id='midcolumn'>");
68fwrite($language_pack_links_file, "\n\t<style>");
69fwrite($language_pack_links_file, "\n\t\th3 {");
70fwrite($language_pack_links_file, "\n\t\t\tbackground-color: SteelBlue;");
71fwrite($language_pack_links_file, "\n\t\t\tcolor: white;");
72fwrite($language_pack_links_file, "\n\t\t}");
73fwrite($language_pack_links_file, "\n");
74fwrite($language_pack_links_file, "\n\t\th4 {");
75fwrite($language_pack_links_file, "\n\t\t\tbackground-color: LightSteelBlue;");
76fwrite($language_pack_links_file, "\n\t\t}");
77fwrite($language_pack_links_file, "\n\t</style>");
droydfd5d622008-11-10 20:16:39 +000078fwrite($language_pack_links_file, "\n\t<h1>Babel Language Packs</h1>" .
droyeb6d9b22008-11-24 18:42:28 +000079 "\n\t<h2>Build ID: $timestamp</h2>" .
80 "\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." .
81 "\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 +000082
kitlo58d8a5a2008-09-24 20:08:44 +000083echo "Generating update site\n";
kitlo78f97432009-03-17 22:28:58 +000084
85# There is no easy way to sort "galileo", "ganymede", and "europa" in the correct order we want without
86# modifying the release_train_projects table.
87#
88# Here is a temporary fix to display train versions in most recent release order until we have a permanent solution.
89
90$train_result = array("galileo" => "3.5.0", "ganymede" => "3.4.0", "europa" => "3.3.0");
91foreach ($train_result as $train_id => $train_version) {
92
93#$train_result = mysql_query("SELECT DISTINCT train_id FROM release_train_projects ORDER BY train_id DESC");
94#while (($train_row = mysql_fetch_assoc($train_result)) != null) {
95# $train_id = $train_row['train_id'];
96# $train_version = "3.5.0";
97# if (strcmp($train_id, "ganymede") == 0) {
98# $train_version = "3.4.0";
99# }
100# if (strcmp($train_id, "europa") == 0) {
101# $train_version = "3.3.0";
102# }
103
kitlo9c7c62a2008-10-05 16:05:19 +0000104 $train_version_timestamp = "$train_version.v$timestamp";
105 $site_xml = "";
kitlo58d8a5a2008-09-24 20:08:44 +0000106
kitlo78f97432009-03-17 22:28:58 +0000107 $output_dir_for_train = $output_dir . $train_id . "/";
kitlo58d8a5a2008-09-24 20:08:44 +0000108 exec("mkdir $output_dir_for_train");
109 exec("mkdir ${output_dir_for_train}features/");
110 exec("mkdir ${output_dir_for_train}plugins/");
111
kitlo9c7c62a2008-10-05 16:05:19 +0000112 fwrite($language_pack_links_file, "\n\t<h3>Release Train: $train_id</h3>\n\t<ul>");
droy68864612009-04-14 15:44:05 +0000113
114 $sql = "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";
115 $language_result = mysql_query($sql);
droyb3ff2742009-04-08 19:28:32 +0000116 if($language_result === FALSE) {
117 # we may have lost the database connection.with our shell-outs
118 # bug 271685
119 $dbh = $dbc->connect();
droy68864612009-04-14 15:44:05 +0000120 $language_result = mysql_query($sql);
droyb3ff2742009-04-08 19:28:32 +0000121 }
kitlo9c7c62a2008-10-05 16:05:19 +0000122 while (($language_row = mysql_fetch_assoc($language_result)) != null) {
droy0b08d292008-05-28 15:18:11 +0000123 $language_name = $language_row['name'];
kitlo58d8a5a2008-09-24 20:08:44 +0000124 $language_iso = $language_row['iso_code'];
kitlo58d8a5a2008-09-24 20:08:44 +0000125 $language_id = $language_row['language_id'];
126 if (strcmp($language_iso, "en") == 0) {
127 $language_iso = "en_AA";
128 $language_name = "Pseudo Translations";
129 }
kitlo9c7c62a2008-10-05 16:05:19 +0000130
kitlo58d8a5a2008-09-24 20:08:44 +0000131 echo "${leader}Generating language pack for $train_id - $language_name ($language_iso) (language_id=" . $language_id . ")\n";
132
gobrien1a8e02f2008-01-30 01:46:26 +0000133 /*
droy0b08d292008-05-28 15:18:11 +0000134 * Determine which plug-ins need to be in this language pack.
gobrien1a8e02f2008-01-30 01:46:26 +0000135 */
kitlo58d8a5a2008-09-24 20:08:44 +0000136 if (strcmp($language_iso, "en_AA") == 0) {
137 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
138 FROM files AS f
139 INNER JOIN strings AS s ON f.file_id = s.file_id
140 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
141 WHERE f.is_active
kitlo78f97432009-03-17 22:28:58 +0000142 AND v.train_id = '" . $train_id . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000143 } else {
144 $file_result = mysql_query("SELECT DISTINCT f.project_id, f.version, f.file_id, f.name
145 FROM files AS f
146 INNER JOIN strings AS s ON f.file_id = s.file_id
147 INNER JOIN translations AS t ON (s.string_id = t.string_id AND t.is_active)
148 INNER JOIN release_train_projects as v ON (f.project_id = v.project_id AND f.version = v.version)
149 WHERE t.language_id = " . $language_id . "
150 AND f.is_active
kitlo78f97432009-03-17 22:28:58 +0000151 AND v.train_id = '" . $train_id . "'");
kitlo58d8a5a2008-09-24 20:08:44 +0000152 }
153
droy0b08d292008-05-28 15:18:11 +0000154 $plugins = array();
kitlo9c7c62a2008-10-05 16:05:19 +0000155 $projects = array();
156 $project_versions = array();
157 $pseudo_translations_indexes = array();
kitlo58d8a5a2008-09-24 20:08:44 +0000158 while (($file_row = mysql_fetch_assoc($file_result)) != null) {
159 # save original filename
160 $file_row['origname'] = $file_row['name'];
161
droy02c430a2008-06-02 19:42:08 +0000162 # strip useless CVS structure before the plugin name (bug 221675 c14):
163 $pattern = '/^([a-zA-Z0-9\/_-])+\/([a-zA-Z0-9_-]+)\.([a-zA-Z0-9_-]+)(.*)\.properties$/i';
164 $replace = '${2}.${3}${4}.properties';
165 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000166
droy02c430a2008-06-02 19:42:08 +0000167 # strip source folder (bug 221675) (org.eclipse.plugin/source_folder/org/eclipse/plugin)
kitlo8d7c0532009-03-14 23:57:49 +0000168 /*
169 $pattern =
170 '/^
171 ([a-zA-Z0-9_-]+)\. # \1 org.
172 ([a-zA-Z0-9_-]+)\. # \2 eclipse.
173 ([a-zA-Z0-9\._-]+) # \3 datatools.connectivity
174 (.*)\/ # \4 \/plugins\/
175 (\1) # \5 org
176 ([\.\/]) # \6 .
177 (\2) # \7 eclipse
178 ([\.\/]) # \8 .
179 (.*) # \9 datatools.connectivity.ui\/plugin
180 \.properties # .properties
181 $/ix
182 ';
droy02c430a2008-06-02 19:42:08 +0000183 $replace = '${1}.${2}.${3}/${5}${6}${7}${8}${9}.properties';
kitlo8d7c0532009-03-14 23:57:49 +0000184 */
185
186 # fix output folder (bug 261584)
187 $pattern =
188 '/^
189 (.*\/)? # \1 optional outer directories
190 ([a-z]+) # \2 org|com|etc
191 [.] # dot
192 ([^\/]+) # \3 plugin id except org.|com.
193 \/ # slash
194 (.*?\/)? # \4 optional src\/, src\/main\/ etc
195 # \5 resource path (pathname inside resulting jar)
196 # (a) within a org|com directory, or
197 # (b) in plugin root dir.
198 (\2\/.*[.]properties| # org|com\/anything.properties
199 [^\/]+[.]properties) # eg plugin.properties
200 $/ix';
201 $replace = '$2.$3/$5';
202
droy0b08d292008-05-28 15:18:11 +0000203 $file_row['name'] = preg_replace($pattern, $replace, $file_row['name']);
kitlo58d8a5a2008-09-24 20:08:44 +0000204
205 if (preg_match("/^([a-zA-Z0-9\.]+)\/(.*)$/", $file_row['name'], $matches)) {
droy0b08d292008-05-28 15:18:11 +0000206 $file_row['subname'] = $matches[2];
207 $plugins[$matches[1]][] = $file_row;
208 } else {
209 echo " WARNING: no plug-in name found in file " . $file_row['file_id'] . " \"" . $file_row['name'] . "\"\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000210 }
droy0b08d292008-05-28 15:18:11 +0000211 }
kitlo58d8a5a2008-09-24 20:08:44 +0000212
droy0b08d292008-05-28 15:18:11 +0000213 /*
214 * Generate one plug-in fragment for each plug-in
215 */
kitlo58d8a5a2008-09-24 20:08:44 +0000216 foreach ($plugins as $plugin_name => $plugin_row) {
217 echo "${leader}${leader}Generating plug-in fragment $plugin_name\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000218 /*
droy0b08d292008-05-28 15:18:11 +0000219 * Clean and create the temporary directory
gobrien1a8e02f2008-01-30 01:46:26 +0000220 */
kitlo58d8a5a2008-09-24 20:08:44 +0000221 if (file_exists($tmp_dir)) {
222 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000223 } else {
kitlo58d8a5a2008-09-24 20:08:44 +0000224 exec("mkdir $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000225 }
gobrien1a8e02f2008-01-30 01:46:26 +0000226 /*
droy0b08d292008-05-28 15:18:11 +0000227 * Generate each *.properties file
gobrien1a8e02f2008-01-30 01:46:26 +0000228 */
droy0b08d292008-05-28 15:18:11 +0000229 foreach ($plugin_row as $properties_file) {
230 /*
231 * Convert the filename to *_lang.properties, e.g., foo_fr.properties
232 */
233 $filename = $properties_file['subname'];
kitlo58d8a5a2008-09-24 20:08:44 +0000234 if (preg_match( "/^(.*)\.properties$/", $filename, $matches)) {
droy0b08d292008-05-28 15:18:11 +0000235 $filename = $matches[1] . '_' . $language_iso . '.properties';
gobrien1a8e02f2008-01-30 01:46:26 +0000236 }
kitlo58d8a5a2008-09-24 20:08:44 +0000237 echo "${leader}${leader}${leader}Generating properties file $filename (file_id=" . $properties_file['file_id'] . ")\n";
droy0b08d292008-05-28 15:18:11 +0000238 /*
239 * Create any needed sub-directories
240 */
kitlo58d8a5a2008-09-24 20:08:44 +0000241 $fullpath = $tmp_dir . $filename;
242 preg_match("/^((.*)\/)?(.+?)$/", $fullpath, $matches);
243 exec("mkdir -p \"" . $matches[1] . "\"");
droy0b08d292008-05-28 15:18:11 +0000244 /*
245 * Start writing to the file
246 */
kitlo58d8a5a2008-09-24 20:08:44 +0000247 $outp = fopen($fullpath, "w");
kitloc42941d2008-11-20 15:33:00 +0000248 fwrite($outp, "# Copyright by many contributors; see http://babel.eclipse.org/");
kitlo58d8a5a2008-09-24 20:08:44 +0000249 if (strcmp($language_iso, "en_AA") == 0) {
250 $sql = "SELECT string_id, name, value FROM strings WHERE file_id = " . $properties_file['file_id'] .
251 " AND is_active AND non_translatable = 0";
252 $strings_result = mysql_query($sql);
253 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlocc405032009-04-04 01:10:30 +0000254 /* Check for value starting with form tag (bug 270456) */
255 if (preg_match("/^(<form>)(.*)/i", $strings_row['value'], $matches)) {
256 $pattern = "/^(<form>)(.*)/i";
257 $replace = "$1" . "<p>" . $properties_file['project_id'] . $strings_row['string_id'] . ":" . "</p>" . "$2";
258 $strings_row['value'] = preg_replace($pattern, $replace, $strings_row['value']);
259 $outp_line = "\n" . $strings_row['name'] . "=" . $strings_row['value'];
260 } else {
261 $outp_line = "\n" . $strings_row['name'] . "=" . $properties_file['project_id'] . $strings_row['string_id'] .
262 ":" . $strings_row['value'];
263 }
264 fwrite($outp, $outp_line);
kitlo58d8a5a2008-09-24 20:08:44 +0000265
266 $value = htmlspecialchars($strings_row['value']);
267 if (strlen($value) > 100) {
268 $value = substr($value, 0, 100) . " ...";
269 }
kitlo9c7c62a2008-10-05 16:05:19 +0000270 $pseudo_translations_indexes[$properties_file['project_id']][] = "\n\t\t<li><a href=\"http://babel.eclipse.org/babel/translate.php?project=" .
271 $properties_file['project_id'] . "&version=" . $properties_file['version'] . "&file=" .
272 $properties_file['origname'] . "&string=" . $strings_row['name'] . "\">" .
273 $properties_file['project_id'] . $strings_row['string_id'] . "</a>&nbsp;" . $value . "</li>";
kitlo58d8a5a2008-09-24 20:08:44 +0000274 }
275 } else {
276 $sql = "SELECT
277 strings.name AS 'key',
278 strings.value AS orig,
279 translations.value AS trans
droy0b08d292008-05-28 15:18:11 +0000280 FROM strings, translations
281 WHERE strings.string_id = translations.string_id
droy0b08d292008-05-28 15:18:11 +0000282 AND strings.file_id = " . $properties_file['file_id'] . "
kitlo1173dbd2008-10-21 15:58:36 +0000283 AND strings.is_active
284 AND strings.non_translatable = 0
285 AND translations.language_id = " . $language_id . "
kitlo58d8a5a2008-09-24 20:08:44 +0000286 AND translations.is_active";
287 $strings_result = mysql_query($sql);
288 while (($strings_row = mysql_fetch_assoc($strings_result)) != null) {
kitlo7f522672008-10-21 14:15:54 +0000289 fwrite($outp, "\n" . $strings_row['key'] . "=");
kitlo9c7c62a2008-10-05 16:05:19 +0000290 # echo "${leader1S}${leaderS}${leaderS}${leaderS}" . $strings_row['key'] . "=";
kitlo58d8a5a2008-09-24 20:08:44 +0000291 if ($strings_row['trans']) {
292 # json_encode returns the string with quotes fore and aft. Need to strip them.
293 # $tr_string = preg_replace('/^"(.*)"$/', '${1}', json_encode($strings_row['trans']));
294 # $tr_string = str_replace('\\\\', '\\', $tr_string);
295 $tr_string = toescapedunicode($strings_row['trans']);
296 fwrite($outp, $tr_string);
297 # echo $strings_row['trans'];
298 } else {
299 fwrite($outp, $strings_row['orig']);
300 }
droy0b08d292008-05-28 15:18:11 +0000301 }
droy0b08d292008-05-28 15:18:11 +0000302 }
303 /*
304 * Finish the properties file
305 */
kitlo58d8a5a2008-09-24 20:08:44 +0000306 fclose($outp);
307 echo "${leader}${leader}${leader}Completed properties file $filename\n";
gobrien1a8e02f2008-01-30 01:46:26 +0000308 }
309 /*
droy0b08d292008-05-28 15:18:11 +0000310 * Copy in the various legal files
gobrien1a8e02f2008-01-30 01:46:26 +0000311 */
kitlo9c7c62a2008-10-05 16:05:19 +0000312 exec("cp ${source_files_dir}about.html $tmp_dir");
droy0b08d292008-05-28 15:18:11 +0000313 /*
314 * Generate the META-INF/MANIFEST.MF file
315 */
316 $parent_plugin_id = $plugin_name;
kitlo9c7c62a2008-10-05 16:05:19 +0000317 $project_id = $properties_file['project_id'];
kitlo5c9da712008-10-27 12:45:40 +0000318 $fragment_id = "$parent_plugin_id.nl_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000319 $fragment_filename = "${fragment_id}_$train_version_timestamp.jar";
kitlo58d8a5a2008-09-24 20:08:44 +0000320
droy0b08d292008-05-28 15:18:11 +0000321 $plugins[$plugin_name]['id'] = $fragment_id;
kitlo9c7c62a2008-10-05 16:05:19 +0000322 $plugins[$plugin_name]['version'] = $train_version_timestamp;
kitlo58d8a5a2008-09-24 20:08:44 +0000323
324 exec("mkdir $tmp_dir/META-INF" );
325 $outp = fopen("$tmp_dir/META-INF/MANIFEST.MF", "w");
326 fwrite($outp, "Manifest-Version: 1.0\n");
327 fwrite($outp, "Bundle-Name: $parent_plugin_id $language_name NLS Support\n");
328 fwrite($outp, "Bundle-SymbolicName: $fragment_id ;singleton=true\n");
kitlo9c7c62a2008-10-05 16:05:19 +0000329 fwrite($outp, "Bundle-Version: $train_version_timestamp\n");
330 fwrite($outp, "Bundle-Vendor: Eclipse.org\n");
kitlo58d8a5a2008-09-24 20:08:44 +0000331 fwrite($outp, "Fragment-Host: $parent_plugin_id\n");
332 fclose($outp);
droy0b08d292008-05-28 15:18:11 +0000333 /*
334 * Jar up this directory as the fragment plug-in jar
335 */
kitlo58d8a5a2008-09-24 20:08:44 +0000336 system("cd $tmp_dir; jar cfM ${output_dir_for_train}plugins/$fragment_filename .");
337 echo "${leader}${leader}Completed plug-in fragment $plugin_name\n";
kitlo58d8a5a2008-09-24 20:08:44 +0000338
kitlo9c7c62a2008-10-05 16:05:19 +0000339 $projects[$project_id][] = $fragment_id;
340 $project_versions[$project_id] = $properties_file['version'];
droy0b08d292008-05-28 15:18:11 +0000341 }
kitlo78f97432009-03-17 22:28:58 +0000342 if (sizeof($projects) > 0) {
343 $site_xml .= "\n\t<category-def name=\"Babel Language Packs in $language_name\" label=\"Babel Language Packs in $language_name\">";
344 $site_xml .= "\n\t\t<description>Babel Language Packs in $language_name</description>";
345 $site_xml .= "\n\t</category-def>";
346
347 fwrite($language_pack_links_file, "\n\t\t<h4>Language: $language_name</h4>");
348 }
kitlo9c7c62a2008-10-05 16:05:19 +0000349 foreach ($projects as $project_id => $fragment_ids) {
kitlo78f97432009-03-17 22:28:58 +0000350 fwrite($language_pack_links_file, "\n\t\t<ul>");
kitlo9c7c62a2008-10-05 16:05:19 +0000351 /*
352 * Sort fragment names
353 */
354 asort($fragment_ids);
355 /*
356 * Create ${babel_language_packs_dir}tmp
357 */
358 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features");
359 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/plugins");
360 /*
361 * Clean and create the temporary directory
362 */
363 if (file_exists($tmp_dir)) {
364 exec("rm -rf $tmp_dir; mkdir $tmp_dir");
365 } else {
366 exec("mkdir $tmp_dir");
367 }
368 /*
369 * Create the feature.xml
370 *
371 * TODO <url><update label=... url=... and <url><discovery label=... url=... are not implemented
372 *
373 * <url>
374 * <update label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
375 * <discovery label="%updateSiteName" url="http://update.eclipse.org/updates/3.2" />
376 * </url>
377 */
kitlo5c9da712008-10-27 12:45:40 +0000378 $feature_id = "org.eclipse.babel.nls_${project_id}_$language_iso";
kitlo9c7c62a2008-10-05 16:05:19 +0000379 $feature_filename = "${feature_id}_$train_version_timestamp.jar";
380
381 $project_version = $project_versions[$project_id];
382 $sql = "SELECT pct_complete
383 FROM project_progress
384 WHERE project_id = \"$project_id\"
385 AND version = \"$project_version\"
386 AND language_id = $language_id";
387 $project_pct_complete_result = mysql_query($sql);
388 $project_pct_complete = mysql_result($project_pct_complete_result, 0);
389 if (strcmp($language_iso, "en_AA") == 0) {
390 $project_pct_complete = 100;
391 }
392
393 $outp = fopen("$tmp_dir/feature.xml", "w");
394 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>" .
395 "\n<feature" .
396 "\n\tid=\"$feature_id\"" .
397 "\n\tlabel=\"Babel Language Pack for $project_id in $language_name ($project_pct_complete%)\"" .
398 "\n\timage=\"eclipse_update_120.jpg\"" .
399 "\n\tprovider-name=\"%providerName\"" .
400 "\n\tversion=\"$train_version_timestamp\">" .
401 "\n\t<copyright>\n\t\t%copyright\n\t</copyright>" .
402 "\n\t<license url=\"%licenseURL\">\n\t\t%license\n\t</license>" .
403 "\n\t<description>Babel Language Pack for $project_id in $language_name</description>" );
404 foreach ($fragment_ids as $fragment_id) {
405 $jar_name = "${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar";
406 $size = filesize($jar_name);
407 fwrite($outp, "\n\t<plugin fragment=\"true\" id=\"$fragment_id\" unpack=\"false\" " .
408 "version=\"$train_version_timestamp\" download-size=\"$size\" install-size=\"$size\" />");
409 /*
410 * Copy the plugin to ${babel_language_packs_dir}tmp
411 */
412 exec("cp ${output_dir_for_train}plugins/${fragment_id}_$train_version_timestamp.jar ${babel_language_packs_dir}tmp/eclipse/plugins");
413 }
414 fwrite($outp, "\n</feature>");
415 fclose($outp);
416 /*
417 * Copy in the various legal files
418 */
419 exec("cp ${source_files_dir}about.html $tmp_dir");
420 exec("cp ${source_files_dir}eclipse_update_120.jpg $tmp_dir");
421 exec("cp ${source_files_dir}epl-v10.html $tmp_dir");
422 exec("cp ${source_files_dir}feature.properties $tmp_dir");
423 exec("cp ${source_files_dir}license.html $tmp_dir");
424 /*
425 * Copy in the Babel Pseudo Translations Index file
426 */
427 if (strcmp($language_iso, "en_AA") == 0) {
428 $pseudo_translations_index_file = fopen("${output_dir}BabelPseudoTranslationsIndex-$project_id.html", "w");
429 fwrite($pseudo_translations_index_file, "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">" .
430 "\n<html>\n<head>\n<title>Babel Pseudo Translations Index for $project_id</title>" .
431 "\n<meta http-equiv=Content-Type content=\"text/html; charset=UTF-8\">\n</head>" .
432 "\n<body>\n\t<h1>Babel Pseudo Translations Index for $project_id</h1>" .
433 "\n\t<h2>Version: $train_version_timestamp</h2>\n\t<ul>");
434 foreach ($pseudo_translations_indexes[$project_id] as $index) {
435 fwrite($pseudo_translations_index_file, $index);
436 }
droy03d5c462008-11-10 21:07:01 +0000437 fwrite($pseudo_translations_index_file, "\n\t</ul>\n</div></div></body>\n</html>");
kitlo9c7c62a2008-10-05 16:05:19 +0000438 fclose($pseudo_translations_index_file);
439 exec("cp ${output_dir}BabelPseudoTranslationsIndex-$project_id.html $tmp_dir");
440 exec("rm ${output_dir}BabelPseudoTranslationsIndex-$project_id.html");
441 }
442 /*
443 * Copy the feature to ${babel_language_packs_dir}tmp before jar'ing up
444 */
kitloc42941d2008-11-20 15:33:00 +0000445 exec("mkdir -p ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
446 exec("cd $tmp_dir; cp * ${babel_language_packs_dir}tmp/eclipse/features/${feature_id}_$train_version_timestamp");
kitlo9c7c62a2008-10-05 16:05:19 +0000447 /*
448 * Zip up language pack
449 */
450 $language_pack_name = "BabelLanguagePack-$project_id-${language_iso}_$train_version_timestamp.zip";
451 exec("cd ${babel_language_packs_dir}tmp; zip -r $babel_language_packs_dir$language_pack_name eclipse");
452 /*
453 * Clean up ${babel_language_packs_dir}tmp
454 */
455 exec("rm -rf ${babel_language_packs_dir}tmp");
456 /*
457 * Add project language pack link to language pack links file
458 */
kitlo78f97432009-03-17 22:28:58 +0000459 fwrite($language_pack_links_file, "\n\t\t\t<li><a href=\"${language_pack_leader}${language_pack_name}\">$language_pack_name ($project_pct_complete%)</a></li>");
kitlo9c7c62a2008-10-05 16:05:19 +0000460 /*
461 * Jar up this directory as the feature jar
462 */
463 system("cd $tmp_dir; jar cfM ${output_dir_for_train}features/$feature_filename .");
464 /*
465 * Register this feature with the site.xml
466 */
kitloc42941d2008-11-20 15:33:00 +0000467 $site_xml .= "\n\t<feature url=\"features/$feature_filename\" id=\"$feature_id\" version=\"$train_version_timestamp\">";
kitlo9c7c62a2008-10-05 16:05:19 +0000468 $site_xml .= "\n\t\t<category name=\"Babel Language Packs in $language_name\"/>";
469 $site_xml .= "\n\t</feature>";
470 echo "${leader}Completed language pack for $language_name ($language_iso)\n";
kitlo78f97432009-03-17 22:28:58 +0000471
472 fwrite($language_pack_links_file, "\n\t\t</ul>");
kitlo58d8a5a2008-09-24 20:08:44 +0000473 }
gobrien1a8e02f2008-01-30 01:46:26 +0000474 }
gobrien1a8e02f2008-01-30 01:46:26 +0000475 /*
droy0b08d292008-05-28 15:18:11 +0000476 * <site mirrorsURL=... implemented in the weekly build process by sed'ing <site>
gobrien1a8e02f2008-01-30 01:46:26 +0000477 */
kitlo58d8a5a2008-09-24 20:08:44 +0000478 $outp = fopen("${output_dir_for_train}site.xml", "w");
kitlo9c7c62a2008-10-05 16:05:19 +0000479 fwrite($outp, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" .
480 "\n<site>" .
481 "\n\t<description url=\"http://babel.eclipse.org/\">" .
482 "\n\t\tThis update site contains user-contributed translations of the strings in all Eclipse projects." .
483 "\n\t\tPlease see the http://babel.eclipse.org/ Babel project web pages for a full how-to-use explanation of" .
484 "\n\t\tthese translations as well as how you can contribute to the translations of this and future versions of Eclipse." .
485 "\n\t</description>");
kitlo58d8a5a2008-09-24 20:08:44 +0000486 fwrite($outp, $site_xml);
kitlo9c7c62a2008-10-05 16:05:19 +0000487 fwrite($outp, "\n</site>");
kitlo58d8a5a2008-09-24 20:08:44 +0000488 fclose($outp);
kitlo9c7c62a2008-10-05 16:05:19 +0000489
490 fwrite($language_pack_links_file, "\n\t</ul>");
atoulmedbda4272009-01-20 06:04:22 +0000491
492 // now generate the metadata and add the non-greedy tags
atoulme09ce4642009-01-21 07:46:06 +0000493
droye77ad172009-05-04 17:35:56 +0000494 /*
495 * Leaving this out of generate1 to avoid p2 breakage
496 *
atoulme12882d52009-01-26 18:39:17 +0000497 system("sh " . dirname(__FILE__) . "/runMetadata.sh ".
atoulme09ce4642009-01-21 07:46:06 +0000498 METADATA_GENERATOR_LOCATION . " ${output_dir_for_train} ");
atoulmec86be152009-01-21 22:36:31 +0000499 system("xsltproc -o ${output_dir_for_train}content.xml ".
atoulmeb0f0e502009-01-21 17:27:25 +0000500 dirname(__FILE__) . "/content.xsl ${output_dir_for_train}content.xml");
atoulmec8efccd2009-02-13 08:51:59 +0000501 system("cd ${output_dir_for_train} ; jar -fc content.jar content.xml ; jar -fc artifacts.jar artifacts.xml ; rm site.xml");
droye77ad172009-05-04 17:35:56 +0000502 */
gobrien1a8e02f2008-01-30 01:46:26 +0000503}
gobrien1a8e02f2008-01-30 01:46:26 +0000504echo "Completed generating update site\n";
505
kitlo9c7c62a2008-10-05 16:05:19 +0000506fwrite($language_pack_links_file, "\n</body>\n</html>");
507fclose($language_pack_links_file);
508
gobrien1a8e02f2008-01-30 01:46:26 +0000509/*
kitlo58d8a5a2008-09-24 20:08:44 +0000510 2. what happens if the translation feature includes plug-in fragments for
511 plug-ins that are not in the current image?
512 does it load correctly and ignore those fragments? if so, good
513 A: warnings appear in the run-time error log
514 does it fail to load? if so, then we need to generate different features, perhaps
515 one feature for each plug or else we need to know more about the project
516 distro structure to know which plug-ins to put in each feature
517 what happens if those plug-ins are later added - does it load the strings now?
518 A: probably not
519 3. need to handle different versions of each feature/plugin/platform; generate different
520 language packs for each
521 */
gobrien1a8e02f2008-01-30 01:46:26 +0000522
kitlo58d8a5a2008-09-24 20:08:44 +0000523$alloutput = fopen($output_dir."langpack_output_".date("m_d_Y"), "w");
524fwrite($alloutput,ob_get_contents());
kitlo399df202008-09-30 15:32:25 +0000525?>