1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
|
<?php
/**
* PHP version 5.4
*
* @category Mageia
* @package Mageia\Web\www
* @author rda <rda@mageia.org>
* @license http://www.gnu.org/licenses/gpl-2.0.html GPL-2+
* @link http://www.mageia.org/
*
*/
// _r('');
// note, we use geographical country names
$countries = array(
'AR' => 'Argentina',
'AU' => 'Australia',
'BE' => 'Belgique',
'BG' => 'България - Bulgaria',
'BR' => 'Brasil',
'BY' => 'Беларусь - Belarus',
'CA' => 'Canada',
'CH' => 'Switzerland',
'CN' => '中国 - China',
'CZ' => 'Česko', // Czechia
'DE' => 'Deutschland',
'DK' => 'Danmark',
'EC' => 'Ecuador',
'ES' => 'España',
'FR' => 'France',
'GB' => 'Great Britain',
'GR' => 'Ελλάδα - Greece',
'GT' => 'Guatemala',
'ID' => 'Indonesia',
'IL' => 'Israel',
'IT' => 'Italia',
'JP' => '日本国 - Japan',
'NC' => 'Nouvelle-Calédonie',
'NL' => 'Nederlands',
'PH' => 'Philipines',
'PL' => 'Polska',
'RU' => 'Россия - Russia',
'SE' => 'Sverige',
'TR' => 'Türkiye',
'TW' => '臺灣 - Taiwan',
'UA' => 'Ukraine',
'UK' => 'the UK',
'US' => 'the USA',
'VN' => 'Vietnam',
'ZA' => 'South Africa'
);
/**
* Rewrite city name in the local official language.
*
* @param string $name city name
*
* @return string
*/
function rewrite_city($name)
{
$cities = array(
'HsinChu' => '新竹市', // .tw
'Yonezawa' => '米沢市', // .jp
'Beijing' => '北京', // .cn
'Moscow' => 'Москва', // .ru
'Minsk' => 'Мінск', // .by
'Heraklion' => 'Ηράκλειο', // .gr
'Prague' => 'Praha', // .cz
);
if (array_key_exists($name, $cities)) {
return $cities[$name];
}
return $name;
}
/**
* Return $_GET value for $s key if it exists.
*
* @param string $s key
*
* @return mixed
*/
function get($s)
{
if (isset($_GET[$s])) {
return strip_tags(trim($_GET[$s]));
}
return null;
}
class NoProductFoundError extends Exception {}
class NoMirrorFoundError extends Exception {}
/**
* TODO use aliases, so that downloads asking for alpha3
* get redirected to beta1 for instance? (on migration)
*
* @param array $product array definition
* @param string $def_file definition file
*
* @return array
*/
function get_info_for_product($product, $def_file = null)
{
$def_file = is_null($def_file) ? 'definitions.ini' : $def_file;
$defs = parse_ini_file($def_file, true);
if (array_key_exists($product, $defs)) {
return $defs[$product];
}
throw new NoProductFoundError;
}
/**
* Return mirrors for $file.
* First mirror returned is the preferred one for auto redirection.
*
* @param string $file id of the file to download/find a mirror for
* @param string $locale hint for selecting a mirror
* @param string $country hint for selecting a mirror
*
* @return array
* mirror(product):
* name
* host
* country
* city
* speed
* link
*/
function get_mirrors_for($file, $locale = null, $country = null, $prod = true, $documentation = false)
{
//include '../../../lib/Downloads.php';
$mirrors = Downloads::get_all_mirrors($prod, $documentation);
$wsd = new Downloads();
$one = $wsd->prepare_download(true, $country, $prod, $documentation);
return array($one, $mirrors);
}
/**
* Simplifies things.
*
* @param array $product _one_ product definition array
* @param boolean $torrent_preferred do we prefer to get a torrent, if available?
*
* @return string
*/
function get_download_link($product, $torrent_preferred = false)
{
if ($torrent_preferred === true
&& isset($product['torrent'])
&& strlen($product['torrent']) > 0
) {
$path = $product['torrent'];
} else {
$path = $product['path'] . '/' . $product['file'];
}
return '$MIRROR/' . $path;
}
/**
* Builds human readable list from array with l10n option
*
* @param array $array to build the string from
* @param string $last_separator flexible (l10n) last separator
* @param string $nonlast_separator flexible (l10n) other than last separators
*
* @return string
*/
function array_to_list($array, $last_separator = ' and ', $nonlast_separator = ', ')
{
$num_of_values = count($array);
$output_string = '';
$separator = $nonlast_separator;
foreach ($array as $value) {
$output_string .= $value;
if ($num_of_values == 2) {
$separator = $last_separator;
} else if ($num_of_values == 1) {
$separator = '';
}
$output_string .= $separator;
$num_of_values--;
}
return $output_string;
}
|