phpBB
Statistics
| Revision:

root / tags / milestone_3 / phpBB / adm / admin_language.php

History | View | Annotate | Download (29.4 kB)

1 5075 acydburn
<?php
2 5114 acydburn
/**
3 5114 acydburn
*
4 5114 acydburn
* @package acp
5 5114 acydburn
* @version $Id$
6 5114 acydburn
* @copyright (c) 2005 phpBB Group
7 5114 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5114 acydburn
*
9 5114 acydburn
*/
10 5075 acydburn
11 5114 acydburn
/**
12 5114 acydburn
*/
13 5075 acydburn
if (!empty($setmodules))
14 5075 acydburn
{
15 5075 acydburn
        if (!$auth->acl_get('a_server'))
16 5075 acydburn
        {
17 5075 acydburn
                return;
18 5075 acydburn
        }
19 5075 acydburn
20 5075 acydburn
        $module['LANGUAGE']['LANGUAGE_PACKS'] = basename(__FILE__) . "$SID&amp;mode=manage";
21 5075 acydburn
22 5075 acydburn
        return;
23 5075 acydburn
}
24 5075 acydburn
25 5075 acydburn
define('IN_PHPBB', 1);
26 5075 acydburn
// Include files
27 5075 acydburn
$phpbb_root_path = '../';
28 5075 acydburn
$phpEx = substr(strrchr(__FILE__, '.'), 1);
29 5075 acydburn
require('pagestart.' . $phpEx);
30 5075 acydburn
include($phpbb_root_path . 'includes/functions_user.'.$phpEx);
31 5075 acydburn
32 5075 acydburn
// Do we have general permissions?
33 5075 acydburn
if (!$auth->acl_get('a_server'))
34 5075 acydburn
{
35 5132 acydburn
        trigger_error('NO_ADMIN');
36 5075 acydburn
}
37 5075 acydburn
38 5075 acydburn
// Check and set some common vars
39 5075 acydburn
$mode                = request_var('mode', '');
40 5075 acydburn
$confirm        = (isset($_POST['confirm'])) ? true : false;
41 5075 acydburn
$cancel                = (isset($_POST['cancel'])) ? true : false;
42 5075 acydburn
$action                = request_var('action', '');
43 5075 acydburn
44 5075 acydburn
$action                = (isset($_POST['update_details'])) ? 'update_details' : $action;
45 5075 acydburn
$action                = (isset($_POST['download_file'])) ? 'download_file' : $action;
46 5075 acydburn
$action                = (isset($_POST['submit_file'])) ? 'submit_file' : $action;
47 5075 acydburn
$action                = (isset($_POST['remove_store'])) ? 'details' : $action;
48 5075 acydburn
49 5075 acydburn
$lang_id = request_var('id', 0);
50 5075 acydburn
$cur_file = request_var('cur_file', 'common');
51 5075 acydburn
52 5075 acydburn
if (is_array($cur_file))
53 5075 acydburn
{
54 5075 acydburn
        list($cur_file, ) = array_keys($cur_file);
55 5075 acydburn
}
56 5075 acydburn
57 5075 acydburn
$cur_file = (strpos($cur_file, 'email/') !== false) ? 'email/' . basename($cur_file) : basename($cur_file) . '.' . $phpEx;
58 5085 acydburn
$safe_mode        = (@ini_get('safe_mode') || @strtolower(ini_get('safe_mode')) == 'on') ? true : false;
59 5075 acydburn
60 5085 acydburn
$language_files = array('common', 'groups', 'mcp', 'memberlist', 'posting', 'search', 'ucp', 'viewforum', 'viewtopic', 'admin', 'help_bbcode', 'help_faq');
61 5085 acydburn
62 5132 acydburn
$language_file_header = '<?php
63 5132 acydburn
/**
64 5132 acydburn
*
65 5132 acydburn
* {FILENAME} [{LANG_NAME}]
66 5132 acydburn
*
67 5132 acydburn
* @package phpBB3
68 5132 acydburn
* @version $Id$
69 5132 acydburn
* @copyright (c) 2005 phpBB Group
70 5132 acydburn
* @author {CHANGED} - {AUTHOR}
71 5132 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
72 5132 acydburn
*
73 5132 acydburn
*/
74 5132 acydburn
75 5132 acydburn
// DEVELOPERS PLEASE NOTE
76 5132 acydburn
//
77 5132 acydburn
// Placeholders can now contain order information, e.g. instead of
78 5132 acydburn
// \'Page %s of %s\' you can (and should) write \'Page %1$s of %2$s\', this allows
79 5132 acydburn
// translators to re-order the output of data while ensuring it remains correct
80 5132 acydburn
//
81 5132 acydburn
// You do not need this where single placeholders are used, e.g. \'Message %d\' is fine
82 5132 acydburn
// equally where a string contains only two placeholders which are used to wrap text
83 5132 acydburn
// in a url you again do not need to specify an order e.g., \'Click %sHERE%s\' is fine
84 5132 acydburn
85 5132 acydburn
/**
86 5132 acydburn
*/
87 5132 acydburn
';
88 5132 acydburn
89 5075 acydburn
if (!$mode)
90 5075 acydburn
{
91 5075 acydburn
        trigger_error('NO_MODE');
92 5075 acydburn
}
93 5075 acydburn
94 5075 acydburn
switch ($action)
95 5075 acydburn
{
96 5075 acydburn
        case 'update_details':
97 5075 acydburn
98 5075 acydburn
                if (!$lang_id)
99 5075 acydburn
                {
100 5075 acydburn
                        trigger_error('NO_LANGUAGE_PACK_DEFINED');
101 5075 acydburn
                }
102 5075 acydburn
103 5075 acydburn
                $sql = 'SELECT * FROM ' . LANG_TABLE . "
104 5075 acydburn
                        WHERE lang_id = $lang_id";
105 5075 acydburn
                $result = $db->sql_query($sql);
106 5075 acydburn
                $row = $db->sql_fetchrow($result);
107 5075 acydburn
                $db->sql_freeresult($result);
108 5075 acydburn
109 5075 acydburn
                $sql_ary['lang_english_name'] = request_var('lang_english_name', $row['lang_english_name']);
110 5075 acydburn
                $sql_ary['lang_local_name'] = request_var('lang_local_name', $row['lang_local_name']);
111 5075 acydburn
                $sql_ary['lang_author'] = request_var('lang_author', $row['lang_author']);
112 5075 acydburn
113 5075 acydburn
                $db->sql_query('UPDATE ' . LANG_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
114 5075 acydburn
                        WHERE lang_id = ' . $lang_id);
115 5075 acydburn
116 5075 acydburn
                add_log('admin', 'LOG_UPDATE_LANG_DETAILS', $sql_ary['lang_english_name']);
117 5075 acydburn
118 5075 acydburn
                trigger_error('LANGUAGE_DETAILS_UPDATED');
119 5075 acydburn
                break;
120 5075 acydburn
121 5075 acydburn
        case 'submit_file':
122 5075 acydburn
        case 'download_file':
123 5075 acydburn
124 5075 acydburn
                if (!$lang_id)
125 5075 acydburn
                {
126 5075 acydburn
                        trigger_error('NO_LANGUAGE_PACK_DEFINED');
127 5075 acydburn
                }
128 5075 acydburn
129 5075 acydburn
                if (!$cur_file)
130 5075 acydburn
                {
131 5075 acydburn
                        trigger_error('NO_FILE_SELECTED');
132 5075 acydburn
                }
133 5075 acydburn
134 5075 acydburn
                $sql = 'SELECT * FROM ' . LANG_TABLE . "
135 5075 acydburn
                        WHERE lang_id = $lang_id";
136 5075 acydburn
                $result = $db->sql_query($sql);
137 5075 acydburn
                $row = $db->sql_fetchrow($result);
138 5075 acydburn
                $db->sql_freeresult($result);
139 5075 acydburn
140 5085 acydburn
                if (!$safe_mode)
141 5075 acydburn
                {
142 5085 acydburn
                        $mkdir_ary = array('language', 'language/' . $row['lang_iso']);
143 5085 acydburn
                        if (strpos($cur_file, 'email/') !== false)
144 5085 acydburn
                        {
145 5085 acydburn
                                $mkdir_ary[] = 'language/' . $row['lang_iso'] . '/email';
146 5085 acydburn
                        }
147 5075 acydburn
148 5085 acydburn
                        foreach ($mkdir_ary as $dir)
149 5075 acydburn
                        {
150 5085 acydburn
                                $dir = $phpbb_root_path . 'store/' . $dir;
151 5085 acydburn
152 5085 acydburn
                                if (!is_dir($dir))
153 5075 acydburn
                                {
154 5085 acydburn
                                        if (!@mkdir($dir, 0777))
155 5085 acydburn
                                        {
156 5085 acydburn
                                                trigger_error("Could not create directory $dir");
157 5085 acydburn
                                        }
158 5085 acydburn
                                        @chmod($dir, 0777);
159 5075 acydburn
                                }
160 5075 acydburn
                        }
161 5075 acydburn
                }
162 5075 acydburn
163 5085 acydburn
                $filename = get_filename($row['lang_iso'], $cur_file, true);
164 5075 acydburn
                $fp = fopen($filename, 'wb');
165 5075 acydburn
166 5075 acydburn
                if (strpos($cur_file, 'email/') !== false)
167 5075 acydburn
                {
168 5075 acydburn
                        fwrite($fp, (STRIP) ? stripslashes($_POST['entry']) : $_POST['entry']);
169 5075 acydburn
                }
170 5075 acydburn
                else if (strpos($cur_file, 'help_') === 0)
171 5075 acydburn
                {
172 5132 acydburn
                        $header = str_replace(array('{FILENAME}', '{LANG_NAME}', '{CHANGED}', '{AUTHOR}'), array($cur_file, $row['lang_english_name'], date('Y-m-d', time()), $row['lang_author']), $language_file_header);
173 5132 acydburn
                        $header .= '$help = array(' . "\n";
174 5075 acydburn
                        fwrite($fp, $header);
175 5075 acydburn
176 5075 acydburn
                        foreach ($_POST['entry'] as $key => $value)
177 5075 acydburn
                        {
178 5075 acydburn
                                if (!is_array($value))
179 5075 acydburn
                                {
180 5075 acydburn
                                }
181 5075 acydburn
                                else
182 5075 acydburn
                                {
183 5075 acydburn
                                        $entry = "\tarray(\n";
184 5075 acydburn
185 5075 acydburn
                                        foreach ($value as $_key => $_value)
186 5075 acydburn
                                        {
187 5075 acydburn
                                                $_value = (STRIP) ? stripslashes($_value) : $_value;
188 5075 acydburn
                                                $entry .= "\t\t" . (int) $_key . "\t=> '" . str_replace("'", "\\'", $_value) . "',\n";
189 5075 acydburn
                                        }
190 5075 acydburn
191 5075 acydburn
                                        $entry .= "\t),\n";
192 5075 acydburn
                                }
193 5075 acydburn
194 5075 acydburn
                                fwrite($fp, $entry);
195 5075 acydburn
                        }
196 5075 acydburn
197 5075 acydburn
                        $footer = ");\n\n?>";
198 5075 acydburn
                        fwrite($fp, $footer);
199 5075 acydburn
                }
200 5075 acydburn
                else
201 5075 acydburn
                {
202 5132 acydburn
                        $header = str_replace(array('{FILENAME}', '{LANG_NAME}', '{CHANGED}', '{AUTHOR}'), array($cur_file, $row['lang_english_name'], date('Y-m-d', time()), $row['lang_author']), $language_file_header);
203 5132 acydburn
                        $header .= '
204 5132 acydburn
/**
205 5132 acydburn
* DO NOT CHANGE
206 5132 acydburn
*/
207 5075 acydburn
if (empty($lang) || !is_array($lang))
208 5075 acydburn
{
209 5075 acydburn
        $lang = array();
210 5075 acydburn
}
211 5075 acydburn
212 5075 acydburn
$lang += array(
213 5075 acydburn
';
214 5075 acydburn
                        fwrite($fp, $header);
215 5075 acydburn
216 5075 acydburn
                        foreach ($_POST['entry'] as $key => $value)
217 5075 acydburn
                        {
218 5075 acydburn
                                if (!is_array($value))
219 5075 acydburn
                                {
220 5075 acydburn
                                        $value = (STRIP) ? stripslashes($value) : $value;
221 5075 acydburn
                                        $entry = "\t'" . $key . "'\t=> '" . str_replace("'", "\\'", $value) . "',\n";
222 5075 acydburn
                                }
223 5075 acydburn
                                else
224 5075 acydburn
                                {
225 5075 acydburn
                                        $entry = "\n\t'" . $key . "'\t=> array(\n";
226 5075 acydburn
227 5075 acydburn
                                        foreach ($value as $_key => $_value)
228 5075 acydburn
                                        {
229 5075 acydburn
                                                $_value = (STRIP) ? stripslashes($_value) : $_value;
230 5075 acydburn
                                                $entry .= "\t\t'" . $_key . "'\t=> '" . str_replace("'", "\\'", $_value) . "',\n";
231 5075 acydburn
                                        }
232 5075 acydburn
233 5075 acydburn
                                        $entry .= "\t),\n\n";
234 5075 acydburn
                                }
235 5075 acydburn
236 5075 acydburn
                                fwrite($fp, $entry);
237 5075 acydburn
                        }
238 5075 acydburn
239 5075 acydburn
                        $footer = ");\n\n?>";
240 5075 acydburn
                        fwrite($fp, $footer);
241 5075 acydburn
                }
242 5075 acydburn
243 5075 acydburn
                fclose($fp);
244 5075 acydburn
245 5075 acydburn
                if ($action == 'download_file')
246 5075 acydburn
                {
247 5075 acydburn
                        $name = basename($cur_file);
248 5075 acydburn
249 5075 acydburn
                        header('Pragma: no-cache');
250 5075 acydburn
                        header('Content-Type: application/octetstream; name="' . $name . '"');
251 5075 acydburn
                        header('Content-disposition: attachment; filename=' . $name);
252 5075 acydburn
253 5075 acydburn
                        $fp = fopen($filename, 'rb');
254 5075 acydburn
                        while ($buffer = fread($fp, 1024))
255 5075 acydburn
                        {
256 5075 acydburn
                                echo $buffer;
257 5075 acydburn
                        }
258 5075 acydburn
                        fclose($fp);
259 5075 acydburn
260 5075 acydburn
                        exit;
261 5075 acydburn
                }
262 5075 acydburn
263 5075 acydburn
                $action = 'details';
264 5075 acydburn
265 5075 acydburn
        case 'details':
266 5075 acydburn
                adm_page_header($user->lang['LANGUAGE_PACK_DETAILS']);
267 5075 acydburn
268 5075 acydburn
                if (!$lang_id)
269 5075 acydburn
                {
270 5075 acydburn
                        trigger_error('NO_LANGUAGE_PACK_DEFINED');
271 5075 acydburn
                }
272 5075 acydburn
273 5085 acydburn
                $sql = 'SELECT * FROM ' . LANG_TABLE . '
274 5085 acydburn
                        WHERE lang_id = ' . $lang_id;
275 5075 acydburn
                $result = $db->sql_query($sql);
276 5085 acydburn
                $lang_entries = $db->sql_fetchrow($result);
277 5075 acydburn
                $db->sql_freeresult($result);
278 5075 acydburn
279 5085 acydburn
                $lang_iso = $lang_entries['lang_iso'];
280 5085 acydburn
                $missing_vars = $missing_files = array();
281 5075 acydburn
282 5085 acydburn
                $email_templates = filelist($phpbb_root_path . 'language/' . $config['default_lang'], 'email', 'txt');
283 5075 acydburn
                $email_templates = $email_templates['email/'];
284 5075 acydburn
285 5085 acydburn
                if (!in_array(str_replace(".{$phpEx}", '', $cur_file), $language_files) && !in_array(basename($cur_file), $email_templates))
286 5075 acydburn
                {
287 5075 acydburn
                        trigger_error('WRONG_LANGUAGE_FILE');
288 5075 acydburn
                }
289 5075 acydburn
290 5075 acydburn
                if (isset($_POST['remove_store']))
291 5075 acydburn
                {
292 5085 acydburn
                        if (!$safe_mode)
293 5085 acydburn
                        {
294 5085 acydburn
                                @unlink(get_filename($lang_iso, $cur_file));
295 5085 acydburn
                        }
296 5085 acydburn
                        else
297 5085 acydburn
                        {
298 5085 acydburn
                                @unlink(get_filename($lang_iso, $cur_file, true));
299 5085 acydburn
                        }
300 5075 acydburn
                }
301 5075 acydburn
302 5075 acydburn
?>
303 5075 acydburn
                <h1><?php echo $user->lang['LANGUAGE_PACK_DETAILS']; ?></h1>
304 5075 acydburn
305 5075 acydburn
                <form method="post" action="<?php echo "admin_language.$phpEx$SID&amp;mode=$mode&amp;action=$action&amp;id=$lang_id"; ?>">
306 5075 acydburn
                <table class="bg" width="95%" cellspacing="1" cellpadding="4" border="0" align="center">
307 5075 acydburn
                <tr>
308 5085 acydburn
                        <th colspan="2"><?php echo $lang_entries['lang_local_name']; ?></th>
309 5075 acydburn
                </tr>
310 5075 acydburn
                <tr>
311 5075 acydburn
                        <td class="row1"><b><?php echo $user->lang['LANG_ENGLISH_NAME']; ?>: </b></td>
312 5085 acydburn
                        <td class="row2"><input type="text" class="text" name="lang_english_name" value="<?php echo $lang_entries['lang_english_name']; ?>" /></td>
313 5075 acydburn
                </tr>
314 5075 acydburn
                <tr>
315 5075 acydburn
                        <td class="row1"><b><?php echo $user->lang['LANG_LOCAL_NAME']; ?>: </b></td>
316 5085 acydburn
                        <td class="row2"><input type="text" class="text" name="lang_local_name" value="<?php echo $lang_entries['lang_local_name']; ?>" /></td>
317 5075 acydburn
                </tr>
318 5075 acydburn
                <tr>
319 5075 acydburn
                        <td class="row1"><b><?php echo $user->lang['LANG_ISO_CODE']; ?>: </b></td>
320 5085 acydburn
                        <td class="row2"><?php echo $lang_entries['lang_iso']; ?></td>
321 5075 acydburn
                </tr>
322 5075 acydburn
                <tr>
323 5075 acydburn
                        <td class="row1"><b><?php echo $user->lang['LANG_AUTHOR']; ?>: </b></td>
324 5085 acydburn
                        <td class="row2"><input type="text" class="text" name="lang_author" value="<?php echo $lang_entries['lang_author']; ?>" /></td>
325 5075 acydburn
                </tr>
326 5075 acydburn
                <tr>
327 5075 acydburn
                        <td class="cat" colspan="2" align="right"><input type="submit" name="update_details" class="btnmain" value="<?php echo $user->lang['SUBMIT']; ?>" /></td>
328 5075 acydburn
                </tr>
329 5075 acydburn
                </table>
330 5075 acydburn
                <br /><br />
331 5075 acydburn
                </form>
332 5075 acydburn
<?php
333 5075 acydburn
334 5075 acydburn
                // If current lang is different from the default lang, then first try to grab missing/additional vars
335 5085 acydburn
                if ($lang_iso != $config['default_lang'])
336 5075 acydburn
                {
337 5075 acydburn
                        $is_missing_var = false;
338 5075 acydburn
339 5075 acydburn
                        foreach ($language_files as $file)
340 5075 acydburn
                        {
341 5085 acydburn
                                if (file_exists(get_filename($lang_iso, "$file.$phpEx")))
342 5075 acydburn
                                {
343 5085 acydburn
                                        $missing_vars["$file.$phpEx"] = compare_language_files($config['default_lang'], $lang_iso, $file);
344 5075 acydburn
345 5085 acydburn
                                        if (sizeof($missing_vars["$file.$phpEx"]))
346 5075 acydburn
                                        {
347 5075 acydburn
                                                $is_missing_var = true;
348 5075 acydburn
                                        }
349 5075 acydburn
                                        else
350 5075 acydburn
                                        {
351 5085 acydburn
                                                unset($missing_vars["$file.$phpEx"]);
352 5075 acydburn
                                        }
353 5075 acydburn
                                }
354 5075 acydburn
                                else
355 5075 acydburn
                                {
356 5085 acydburn
                                        $missing_files[] = get_filename($lang_iso, "$file.$phpEx");
357 5075 acydburn
                                }
358 5075 acydburn
                        }
359 5075 acydburn
360 5085 acydburn
                        // More missing files... for example email templates?
361 5085 acydburn
                        foreach ($email_templates as $file)
362 5085 acydburn
                        {
363 5132 acydburn
                                if (!file_exists(get_filename($lang_iso, "email/$file")))
364 5085 acydburn
                                {
365 5132 acydburn
                                        $missing_files[] = get_filename($lang_iso, "email/$file");
366 5085 acydburn
                                }
367 5085 acydburn
                        }
368 5085 acydburn
369 5075 acydburn
                        if (sizeof($missing_files))
370 5075 acydburn
                        {
371 5075 acydburn
?>
372 5085 acydburn
                                <h1><?php echo sprintf($user->lang['THOSE_MISSING_LANG_FILES'], $lang_entries['lang_local_name']); ?></h1>
373 5075 acydburn
374 5075 acydburn
                                <p><b style="color: red;"><?php echo implode('<br />', $missing_files); ?></b></p>
375 5075 acydburn
376 5075 acydburn
                                <br /><br />
377 5075 acydburn
<?php
378 5075 acydburn
                        }
379 5075 acydburn
380 5075 acydburn
                        if ($is_missing_var)
381 5075 acydburn
                        {
382 5075 acydburn
?>
383 5075 acydburn
                                <h1><?php echo $user->lang['MISSING_LANG_VARIABLES']; ?></h1>
384 5075 acydburn
385 5085 acydburn
                                <p><?php echo sprintf($user->lang['THOSE_MISSING_LANG_VARIABLES'], $lang_entries['lang_local_name']); ?></p>
386 5075 acydburn
387 5075 acydburn
                                <form method="post" action="<?php echo "admin_language.$phpEx$SID&amp;mode=$mode&amp;action=$action&amp;id=$lang_id"; ?>">
388 5075 acydburn
                                <table class="bg" width="95%" cellspacing="1" cellpadding="4" border="0" align="center">
389 5075 acydburn
                                <tr>
390 5075 acydburn
                                        <th nowrap="nowrap"><?php echo $user->lang['LANGUAGE_KEY']; ?></th>
391 5075 acydburn
                                        <th nowrap="nowrap"><?php echo $user->lang['LANGUAGE_VARIABLE']; ?></th>
392 5075 acydburn
                                </tr>
393 5075 acydburn
<?php
394 5075 acydburn
                                foreach ($missing_vars as $file => $vars)
395 5075 acydburn
                                {
396 5075 acydburn
?>
397 5075 acydburn
                                        <tr>
398 5075 acydburn
                                                <td class="row3" colspan="2"><b><?php echo $file; ?></b></td>
399 5075 acydburn
                                        </tr>
400 5075 acydburn
<?php
401 5075 acydburn
                                        print_language_entries($vars, '', false);
402 5075 acydburn
?>
403 5075 acydburn
                                        <tr>
404 5075 acydburn
                                                <td class="cat" align="right" colspan="2"><input type="submit" name="cur_file[<?php echo str_replace(".{$phpEx}", '', $file); ?>]" value="<?php echo $user->lang['SELECT']; ?>" class="btnmain" /></td>
405 5075 acydburn
                                        </tr>
406 5075 acydburn
<?php
407 5075 acydburn
                                }
408 5075 acydburn
?>
409 5075 acydburn
                                </table>
410 5075 acydburn
                                <br /><br />
411 5075 acydburn
                                </form>
412 5075 acydburn
<?php
413 5075 acydburn
                        }
414 5075 acydburn
                }
415 5075 acydburn
416 5075 acydburn
                $s_lang_options = '<option class="sep">' . $user->lang['LANGUAGE_FILES'] . '</option>';
417 5075 acydburn
                foreach ($language_files as $file)
418 5075 acydburn
                {
419 5085 acydburn
                        if (strpos($file, 'help_') === 0)
420 5085 acydburn
                        {
421 5085 acydburn
                                continue;
422 5085 acydburn
                        }
423 5075 acydburn
424 5085 acydburn
                        $prefix = (file_exists(get_filename($lang_iso, $file . '.' . $phpEx, true))) ? '* ' : '';
425 5085 acydburn
426 5075 acydburn
                        $selected = ($cur_file == $file . '.' . $phpEx) ? ' selected="selected"' : '';
427 5075 acydburn
                        $s_lang_options .= '<option value="' . $file . '"' . $selected . '>' . $prefix . $file . '.' . $phpEx . '</option>';
428 5075 acydburn
                }
429 5075 acydburn
430 5075 acydburn
                $s_lang_options .= '<option class="sep">' . $user->lang['HELP_FILES'] . '</option>';
431 5085 acydburn
                foreach ($language_files as $file)
432 5075 acydburn
                {
433 5085 acydburn
                        if (strpos($file, 'help_') !== 0)
434 5085 acydburn
                        {
435 5085 acydburn
                                continue;
436 5085 acydburn
                        }
437 5075 acydburn
438 5085 acydburn
                        $prefix = (file_exists(get_filename($lang_iso, $file . '.' . $phpEx, true))) ? '* ' : '';
439 5085 acydburn
440 5075 acydburn
                        $selected = ($cur_file == $file . '.' . $phpEx) ? ' selected="selected"' : '';
441 5075 acydburn
                        $s_lang_options .= '<option value="' . $file . '"' . $selected . '>' . $prefix . $file . '.' . $phpEx . '</option>';
442 5075 acydburn
                }
443 5075 acydburn
444 5075 acydburn
                $s_lang_options .= '<option class="sep">' . $user->lang['EMAIL_TEMPLATES'] . '</option>';
445 5075 acydburn
                foreach ($email_templates as $file)
446 5075 acydburn
                {
447 5085 acydburn
                        $prefix = (file_exists(get_filename($lang_iso, "email/{$file}", true))) ? '* ' : '';
448 5075 acydburn
449 5075 acydburn
                        $selected = ($cur_file == 'email/' . $file) ? ' selected="selected"' : '';
450 5075 acydburn
                        $s_lang_options .= '<option value="email/' . $file . '"' . $selected . '>' . $prefix . $file . '</option>';
451 5075 acydburn
                }
452 5075 acydburn
453 5075 acydburn
                // Get Language Entries - if saved within store folder, we take this one (with the option to remove it)
454 5075 acydburn
                $lang = array();
455 5075 acydburn
                $is_email_file = (strpos($cur_file, 'email/') !== false) ? true : false;
456 5075 acydburn
                $is_help_file = (strpos($cur_file, 'help_') === 0) ? true : false;
457 5085 acydburn
                $file_from_store = (file_exists(get_filename($lang_iso, $cur_file, true))) ? true : false;
458 5075 acydburn
459 5085 acydburn
                if (!$file_from_store && !file_exists(get_filename($lang_iso, $cur_file)))
460 5075 acydburn
                {
461 5075 acydburn
                        $print_message = sprintf($user->lang['MISSING_LANGUAGE_FILE'], $cur_file);
462 5075 acydburn
                }
463 5075 acydburn
                else
464 5075 acydburn
                {
465 5075 acydburn
                        if ($is_email_file)
466 5075 acydburn
                        {
467 5085 acydburn
                                $lang = implode('', file(get_filename($lang_iso, $cur_file, $file_from_store)));
468 5075 acydburn
                        }
469 5075 acydburn
                        else
470 5075 acydburn
                        {
471 5085 acydburn
                                include(get_filename($lang_iso, $cur_file, $file_from_store));
472 5075 acydburn
473 5075 acydburn
                                if ($is_help_file)
474 5075 acydburn
                                {
475 5075 acydburn
                                        $lang = $help;
476 5075 acydburn
                                        unset($help);
477 5075 acydburn
                                }
478 5075 acydburn
                        }
479 5075 acydburn
                        $print_message = $cur_file;
480 5075 acydburn
                }
481 5075 acydburn
482 5075 acydburn
                // Normal language pack entries
483 5075 acydburn
?>
484 5075 acydburn
                <a name="entries"></a>
485 5075 acydburn
                <h1><?php echo $user->lang['LANGUAGE_ENTRIES']; ?></h1>
486 5075 acydburn
487 5075 acydburn
                <p><?php echo $user->lang['LANGUAGE_ENTRIES_EXPLAIN']; ?></p>
488 5075 acydburn
489 5075 acydburn
                <form method="post" action="<?php echo "admin_language.$phpEx$SID&amp;mode=$mode&amp;action=$action&amp;id=$lang_id#entries"; ?>">
490 5075 acydburn
                <table width="95%" cellspacing="0" cellpadding="0" border="0" align="center">
491 5075 acydburn
                <tr>
492 5075 acydburn
                        <td align="left"><?php
493 5075 acydburn
                                if ($file_from_store) {
494 5075 acydburn
                        ?> <input type="submit" name="remove_store" value="<?php echo $user->lang['REMOVE_FROM_STORAGE_FOLDER']; ?>" class="btnmain" /> <?php
495 5075 acydburn
                                }
496 5075 acydburn
                        ?>
497 5075 acydburn
                        <td align="right"><select name="cur_file"><?php echo $s_lang_options; ?></select>&nbsp;<input type="submit" class="btnmain" name="change" value="<?php echo $user->lang['SELECT']; ?>" /></td>
498 5075 acydburn
                </tr>
499 5075 acydburn
                </table>
500 5075 acydburn
                <br />
501 5075 acydburn
                <table class="bg" width="95%" cellspacing="1" cellpadding="4" border="0" align="center">
502 5075 acydburn
<?php
503 5075 acydburn
                if ($is_email_file)
504 5075 acydburn
                {
505 5075 acydburn
?>
506 5075 acydburn
                        <tr>
507 5075 acydburn
                                <th colspan="2"><?php echo $user->lang['FILE_CONTENTS']; ?></th>
508 5075 acydburn
                        </tr>
509 5075 acydburn
<?php
510 5075 acydburn
                }
511 5075 acydburn
                else
512 5075 acydburn
                {
513 5075 acydburn
?>
514 5075 acydburn
                        <tr>
515 5075 acydburn
                                <th nowrap="nowrap"><?php echo $user->lang['LANGUAGE_KEY']; ?></th>
516 5075 acydburn
                                <th nowrap="nowrap"><?php echo $user->lang['LANGUAGE_VARIABLE']; ?></th>
517 5075 acydburn
                        </tr>
518 5075 acydburn
<?php
519 5075 acydburn
                }
520 5075 acydburn
?>
521 5075 acydburn
                <tr>
522 5075 acydburn
                        <td class="row3" align="left"><b><?php echo $print_message . (($file_from_store) ? '<br /><b style="color:red;">' . $user->lang['FILE_FROM_STORAGE'] . '</b>' : ''); ?></b></td>
523 5075 acydburn
                        <td class="row3" align="right"><input type="submit" name="download_file" class="btnlite" value="<?php echo $user->lang['SUBMIT_AND_DOWNLOAD']; ?>" />&nbsp;&nbsp;<input type="submit" name="submit_file" class="btnmain" value="<?php echo $user->lang['SUBMIT']; ?>" /></td>
524 5075 acydburn
                </tr>
525 5075 acydburn
<?php
526 5075 acydburn
                if (!$is_email_file)
527 5075 acydburn
                {
528 5132 acydburn
                        $function = ($is_help_file) ? 'print_help_entries' : 'print_language_entries';
529 5075 acydburn
                        if (isset($missing_vars[$cur_file]) && sizeof($missing_vars[$cur_file]))
530 5075 acydburn
                        {
531 5132 acydburn
                                $function($missing_vars[$cur_file], '* ');
532 5075 acydburn
                        }
533 5132 acydburn
                        $function($lang);
534 5075 acydburn
                }
535 5075 acydburn
                else
536 5075 acydburn
                {
537 5075 acydburn
?>
538 5075 acydburn
                        <tr>
539 5132 acydburn
                                <td class="row1" colspan="2" align="center"><textarea name="entry" cols="80" rows="20" class="post" style="width:90%"><?php echo $lang; ?></textarea></td>
540 5075 acydburn
                        </tr>
541 5075 acydburn
<?php
542 5075 acydburn
                }
543 5075 acydburn
?>
544 5075 acydburn
                <tr>
545 5075 acydburn
                        <td class="cat" colspan="2" align="right"><input type="submit" name="download_file" class="btnlite" value="<?php echo $user->lang['SUBMIT_AND_DOWNLOAD']; ?>" />&nbsp;&nbsp;<input type="submit" name="submit_file" class="btnmain" value="<?php echo $user->lang['SUBMIT']; ?>" /></td>
546 5075 acydburn
                </tr>
547 5075 acydburn
                </table>
548 5075 acydburn
                <br /><br />
549 5075 acydburn
                </form>
550 5075 acydburn
<?php
551 5075 acydburn
552 5075 acydburn
                break;
553 5075 acydburn
554 5075 acydburn
        case 'delete':
555 5075 acydburn
556 5075 acydburn
                if (!$lang_id)
557 5075 acydburn
                {
558 5075 acydburn
                        trigger_error('NO_LANGUAGE_PACK_DEFINED');
559 5075 acydburn
                }
560 5075 acydburn
561 5075 acydburn
                $sql = 'SELECT * FROM ' . LANG_TABLE . '
562 5075 acydburn
                        WHERE lang_id = ' . $lang_id;
563 5075 acydburn
                $result = $db->sql_query($sql);
564 5075 acydburn
                $row = $db->sql_fetchrow($result);
565 5075 acydburn
                $db->sql_freeresult($result);
566 5075 acydburn
567 5075 acydburn
                if ($row['lang_iso'] == $config['default_lang'])
568 5075 acydburn
                {
569 5075 acydburn
                        trigger_error('NO_REMOVE_DEFAULT_LANG');
570 5075 acydburn
                }
571 5075 acydburn
572 5075 acydburn
                $db->sql_query('DELETE FROM ' . LANG_TABLE . ' WHERE lang_id = ' . $lang_id);
573 5075 acydburn
                $sql = 'UPDATE ' . USERS_TABLE . "
574 5075 acydburn
                        SET user_lang = '{$config['default_lang']}'
575 5075 acydburn
                        WHERE user_lang = '{$row['lang_iso']}'";
576 5075 acydburn
                $db->sql_query($sql);
577 5075 acydburn
578 5075 acydburn
                add_log('admin', 'LOG_DELETE_LANGUAGE_PACK', $row['lang_english_name']);
579 5075 acydburn
580 5075 acydburn
                trigger_error(sprintf($user->lang['LANGUAGE_PACK_DELETED'], $row['lang_english_name']));
581 5075 acydburn
582 5075 acydburn
                break;
583 5075 acydburn
584 5075 acydburn
        case 'install':
585 5075 acydburn
                $lang_iso = request_var('iso', '');
586 5075 acydburn
                $lang_iso = basename($lang_iso);
587 5075 acydburn
588 5075 acydburn
                if (!$lang_iso || !file_exists("{$phpbb_root_path}language/$lang_iso/iso.txt"))
589 5075 acydburn
                {
590 5075 acydburn
                        trigger_error('LANGUAGE_PACK_NOT_EXIST');
591 5075 acydburn
                }
592 5075 acydburn
593 5075 acydburn
                $file = file("{$phpbb_root_path}language/$lang_iso/iso.txt");
594 5075 acydburn
                $lang_pack = array();
595 5075 acydburn
596 5075 acydburn
                $lang_pack = array(
597 5075 acydburn
                        'iso'                => htmlspecialchars($lang_iso),
598 5075 acydburn
                        'name'                => trim(htmlspecialchars($file[0])),
599 5075 acydburn
                        'local_name'=> trim(htmlspecialchars($file[1])),
600 5075 acydburn
                        'author'        => trim(htmlspecialchars($file[2]))
601 5075 acydburn
                );
602 5075 acydburn
                unset($file);
603 5075 acydburn
604 5075 acydburn
                $sql = 'SELECT lang_iso FROM ' . LANG_TABLE . "
605 5075 acydburn
                        WHERE lang_iso = '" . $db->sql_escape($lang_iso) . "'";
606 5075 acydburn
                $result = $db->sql_query($sql);
607 5075 acydburn
                if ($row = $db->sql_fetchrow($result))
608 5075 acydburn
                {
609 5075 acydburn
                        trigger_error('LANGUAGE_PACK_ALREADY_INSTALLED');
610 5075 acydburn
                }
611 5075 acydburn
                $db->sql_freeresult($result);
612 5075 acydburn
613 5075 acydburn
                if (!$lang_pack['name'] || !$lang_pack['local_name'])
614 5075 acydburn
                {
615 5075 acydburn
                        trigger_error('INVALID_LANGUAGE_PACK');
616 5075 acydburn
                }
617 5075 acydburn
618 5075 acydburn
                // Add language pack
619 5075 acydburn
                $sql_ary = array(
620 5075 acydburn
                        'lang_iso'                        => $lang_pack['iso'],
621 5075 acydburn
                        'lang_dir'                        => $lang_pack['iso'],
622 5075 acydburn
                        'lang_english_name'        => $lang_pack['name'],
623 5075 acydburn
                        'lang_local_name'        => $lang_pack['local_name'],
624 5075 acydburn
                        'lang_author'                => $lang_pack['author']
625 5075 acydburn
                );
626 5075 acydburn
627 5075 acydburn
                $db->sql_query('INSERT INTO ' . LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
628 5075 acydburn
629 5075 acydburn
                add_log('admin', 'LOG_LANGUAGE_PACK_INSTALLED', $lang_pack['name']);
630 5075 acydburn
631 5075 acydburn
                trigger_error(sprintf($user->lang['LANGUAGE_PACK_INSTALLED'], $lang_pack['name']));
632 5075 acydburn
633 5075 acydburn
                break;
634 5075 acydburn
635 5075 acydburn
        case 'download':
636 5075 acydburn
637 5075 acydburn
                if (!$lang_id)
638 5075 acydburn
                {
639 5075 acydburn
                        trigger_error('NO_LANGUAGE_PACK_DEFINED');
640 5075 acydburn
                }
641 5075 acydburn
642 5075 acydburn
                $sql = 'SELECT * FROM ' . LANG_TABLE . '
643 5075 acydburn
                        WHERE lang_id = ' . $lang_id;
644 5075 acydburn
                $result = $db->sql_query($sql);
645 5075 acydburn
                $row = $db->sql_fetchrow($result);
646 5075 acydburn
                $db->sql_freeresult($result);
647 5075 acydburn
648 5075 acydburn
                $use_method = request_var('use_method', '');
649 5075 acydburn
                $methods = array('tar');
650 5075 acydburn
651 5075 acydburn
                foreach (array('tar.gz' => 'zlib', 'tar.bz2' => 'bz2', 'zip' => 'zlib') as $type => $module)
652 5075 acydburn
                {
653 5075 acydburn
                        if (!@extension_loaded($module))
654 5075 acydburn
                        {
655 5075 acydburn
                                break;
656 5075 acydburn
                        }
657 5075 acydburn
                        $methods[] = $type;
658 5075 acydburn
                }
659 5075 acydburn
660 5075 acydburn
                if (!in_array($use_method, $methods))
661 5075 acydburn
                {
662 5075 acydburn
                        $use_method = '';
663 5075 acydburn
                }
664 5075 acydburn
665 5075 acydburn
                // Let the user decide in which format he wants to have the pack
666 5075 acydburn
                if (!$use_method)
667 5075 acydburn
                {
668 5075 acydburn
                        adm_page_header($user->lang['SELECT_DOWNLOAD_FORMAT']);
669 5075 acydburn
670 5075 acydburn
?>
671 5075 acydburn
                        <h1><?php echo $user->lang['SELECT_DOWNLOAD_FORMAT']; ?></h1>
672 5075 acydburn
673 5075 acydburn
                        <form method="post" action="<?php echo "admin_language.$phpEx$SID&amp;mode=$mode&amp;action=$action&amp;id=$lang_id"; ?>">
674 5075 acydburn
                        <table class="bg" width="95%" cellspacing="1" cellpadding="4" border="0" align="center">
675 5075 acydburn
                        <tr>
676 5075 acydburn
                                <th><?php echo $user->lang['DOWNLOAD_AS']; ?></td>
677 5075 acydburn
                        </tr>
678 5075 acydburn
                        <tr>
679 5075 acydburn
                                <td class="row1" align="center">
680 5075 acydburn
<?php
681 5075 acydburn
                                        foreach ($methods as $method)
682 5075 acydburn
                                        {
683 5075 acydburn
                                                echo '<input type="radio" value="' . $method . '" name="use_method" />&nbsp;' . $method . '&nbsp;';
684 5075 acydburn
                                        }
685 5075 acydburn
?>
686 5075 acydburn
                                </td>
687 5075 acydburn
                        </tr>
688 5075 acydburn
                        <tr>
689 5075 acydburn
                                <td class="cat" align="right"><input type="submit" class="btnmain" value="<?php echo $user->lang['DOWNLOAD']; ?>" name="download" /></td>
690 5075 acydburn
                        </tr>
691 5075 acydburn
                        </table>
692 5075 acydburn
                        </form>
693 5075 acydburn
                        <br /><br />
694 5075 acydburn
<?php
695 5075 acydburn
                        adm_page_footer();
696 5075 acydburn
                        exit;
697 5075 acydburn
                }
698 5075 acydburn
699 5075 acydburn
                include($phpbb_root_path . 'includes/functions_compress.'.$phpEx);
700 5075 acydburn
701 5075 acydburn
                if ($use_method == 'zip')
702 5075 acydburn
                {
703 5075 acydburn
                        $compress = new compress_zip('w', $phpbb_root_path . 'store/lang_pack_' . $row['lang_iso'] . '.' . $use_method);
704 5075 acydburn
                }
705 5075 acydburn
                else
706 5075 acydburn
                {
707 5075 acydburn
                        $compress = new compress_tar('w', $phpbb_root_path . 'store/lang_pack_' . $row['lang_iso'] . '.' . $use_method, $use_method);
708 5075 acydburn
                }
709 5075 acydburn
710 5075 acydburn
                $email_templates = filelist($phpbb_root_path . 'language/' . $row['lang_iso'], 'email', 'txt');
711 5075 acydburn
                $email_templates = $email_templates['email/'];
712 5075 acydburn
713 5075 acydburn
                // Go through all language files, we want to write those within the storage folder first
714 5075 acydburn
                $src_path = 'language/' . $row['lang_iso'] . '/';
715 5075 acydburn
                foreach ($language_files as $file)
716 5075 acydburn
                {
717 5085 acydburn
                        if (file_exists(get_filename($row['lang_iso'], $file . '.' . $phpEx, 'store')))
718 5075 acydburn
                        {
719 5085 acydburn
                                if ($safe_mode)
720 5085 acydburn
                                {
721 5085 acydburn
                                        $compress->add_custom_file('store/langfile_' . $row['lang_iso'] . '_' . $file . '.' . $phpEx, $src_path . $file . '.' . $phpEx);
722 5085 acydburn
                                }
723 5085 acydburn
                                else
724 5085 acydburn
                                {
725 5085 acydburn
                                        $compress->add_file('store/' . $src_path . $file . '.' . $phpEx, 'store/');
726 5085 acydburn
                                }
727 5075 acydburn
                        }
728 5075 acydburn
                        else
729 5075 acydburn
                        {
730 5075 acydburn
                                $compress->add_file($src_path . $file . '.' . $phpEx);
731 5075 acydburn
                        }
732 5075 acydburn
                }
733 5075 acydburn
734 5075 acydburn
                foreach ($email_templates as $file)
735 5075 acydburn
                {
736 5085 acydburn
                        if (file_exists(get_filename($row['lang_iso'], 'email/' . $file, 'store')))
737 5075 acydburn
                        {
738 5085 acydburn
                                if ($safe_mode)
739 5085 acydburn
                                {
740 5085 acydburn
                                        $compress->add_custom_file('store/langfile_' . $row['lang_iso'] . '_email_' . $file, $src_path . 'email/' . $file);
741 5085 acydburn
                                }
742 5085 acydburn
                                else
743 5085 acydburn
                                {
744 5085 acydburn
                                        $compress->add_file('store/' . $src_path . 'email/' . $file, 'store/');
745 5085 acydburn
                                }
746 5075 acydburn
                        }
747 5075 acydburn
                        else
748 5075 acydburn
                        {
749 5075 acydburn
                                $compress->add_file($src_path . 'email/' . $file);
750 5075 acydburn
                        }
751 5075 acydburn
                }
752 5075 acydburn
753 5075 acydburn
                // Write ISO File
754 5075 acydburn
                $iso_src = strtr($row['lang_english_name'], array_flip(get_html_translation_table(HTML_ENTITIES))) . "\n";
755 5075 acydburn
                $iso_src .= strtr($row['lang_local_name'], array_flip(get_html_translation_table(HTML_ENTITIES))) . "\n";
756 5075 acydburn
                $iso_src .= strtr($row['lang_author'], array_flip(get_html_translation_table(HTML_ENTITIES)));
757 5075 acydburn
                $compress->add_data($iso_src, 'language/' . $row['lang_iso'] . '/iso.txt');
758 5075 acydburn
759 5075 acydburn
                // index.html files
760 5075 acydburn
                $compress->add_data('', 'language/' . $row['lang_iso'] . '/index.html');
761 5075 acydburn
                $compress->add_data('', 'language/' . $row['lang_iso'] . '/email/index.html');
762 5075 acydburn
                $compress->close();
763 5075 acydburn
764 5075 acydburn
                $compress->download('lang_pack_' . $row['lang_iso']);
765 5075 acydburn
                @unlink($phpbb_root_path . 'store/lang_pack_' . $row['lang_iso'] . '.' . $use_method);
766 5075 acydburn
                exit;
767 5075 acydburn
768 5075 acydburn
                break;
769 5075 acydburn
770 5075 acydburn
        default:
771 5132 acydburn
                // Output list of language packs
772 5075 acydburn
                adm_page_header($user->lang['LANGUAGE_PACKS']);
773 5075 acydburn
?>
774 5075 acydburn
<h1><?php echo $user->lang['LANGUAGE_PACKS']; ?></h1>
775 5075 acydburn
776 5075 acydburn
<p><?php echo $user->lang['LANGUAGE_PACKS_EXPLAIN']; ?></p>
777 5075 acydburn
778 5075 acydburn
<table class="bg" width="95%" cellspacing="1" cellpadding="4" border="0" align="center">
779 5075 acydburn
<tr>
780 5075 acydburn
        <th nowrap="nowrap"><?php echo $user->lang['LANGUAGE_PACK_NAME']; ?></th>
781 5075 acydburn
        <th nowrap="nowrap"><?php echo $user->lang['LANGUAGE_PACK_LOCALNAME']; ?></th>
782 5075 acydburn
        <th nowrap="nowrap"><?php echo $user->lang['LANGUAGE_PACK_ISO']; ?></th>
783 5075 acydburn
        <th nowrap="nowrap"><?php echo $user->lang['LANGUAGE_PACK_USED_BY']; ?></th>
784 5075 acydburn
        <th nowrap="nowrap"><?php echo $user->lang['OPTIONS']; ?></th>
785 5075 acydburn
</tr>
786 5075 acydburn
<tr>
787 5075 acydburn
        <td class="row3" colspan="5"><b><?php echo $user->lang['INSTALLED_LANGUAGE_PACKS']; ?></b></td>
788 5075 acydburn
</tr>
789 5075 acydburn
<?php
790 5075 acydburn
791 5075 acydburn
        $sql = 'SELECT user_lang, COUNT(user_lang) AS lang_count
792 5075 acydburn
                FROM ' . USERS_TABLE . '
793 5075 acydburn
                GROUP BY user_lang';
794 5075 acydburn
        $result = $db->sql_query($sql);
795 5075 acydburn
796 5075 acydburn
        $lang_count = array();
797 5075 acydburn
        while ($row = $db->sql_fetchrow($result))
798 5075 acydburn
        {
799 5075 acydburn
                $lang_count[$row['user_lang']] = $row['lang_count'];
800 5075 acydburn
        }
801 5075 acydburn
        $db->sql_freeresult($result);
802 5075 acydburn
803 5075 acydburn
        $sql = 'SELECT *
804 5075 acydburn
                FROM ' . LANG_TABLE;
805 5075 acydburn
        $result = $db->sql_query($sql);
806 5075 acydburn
807 5075 acydburn
        $installed = array();
808 5075 acydburn
        $row_class = '';
809 5075 acydburn
        while ($row = $db->sql_fetchrow($result))
810 5075 acydburn
        {
811 5075 acydburn
                $installed[] = $row['lang_iso'];
812 5075 acydburn
                $row_class = ($row_class != 'row1') ? 'row1' : 'row2';
813 5075 acydburn
                $tagstyle = ($row['lang_iso'] == $config['default_lang']) ? '*' : '';
814 5075 acydburn
815 5075 acydburn
?>
816 5075 acydburn
        <tr>
817 5075 acydburn
                <td class="<?php echo $row_class; ?>" width="100%" nowrap="nowrap"><a href="<?php echo "admin_language.$phpEx$SID&amp;mode=$mode&amp;action=details&amp;id=" . $row['lang_id']; ?>"><?php echo $row['lang_english_name']; ?></a> <?php echo $tagstyle; ?></td>
818 5075 acydburn
                <td class="<?php echo $row_class; ?>" nowrap="nowrap"><?php echo $row['lang_local_name']; ?></td>
819 5075 acydburn
                <td class="<?php echo $row_class; ?>" align="center" nowrap="nowrap"><b><?php echo $row['lang_iso']; ?></b></td>
820 5075 acydburn
                <td class="<?php echo $row_class; ?>" align="center" nowrap="nowrap"><?php echo (isset($lang_count[$row['lang_iso']])) ? $lang_count[$row['lang_iso']] : '0'; ?></td>
821 5075 acydburn
                <td class="<?php echo $row_class; ?>" align="center" nowrap="nowrap">&nbsp;<a href="<?php echo "admin_language.$phpEx$SID&amp;mode=$mode&amp;action=download&amp;id=" . $row['lang_id']; ?>"><?php echo $user->lang['DOWNLOAD']; ?></a>&nbsp;|&nbsp;<a href="<?php echo "admin_language.$phpEx$SID&amp;mode=$mode&amp;action=delete&amp;id=" . $row['lang_id']; ?>"><?php echo $user->lang['DELETE']; ?></a></td>
822 5075 acydburn
        </tr>
823 5075 acydburn
<?php
824 5075 acydburn
825 5075 acydburn
        }
826 5075 acydburn
        $db->sql_freeresult($result);
827 5075 acydburn
828 5075 acydburn
?>
829 5075 acydburn
        <tr>
830 5075 acydburn
                <td class="row3" colspan="5"><b><?php echo $user->lang['UNINSTALLED_LANGUAGE_PACKS']; ?></b></td>
831 5075 acydburn
        </tr>
832 5075 acydburn
<?php
833 5075 acydburn
834 5075 acydburn
        $new_ary = $iso = array();
835 5075 acydburn
        $dp = opendir("{$phpbb_root_path}language");
836 5075 acydburn
        while ($file = readdir($dp))
837 5075 acydburn
        {
838 5075 acydburn
                if ($file{0} != '.' && file_exists("{$phpbb_root_path}language/$file/iso.txt"))
839 5075 acydburn
                {
840 5085 acydburn
                        if (!in_array($file, $installed))
841 5075 acydburn
                        {
842 5085 acydburn
                                if ($iso = file("{$phpbb_root_path}language/$file/iso.txt"))
843 5075 acydburn
                                {
844 5085 acydburn
                                        if (sizeof($iso) == 3)
845 5085 acydburn
                                        {
846 5085 acydburn
                                                $new_ary[$file] = array(
847 5085 acydburn
                                                        'iso'                => $file,
848 5085 acydburn
                                                        'name'                => trim($iso[0]),
849 5085 acydburn
                                                        'local_name'=> trim($iso[1]),
850 5085 acydburn
                                                        'author'        => trim($iso[2])
851 5085 acydburn
                                                );
852 5085 acydburn
                                        }
853 5075 acydburn
                                }
854 5075 acydburn
                        }
855 5075 acydburn
                }
856 5075 acydburn
        }
857 5075 acydburn
        unset($installed);
858 5075 acydburn
        @closedir($dp);
859 5075 acydburn
860 5075 acydburn
        if (sizeof($new_ary))
861 5075 acydburn
        {
862 5075 acydburn
                $row_class = '';
863 5075 acydburn
                foreach ($new_ary as $iso => $lang_ary)
864 5075 acydburn
                {
865 5075 acydburn
                        $row_class = ($row_class != 'row1') ? 'row1' : 'row2';
866 5075 acydburn
867 5075 acydburn
?>
868 5075 acydburn
        <tr>
869 5075 acydburn
                <td class="<?php echo $row_class; ?>"><?php echo $lang_ary['name']; ?></td>
870 5075 acydburn
                <td class="<?php echo $row_class; ?>"><?php echo $lang_ary['local_name']; ?></td>
871 5075 acydburn
                <td class="<?php echo $row_class; ?>"><b><?php echo $lang_ary['iso']; ?></b></td>
872 5075 acydburn
                <td class="<?php echo $row_class; ?>" colspan="2" align="center"><a href="<?php echo "admin_language.$phpEx$SID&amp;mode=$mode&amp;action=install&amp;iso=" . urlencode($lang_ary['iso']); ?>"><?php echo $user->lang['INSTALL']; ?></a></td>
873 5075 acydburn
        </tr>
874 5075 acydburn
<?php
875 5075 acydburn
876 5075 acydburn
                }
877 5075 acydburn
        }
878 5075 acydburn
        else
879 5075 acydburn
        {
880 5075 acydburn
881 5075 acydburn
?>
882 5075 acydburn
        <tr>
883 5075 acydburn
                <td class="row1" colspan="5" align="center"><?php echo $user->lang['NO_UNINSTALLED_LANGUAGE_PACKS']; ?></td>
884 5075 acydburn
        </tr>
885 5075 acydburn
<?php
886 5075 acydburn
887 5075 acydburn
        }
888 5075 acydburn
        unset($new_ary);
889 5075 acydburn
?>
890 5075 acydburn
</table>
891 5075 acydburn
<br /><br />
892 5075 acydburn
<?php
893 5075 acydburn
        adm_page_footer();
894 5075 acydburn
895 5075 acydburn
}
896 5075 acydburn
897 5075 acydburn
exit;
898 5075 acydburn
899 5075 acydburn
900 5075 acydburn
//
901 5075 acydburn
// FUNCTIONS
902 5075 acydburn
903 5132 acydburn
/**
904 5132 acydburn
* Compare two language files
905 5132 acydburn
*/
906 5075 acydburn
function compare_language_files($source_lang, $dest_lang, $file_var)
907 5075 acydburn
{
908 5075 acydburn
        global $phpbb_root_path, $phpEx;
909 5075 acydburn
910 5075 acydburn
        $return_ary = array();
911 5075 acydburn
912 5075 acydburn
        $lang = array();
913 5075 acydburn
        include("{$phpbb_root_path}language/{$source_lang}/{$file_var}.{$phpEx}");
914 5075 acydburn
        $lang_entry_src = $lang;
915 5075 acydburn
916 5075 acydburn
        $lang = array();
917 5085 acydburn
        if (file_exists(get_filename($dest_lang, $file_var . '.' . $phpEx, true)))
918 5075 acydburn
        {
919 5085 acydburn
                include(get_filename($dest_lang, $file_var . '.' . $phpEx, true));
920 5075 acydburn
        }
921 5075 acydburn
        else
922 5075 acydburn
        {
923 5085 acydburn
                include(get_filename($dest_lang, $file_var . '.' . $phpEx));
924 5075 acydburn
        }
925 5075 acydburn
        $lang_entry_dst = $lang;
926 5075 acydburn
927 5075 acydburn
        unset($lang);
928 5075 acydburn
929 5075 acydburn
        $diff_array_keys = array_diff(array_keys($lang_entry_src), array_keys($lang_entry_dst));
930 5075 acydburn
        unset($lang_entry_dst);
931 5075 acydburn
932 5075 acydburn
        foreach ($diff_array_keys as $key)
933 5075 acydburn
        {
934 5075 acydburn
                $return_ary[$key] = $lang_entry_src[$key];
935 5075 acydburn
        }
936 5075 acydburn
937 5075 acydburn
        unset($lang_entry_src);
938 5075 acydburn
939 5075 acydburn
        return $return_ary;
940 5075 acydburn
}
941 5075 acydburn
942 5132 acydburn
/**
943 5132 acydburn
* Print language entries
944 5132 acydburn
*/
945 5075 acydburn
function print_language_entries(&$lang_ary, $key_prefix = '', $input_field = true)
946 5075 acydburn
{
947 5075 acydburn
        foreach ($lang_ary as $key => $value)
948 5075 acydburn
        {
949 5075 acydburn
?>
950 5075 acydburn
                <tr>
951 5075 acydburn
                        <td class="row1" width="10%" nowrap="nowrap"><?php echo $key_prefix; ?><b><?php echo $key; ?></b></td>
952 5075 acydburn
                        <td class="row2">
953 5075 acydburn
<?php
954 5075 acydburn
                if (is_array($value))
955 5075 acydburn
                {
956 5075 acydburn
?>
957 5075 acydburn
                        &nbsp;</td>
958 5075 acydburn
                </tr>
959 5075 acydburn
<?php
960 5075 acydburn
                        foreach ($value as $_key => $_value)
961 5075 acydburn
                        {
962 5075 acydburn
?>
963 5075 acydburn
                <tr>
964 5075 acydburn
                        <td class="row1" width="10%" nowrap="nowrap"><?php echo $key_prefix; ?><b><?php echo $key . ' :: ' . $_key; ?></b></td>
965 5075 acydburn
                        <td class="row2"><?php if ($input_field) { ?><input type="text" class="text" name="entry[<?php echo $key; ?>][<?php echo $_key; ?>]" value="<?php echo htmlspecialchars($_value); ?>" style="width:99%" /><?php } else { ?><b><?php echo htmlspecialchars($_value); ?></b><?php } ?></td>
966 5075 acydburn
                </tr>
967 5075 acydburn
<?php
968 5075 acydburn
                        }
969 5075 acydburn
                }
970 5075 acydburn
                else
971 5075 acydburn
                {
972 5075 acydburn
?>
973 5132 acydburn
                        <?php if ($input_field) { ?><input type="text" class="post" name="entry[<?php echo $key; ?>]" value="<?php echo htmlspecialchars($value); ?>" style="width:99%" /><?php } else { ?><b><?php echo htmlspecialchars($value); ?></b><?php } ?></td>
974 5075 acydburn
                </tr>
975 5075 acydburn
<?php
976 5075 acydburn
                }
977 5075 acydburn
        }
978 5075 acydburn
}
979 5075 acydburn
980 5132 acydburn
/**
981 5132 acydburn
* Print help entries
982 5132 acydburn
*/
983 5132 acydburn
function print_help_entries(&$lang_ary, $key_prefix = '', $text_field = true)
984 5132 acydburn
{
985 5132 acydburn
        foreach ($lang_ary as $key => $value)
986 5132 acydburn
        {
987 5132 acydburn
?>
988 5132 acydburn
                <tr>
989 5132 acydburn
                        <td class="row1" width="10%" nowrap="nowrap"><?php echo $key_prefix; ?><b><?php echo $key; ?></b></td>
990 5132 acydburn
                        <td class="row2">
991 5132 acydburn
<?php
992 5132 acydburn
                if (is_array($value))
993 5132 acydburn
                {
994 5132 acydburn
?>
995 5132 acydburn
                        &nbsp;</td>
996 5132 acydburn
                </tr>
997 5132 acydburn
<?php
998 5132 acydburn
                        foreach ($value as $_key => $_value)
999 5132 acydburn
                        {
1000 5132 acydburn
?>
1001 5132 acydburn
                <tr>
1002 5132 acydburn
                        <td class="row1" width="10%" nowrap="nowrap"><?php echo $key_prefix; ?><b><?php echo $key . ' :: ' . $_key; ?></b></td>
1003 5132 acydburn
                        <td class="row2"><?php if ($text_field) { ?><textarea class="post" name="entry[<?php echo $key; ?>][<?php echo $_key; ?>]" cols="80" rows="5" class="post" style="width:90%"><?php echo htmlspecialchars($_value); ?></textarea><?php } else { ?><b><?php echo htmlspecialchars($_value); ?></b><?php } ?></td>
1004 5132 acydburn
                </tr>
1005 5132 acydburn
<?php
1006 5132 acydburn
                        }
1007 5132 acydburn
                }
1008 5132 acydburn
                else
1009 5132 acydburn
                {
1010 5132 acydburn
?>
1011 5132 acydburn
                        <?php if ($text_field) { ?><textarea type="text" class="post" name="entry[<?php echo $key; ?>]" cols="80" rows="5" style="width:90%"><?php echo htmlspecialchars($value); ?></textarea><?php } else { ?><b><?php echo htmlspecialchars($value); ?></b><?php } ?></td>
1012 5132 acydburn
                </tr>
1013 5132 acydburn
<?php
1014 5132 acydburn
                }
1015 5132 acydburn
        }
1016 5132 acydburn
}
1017 5132 acydburn
1018 5132 acydburn
/**
1019 5132 acydburn
* Get filename/location of language/help/email file
1020 5132 acydburn
*/
1021 5085 acydburn
function get_filename($lang_iso, $file, $check_store = false)
1022 5085 acydburn
{
1023 5085 acydburn
        global $phpbb_root_path, $safe_mode;
1024 5085 acydburn
1025 5085 acydburn
        if ($check_store && $safe_mode)
1026 5085 acydburn
        {
1027 5085 acydburn
                return "{$phpbb_root_path}store/langfile_{$lang_iso}_" . ((strpos($file, 'email/') !== false) ? str_replace('email/', 'email_', $file) : $file);
1028 5085 acydburn
        }
1029 5085 acydburn
        else if ($check_store)
1030 5085 acydburn
        {
1031 5085 acydburn
                return $phpbb_root_path . 'store/language/' . $lang_iso . '/' . $file;
1032 5085 acydburn
        }
1033 5085 acydburn
        else
1034 5085 acydburn
        {
1035 5085 acydburn
                return $phpbb_root_path . 'language/' . $lang_iso . '/' . $file;
1036 5085 acydburn
        }
1037 5085 acydburn
}
1038 5085 acydburn
1039 5075 acydburn
?>