phpBB
Statistics
| Revision:

root / branches / phpBB-3_0_0 / phpBB / includes / acp / acp_language.php

History | View | Annotate | Download (45 kB)

1 5315 acydburn
<?php
2 8147 acydburn
/**
3 5315 acydburn
*
4 5315 acydburn
* @package acp
5 5315 acydburn
* @version $Id$
6 8147 acydburn
* @copyright (c) 2005 phpBB Group
7 8147 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 5315 acydburn
*
9 5315 acydburn
*/
10 5315 acydburn
11 5315 acydburn
/**
12 8147 acydburn
* @ignore
13 8147 acydburn
*/
14 8147 acydburn
if (!defined('IN_PHPBB'))
15 8147 acydburn
{
16 8147 acydburn
        exit;
17 8147 acydburn
}
18 8147 acydburn
19 8147 acydburn
/**
20 5315 acydburn
* @package acp
21 5315 acydburn
*/
22 5315 acydburn
class acp_language
23 5315 acydburn
{
24 5558 acydburn
        var $u_action;
25 5315 acydburn
        var $main_files;
26 5315 acydburn
        var $language_header = '';
27 5315 acydburn
        var $lang_header = '';
28 5315 acydburn
29 5315 acydburn
        var $language_file = '';
30 5315 acydburn
        var $language_directory = '';
31 5315 acydburn
32 5315 acydburn
        function main($id, $mode)
33 5315 acydburn
        {
34 5315 acydburn
                global $config, $db, $user, $auth, $template, $cache;
35 6015 acydburn
                global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix;
36 5315 acydburn
                global $safe_mode, $file_uploads;
37 5315 acydburn
38 5315 acydburn
                include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
39 5315 acydburn
40 5315 acydburn
                $this->default_variables();
41 5315 acydburn
42 5315 acydburn
                // Check and set some common vars
43 5315 acydburn
44 8120 kellanved
                $action                = (isset($_POST['update_details'])) ? 'update_details' : '';
45 8177 naderman
                $action                = (isset($_POST['download_file'])) ? 'download_file' : $action;
46 8177 naderman
                $action                = (isset($_POST['upload_file'])) ? 'upload_file' : $action;
47 8177 naderman
                $action                = (isset($_POST['upload_data'])) ? 'upload_data' : $action;
48 8177 naderman
                $action                = (isset($_POST['submit_file'])) ? 'submit_file' : $action;
49 8177 naderman
                $action                = (isset($_POST['remove_store'])) ? 'details' : $action;
50 5315 acydburn
51 8181 naderman
                $submit = (empty($action) && !isset($_POST['update']) && !isset($_POST['test_connection'])) ? false : true;
52 8120 kellanved
                $action = (empty($action)) ? request_var('action', '') : $action;
53 8120 kellanved
54 8120 kellanved
                $form_name = 'acp_lang';
55 8120 kellanved
                add_form_key('acp_lang');
56 8120 kellanved
57 5315 acydburn
                $lang_id = request_var('id', 0);
58 5315 acydburn
                if (isset($_POST['missing_file']))
59 5315 acydburn
                {
60 5315 acydburn
                        $missing_file = request_var('missing_file', array('' => 0));
61 5315 acydburn
                        list($_REQUEST['language_file'], ) = array_keys($missing_file);
62 5315 acydburn
                }
63 5315 acydburn
64 6511 acydburn
                $selected_lang_file = request_var('language_file', '|common.' . $phpEx);
65 6511 acydburn
66 6511 acydburn
                list($this->language_directory, $this->language_file) = explode('|', $selected_lang_file);
67 6511 acydburn
68 5315 acydburn
                $this->language_directory = basename($this->language_directory);
69 5315 acydburn
                $this->language_file = basename($this->language_file);
70 5315 acydburn
71 5315 acydburn
                $user->add_lang('acp/language');
72 5315 acydburn
                $this->tpl_name = 'acp_language';
73 5315 acydburn
                $this->page_title = 'ACP_LANGUAGE_PACKS';
74 5315 acydburn
75 8120 kellanved
                if ($submit && $action == 'upload_data' && request_var('test_connection', ''))
76 5562 davidmj
                {
77 5562 davidmj
                        $test_connection = false;
78 5562 davidmj
                        $action = 'upload_file';
79 5562 davidmj
                        $method = request_var('method', '');
80 5562 davidmj
81 5562 davidmj
                        include_once($phpbb_root_path . 'includes/functions_transfer.' . $phpEx);
82 5562 davidmj
83 5562 davidmj
                        switch ($method)
84 5562 davidmj
                        {
85 5562 davidmj
                                case 'ftp':
86 5562 davidmj
                                        $transfer = new ftp(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', ''));
87 5562 davidmj
                                break;
88 6073 acydburn
89 6139 acydburn
                                case 'ftp_fsock':
90 6139 acydburn
                                        $transfer = new ftp_fsock(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', ''));
91 6139 acydburn
                                break;
92 6139 acydburn
93 5562 davidmj
                                default:
94 6320 acydburn
                                        trigger_error($user->lang['INVALID_UPLOAD_METHOD'], E_USER_ERROR);
95 6320 acydburn
                                break;
96 5562 davidmj
                        }
97 5562 davidmj
98 5562 davidmj
                        $test_connection = $transfer->open_session();
99 5562 davidmj
                        $transfer->close_session();
100 5562 davidmj
                }
101 5562 davidmj
102 5315 acydburn
                switch ($action)
103 5315 acydburn
                {
104 5562 davidmj
                        case 'upload_file':
105 8120 kellanved
106 5562 davidmj
                                include_once($phpbb_root_path . 'includes/functions_transfer.' . $phpEx);
107 5562 davidmj
108 5562 davidmj
                                $method = request_var('method', '');
109 5562 davidmj
110 7872 acydburn
                                if (!class_exists($method))
111 7872 acydburn
                                {
112 7872 acydburn
                                        trigger_error('Method does not exist.', E_USER_ERROR);
113 7872 acydburn
                                }
114 7872 acydburn
115 5562 davidmj
                                $requested_data = call_user_func(array($method, 'data'));
116 5562 davidmj
                                foreach ($requested_data as $data => $default)
117 5562 davidmj
                                {
118 5562 davidmj
                                        $template->assign_block_vars('data', array(
119 5562 davidmj
                                                'DATA'                => $data,
120 5562 davidmj
                                                'NAME'                => $user->lang[strtoupper($method . '_' . $data)],
121 5562 davidmj
                                                'EXPLAIN'        => $user->lang[strtoupper($method . '_' . $data) . '_EXPLAIN'],
122 5765 acydburn
                                                'DEFAULT'        => (!empty($_REQUEST[$data])) ? request_var($data, '') : $default
123 5562 davidmj
                                        ));
124 5562 davidmj
                                }
125 5562 davidmj
126 6139 acydburn
                                $hidden_data = build_hidden_fields(array(
127 7241 acydburn
                                        'file'                        => $this->language_file,
128 7241 acydburn
                                        'dir'                        => $this->language_directory,
129 7241 acydburn
                                        'language_file'        => $selected_lang_file,
130 7241 acydburn
                                        'method'                => $method)
131 6139 acydburn
                                );
132 5562 davidmj
133 6584 acydburn
                                $hidden_data .= build_hidden_fields(array('entry' => $_POST['entry']), true, STRIP);
134 6584 acydburn
135 5562 davidmj
                                $template->assign_vars(array(
136 5562 davidmj
                                        'S_UPLOAD'        => true,
137 5562 davidmj
                                        'NAME'                => $method,
138 5562 davidmj
                                        'U_ACTION'        => $this->u_action . "&amp;id=$lang_id&amp;action=upload_data",
139 6719 acydburn
                                        'U_BACK'        => $this->u_action . "&amp;id=$lang_id&amp;action=details&amp;language_file=" . urlencode($selected_lang_file),
140 5562 davidmj
                                        'HIDDEN'        => $hidden_data,
141 5562 davidmj
142 5562 davidmj
                                        'S_CONNECTION_SUCCESS'                => (request_var('test_connection', '') && $test_connection === true) ? true : false,
143 6048 acydburn
                                        'S_CONNECTION_FAILED'                => (request_var('test_connection', '') && $test_connection !== true) ? true : false
144 5562 davidmj
                                ));
145 5678 acydburn
                        break;
146 5562 davidmj
147 5315 acydburn
                        case 'update_details':
148 5315 acydburn
149 8123 kellanved
                                if (!$submit || !check_form_key($form_name))
150 8120 kellanved
                                {
151 8120 kellanved
                                        trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING);
152 8120 kellanved
                                }
153 8120 kellanved
154 5315 acydburn
                                if (!$lang_id)
155 5315 acydburn
                                {
156 6320 acydburn
                                        trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
157 5315 acydburn
                                }
158 5315 acydburn
159 6165 acydburn
                                $sql = 'SELECT *
160 6165 acydburn
                                        FROM ' . LANG_TABLE . "
161 5315 acydburn
                                        WHERE lang_id = $lang_id";
162 5315 acydburn
                                $result = $db->sql_query($sql);
163 5315 acydburn
                                $row = $db->sql_fetchrow($result);
164 5315 acydburn
                                $db->sql_freeresult($result);
165 5315 acydburn
166 5315 acydburn
                                $sql_ary        = array(
167 5315 acydburn
                                        'lang_english_name'                => request_var('lang_english_name', $row['lang_english_name']),
168 7920 acydburn
                                        'lang_local_name'                => utf8_normalize_nfc(request_var('lang_local_name', $row['lang_local_name'], true)),
169 7920 acydburn
                                        'lang_author'                        => utf8_normalize_nfc(request_var('lang_author', $row['lang_author'], true)),
170 5315 acydburn
                                );
171 5315 acydburn
172 8147 acydburn
                                $db->sql_query('UPDATE ' . LANG_TABLE . '
173 5315 acydburn
                                        SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
174 5315 acydburn
                                        WHERE lang_id = ' . $lang_id);
175 7007 acydburn
176 5315 acydburn
                                add_log('admin', 'LOG_LANGUAGE_PACK_UPDATED', $sql_ary['lang_english_name']);
177 5315 acydburn
178 5558 acydburn
                                trigger_error($user->lang['LANGUAGE_DETAILS_UPDATED'] . adm_back_link($this->u_action));
179 5315 acydburn
                        break;
180 5315 acydburn
181 5315 acydburn
                        case 'submit_file':
182 5315 acydburn
                        case 'download_file':
183 5822 davidmj
                        case 'upload_data':
184 8763 acydburn
185 8123 kellanved
                                if (!$submit || !check_form_key($form_name))
186 8120 kellanved
                                {
187 8120 kellanved
                                        trigger_error($user->lang['FORM_INVALID']. adm_back_link($this->u_action), E_USER_WARNING);
188 8120 kellanved
                                }
189 5315 acydburn
190 8075 acydburn
                                if (!$lang_id || empty($_POST['entry']))
191 5315 acydburn
                                {
192 6320 acydburn
                                        trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
193 5315 acydburn
                                }
194 5315 acydburn
195 8075 acydburn
                                if ($this->language_directory != 'email' && !is_array($_POST['entry']))
196 8075 acydburn
                                {
197 8075 acydburn
                                        trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
198 8075 acydburn
                                }
199 8075 acydburn
200 5315 acydburn
                                if (!$this->language_file || (!$this->language_directory && !in_array($this->language_file, $this->main_files)))
201 5315 acydburn
                                {
202 6320 acydburn
                                        trigger_error($user->lang['NO_FILE_SELECTED'] . adm_back_link($this->u_action), E_USER_WARNING);
203 5315 acydburn
                                }
204 5315 acydburn
205 6165 acydburn
                                $sql = 'SELECT *
206 6165 acydburn
                                        FROM ' . LANG_TABLE . "
207 5315 acydburn
                                        WHERE lang_id = $lang_id";
208 5315 acydburn
                                $result = $db->sql_query($sql);
209 5315 acydburn
                                $row = $db->sql_fetchrow($result);
210 5315 acydburn
                                $db->sql_freeresult($result);
211 5315 acydburn
212 8117 acydburn
                                if (!$row)
213 8117 acydburn
                                {
214 8117 acydburn
                                        trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
215 8117 acydburn
                                }
216 8117 acydburn
217 8117 acydburn
                                // Before we attempt to write anything let's check if the admin really chose a correct filename
218 8117 acydburn
                                switch ($this->language_directory)
219 8117 acydburn
                                {
220 8117 acydburn
                                        case 'email':
221 8117 acydburn
                                                // Get email templates
222 8117 acydburn
                                                $email_files = filelist($phpbb_root_path . 'language/' . $row['lang_iso'], 'email', 'txt');
223 8117 acydburn
                                                $email_files = $email_files['email/'];
224 8117 acydburn
225 8117 acydburn
                                                if (!in_array($this->language_file, $email_files))
226 8117 acydburn
                                                {
227 8117 acydburn
                                                        trigger_error($user->lang['WRONG_LANGUAGE_FILE'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id), E_USER_WARNING);
228 8117 acydburn
                                                }
229 8117 acydburn
                                        break;
230 8117 acydburn
231 8117 acydburn
                                        case 'acp':
232 8117 acydburn
                                                // Get acp files
233 8117 acydburn
                                                $acp_files = filelist($phpbb_root_path . 'language/' . $row['lang_iso'], 'acp', $phpEx);
234 8117 acydburn
                                                $acp_files = $acp_files['acp/'];
235 8117 acydburn
236 8117 acydburn
                                                if (!in_array($this->language_file, $acp_files))
237 8117 acydburn
                                                {
238 8117 acydburn
                                                        trigger_error($user->lang['WRONG_LANGUAGE_FILE'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id), E_USER_WARNING);
239 8117 acydburn
                                                }
240 8117 acydburn
                                        break;
241 8117 acydburn
242 8117 acydburn
                                        case 'mods':
243 8117 acydburn
                                                // Get mod files
244 8117 acydburn
                                                $mods_files = filelist($phpbb_root_path . 'language/' . $row['lang_iso'], 'mods', $phpEx);
245 8117 acydburn
                                                $mods_files = (isset($mods_files['mods/'])) ? $mods_files['mods/'] : array();
246 8117 acydburn
247 8117 acydburn
                                                if (!in_array($this->language_file, $mods_files))
248 8117 acydburn
                                                {
249 8117 acydburn
                                                        trigger_error($user->lang['WRONG_LANGUAGE_FILE'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id), E_USER_WARNING);
250 8117 acydburn
                                                }
251 8117 acydburn
                                        break;
252 8117 acydburn
253 8117 acydburn
                                        default:
254 8117 acydburn
                                                if (!in_array($this->language_file, $this->main_files))
255 8117 acydburn
                                                {
256 8117 acydburn
                                                        trigger_error($user->lang['WRONG_LANGUAGE_FILE'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id), E_USER_WARNING);
257 8117 acydburn
                                                }
258 8117 acydburn
                                        break;
259 8117 acydburn
                                }
260 8117 acydburn
261 5315 acydburn
                                if (!$safe_mode)
262 5315 acydburn
                                {
263 5315 acydburn
                                        $mkdir_ary = array('language', 'language/' . $row['lang_iso']);
264 8763 acydburn
265 5315 acydburn
                                        if ($this->language_directory)
266 5315 acydburn
                                        {
267 5315 acydburn
                                                $mkdir_ary[] = 'language/' . $row['lang_iso'] . '/' . $this->language_directory;
268 5315 acydburn
                                        }
269 8763 acydburn
270 5315 acydburn
                                        foreach ($mkdir_ary as $dir)
271 5315 acydburn
                                        {
272 5315 acydburn
                                                $dir = $phpbb_root_path . 'store/' . $dir;
273 8763 acydburn
274 5315 acydburn
                                                if (!is_dir($dir))
275 5315 acydburn
                                                {
276 5315 acydburn
                                                        if (!@mkdir($dir, 0777))
277 5315 acydburn
                                                        {
278 6320 acydburn
                                                                trigger_error("Could not create directory $dir", E_USER_ERROR);
279 5315 acydburn
                                                        }
280 8780 acydburn
                                                        @chmod($dir, 0777);
281 5315 acydburn
                                                }
282 5315 acydburn
                                        }
283 5315 acydburn
                                }
284 5315 acydburn
285 5315 acydburn
                                // Get target filename for storage folder
286 5315 acydburn
                                $filename = $this->get_filename($row['lang_iso'], $this->language_directory, $this->language_file, true, true);
287 7872 acydburn
                                $fp = @fopen($phpbb_root_path . $filename, 'wb');
288 5315 acydburn
289 5315 acydburn
                                if (!$fp)
290 5315 acydburn
                                {
291 6719 acydburn
                                        trigger_error(sprintf($user->lang['UNABLE_TO_WRITE_FILE'], $filename) . adm_back_link($this->u_action . '&amp;id=' . $lang_id . '&amp;action=details&amp;language_file=' . urlencode($selected_lang_file)), E_USER_WARNING);
292 5315 acydburn
                                }
293 5315 acydburn
294 5315 acydburn
                                if ($this->language_directory == 'email')
295 5315 acydburn
                                {
296 5315 acydburn
                                        // Email Template
297 6139 acydburn
                                        $entry = $this->prepare_lang_entry($_POST['entry'], false);
298 5765 acydburn
                                        fwrite($fp, $entry);
299 5315 acydburn
                                }
300 5315 acydburn
                                else
301 5315 acydburn
                                {
302 5315 acydburn
                                        $name = (($this->language_directory) ? $this->language_directory . '_' : '') . $this->language_file;
303 5315 acydburn
                                        $header = str_replace(array('{FILENAME}', '{LANG_NAME}', '{CHANGED}', '{AUTHOR}'), array($name, $row['lang_english_name'], date('Y-m-d', time()), $row['lang_author']), $this->language_file_header);
304 5315 acydburn
305 5315 acydburn
                                        if (strpos($this->language_file, 'help_') === 0)
306 5315 acydburn
                                        {
307 5315 acydburn
                                                // Help File
308 5315 acydburn
                                                $header .= '$help = array(' . "\n";
309 5315 acydburn
                                                fwrite($fp, $header);
310 5315 acydburn
311 5315 acydburn
                                                foreach ($_POST['entry'] as $key => $value)
312 5315 acydburn
                                                {
313 5315 acydburn
                                                        if (!is_array($value))
314 5315 acydburn
                                                        {
315 6139 acydburn
                                                                continue;
316 5315 acydburn
                                                        }
317 6139 acydburn
318 6139 acydburn
                                                        $entry = "\tarray(\n";
319 8763 acydburn
320 6139 acydburn
                                                        foreach ($value as $_key => $_value)
321 5315 acydburn
                                                        {
322 6139 acydburn
                                                                $entry .= "\t\t" . (int) $_key . "\t=> '" . $this->prepare_lang_entry($_value) . "',\n";
323 5315 acydburn
                                                        }
324 6114 acydburn
325 6139 acydburn
                                                        $entry .= "\t),\n";
326 5315 acydburn
                                                        fwrite($fp, $entry);
327 6114 acydburn
                                                }
328 6872 acydburn
329 6872 acydburn
                                                $footer = ");\n\n?>";
330 6872 acydburn
                                                fwrite($fp, $footer);
331 5315 acydburn
                                        }
332 5315 acydburn
                                        else
333 5315 acydburn
                                        {
334 5315 acydburn
                                                // Language File
335 5315 acydburn
                                                $header .= $this->lang_header;
336 5315 acydburn
                                                fwrite($fp, $header);
337 5315 acydburn
338 5315 acydburn
                                                foreach ($_POST['entry'] as $key => $value)
339 5315 acydburn
                                                {
340 6139 acydburn
                                                        $entry = $this->format_lang_array($key, $value);
341 5315 acydburn
                                                        fwrite($fp, $entry);
342 6139 acydburn
                                                }
343 6872 acydburn
344 6872 acydburn
                                                $footer = "));\n\n?>";
345 6872 acydburn
                                                fwrite($fp, $footer);
346 5315 acydburn
                                        }
347 5315 acydburn
                                }
348 5315 acydburn
349 5315 acydburn
                                fclose($fp);
350 5315 acydburn
351 5315 acydburn
                                if ($action == 'download_file')
352 5315 acydburn
                                {
353 5315 acydburn
                                        header('Pragma: no-cache');
354 5315 acydburn
                                        header('Content-Type: application/octetstream; name="' . $this->language_file . '"');
355 5315 acydburn
                                        header('Content-disposition: attachment; filename=' . $this->language_file);
356 5315 acydburn
357 7872 acydburn
                                        $fp = @fopen($phpbb_root_path . $filename, 'rb');
358 5315 acydburn
                                        while ($buffer = fread($fp, 1024))
359 5315 acydburn
                                        {
360 5315 acydburn
                                                echo $buffer;
361 5315 acydburn
                                        }
362 5315 acydburn
                                        fclose($fp);
363 7007 acydburn
364 7007 acydburn
                                        add_log('admin', 'LOG_LANGUAGE_FILE_SUBMITTED', $this->language_file);
365 7007 acydburn
366 5315 acydburn
                                        exit;
367 5315 acydburn
                                }
368 5822 davidmj
                                else if ($action == 'upload_data')
369 5822 davidmj
                                {
370 6139 acydburn
                                        $sql = 'SELECT lang_iso
371 6139 acydburn
                                                FROM ' . LANG_TABLE . "
372 5822 davidmj
                                                WHERE lang_id = $lang_id";
373 5822 davidmj
                                        $result = $db->sql_query($sql);
374 5822 davidmj
                                        $row = $db->sql_fetchrow($result);
375 5822 davidmj
                                        $db->sql_freeresult($result);
376 5822 davidmj
377 5822 davidmj
                                        $file = request_var('file', '');
378 5822 davidmj
                                        $dir = request_var('dir', '');
379 5822 davidmj
380 6511 acydburn
                                        $selected_lang_file = $dir . '|' . $file;
381 6511 acydburn
382 5822 davidmj
                                        $old_file = '/' . $this->get_filename($row['lang_iso'], $dir, $file, false, true);
383 5822 davidmj
                                        $lang_path = 'language/' . $row['lang_iso'] . '/' . (($dir) ? $dir . '/' : '');
384 5822 davidmj
385 5822 davidmj
                                        include_once($phpbb_root_path . 'includes/functions_transfer.' . $phpEx);
386 5822 davidmj
                                        $method = request_var('method', '');
387 5822 davidmj
388 7241 acydburn
                                        if ($method != 'ftp' && $method != 'ftp_fsock')
389 5822 davidmj
                                        {
390 7241 acydburn
                                                trigger_error($user->lang['INVALID_UPLOAD_METHOD'], E_USER_ERROR);
391 5822 davidmj
                                        }
392 5822 davidmj
393 7241 acydburn
                                        $transfer = new $method(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', ''));
394 7241 acydburn
395 6048 acydburn
                                        if (($result = $transfer->open_session()) !== true)
396 5822 davidmj
                                        {
397 6511 acydburn
                                                trigger_error($user->lang[$result] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id . '&amp;language_file=' . urlencode($selected_lang_file)), E_USER_WARNING);
398 5822 davidmj
                                        }
399 5822 davidmj
400 5822 davidmj
                                        $transfer->rename($lang_path . $file, $lang_path . $file . '.bak');
401 6925 acydburn
                                        $result = $transfer->copy_file('store/' . $lang_path . $file, $lang_path . $file);
402 6925 acydburn
403 6925 acydburn
                                        if ($result === false)
404 6925 acydburn
                                        {
405 6925 acydburn
                                                // If failed, try to rename again and print error out...
406 6930 acydburn
                                                $transfer->delete_file($lang_path . $file);
407 6925 acydburn
                                                $transfer->rename($lang_path . $file . '.bak', $lang_path . $file);
408 6925 acydburn
409 6925 acydburn
                                                trigger_error($user->lang['UPLOAD_FAILED'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id . '&amp;language_file=' . urlencode($selected_lang_file)), E_USER_WARNING);
410 6925 acydburn
                                        }
411 6925 acydburn
412 5822 davidmj
                                        $transfer->close_session();
413 5822 davidmj
414 6139 acydburn
                                        // Remove from storage folder
415 7872 acydburn
                                        if (file_exists($phpbb_root_path . 'store/' . $lang_path . $file))
416 7872 acydburn
                                        {
417 7872 acydburn
                                                @unlink($phpbb_root_path . 'store/' . $lang_path . $file);
418 7872 acydburn
                                        }
419 6139 acydburn
420 5822 davidmj
                                        add_log('admin', 'LOG_LANGUAGE_FILE_REPLACED', $file);
421 5822 davidmj
422 6511 acydburn
                                        trigger_error($user->lang['UPLOAD_COMPLETED'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id . '&amp;language_file=' . urlencode($selected_lang_file)));
423 5822 davidmj
                                }
424 7007 acydburn
425 7007 acydburn
                                add_log('admin', 'LOG_LANGUAGE_FILE_SUBMITTED', $this->language_file);
426 5315 acydburn
                                $action = 'details';
427 5315 acydburn
428 5315 acydburn
                        // no break;
429 5315 acydburn
430 5315 acydburn
                        case 'details':
431 5315 acydburn
432 5315 acydburn
                                if (!$lang_id)
433 5315 acydburn
                                {
434 6320 acydburn
                                        trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
435 5315 acydburn
                                }
436 8763 acydburn
437 5315 acydburn
                                $this->page_title = 'LANGUAGE_PACK_DETAILS';
438 5315 acydburn
439 6165 acydburn
                                $sql = 'SELECT *
440 6165 acydburn
                                        FROM ' . LANG_TABLE . '
441 5315 acydburn
                                        WHERE lang_id = ' . $lang_id;
442 5315 acydburn
                                $result = $db->sql_query($sql);
443 5315 acydburn
                                $lang_entries = $db->sql_fetchrow($result);
444 5315 acydburn
                                $db->sql_freeresult($result);
445 8763 acydburn
446 5315 acydburn
                                $lang_iso = $lang_entries['lang_iso'];
447 5315 acydburn
                                $missing_vars = $missing_files = array();
448 5315 acydburn
449 5315 acydburn
                                // Get email templates
450 5315 acydburn
                                $email_files = filelist($phpbb_root_path . 'language/' . $config['default_lang'], 'email', 'txt');
451 5315 acydburn
                                $email_files = $email_files['email/'];
452 5315 acydburn
453 5315 acydburn
                                // Get acp files
454 5315 acydburn
                                $acp_files = filelist($phpbb_root_path . 'language/' . $config['default_lang'], 'acp', $phpEx);
455 5315 acydburn
                                $acp_files = $acp_files['acp/'];
456 5315 acydburn
457 5315 acydburn
                                // Get mod files
458 5315 acydburn
                                $mods_files = filelist($phpbb_root_path . 'language/' . $config['default_lang'], 'mods', $phpEx);
459 5315 acydburn
                                $mods_files = (isset($mods_files['mods/'])) ? $mods_files['mods/'] : array();
460 5315 acydburn
461 5315 acydburn
                                // Check if our current filename matches the files
462 5315 acydburn
                                switch ($this->language_directory)
463 5315 acydburn
                                {
464 5315 acydburn
                                        case 'email':
465 5315 acydburn
                                                if (!in_array($this->language_file, $email_files))
466 5315 acydburn
                                                {
467 6320 acydburn
                                                        trigger_error($user->lang['WRONG_LANGUAGE_FILE'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id), E_USER_WARNING);
468 5315 acydburn
                                                }
469 5315 acydburn
                                        break;
470 5315 acydburn
471 5315 acydburn
                                        case 'acp':
472 5315 acydburn
                                                if (!in_array($this->language_file, $acp_files))
473 5315 acydburn
                                                {
474 6320 acydburn
                                                        trigger_error($user->lang['WRONG_LANGUAGE_FILE'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id), E_USER_WARNING);
475 5315 acydburn
                                                }
476 5315 acydburn
                                        break;
477 5315 acydburn
478 5315 acydburn
                                        case 'mods':
479 5315 acydburn
                                                if (!in_array($this->language_file, $mods_files))
480 5315 acydburn
                                                {
481 6320 acydburn
                                                        trigger_error($user->lang['WRONG_LANGUAGE_FILE'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id), E_USER_WARNING);
482 5315 acydburn
                                                }
483 5315 acydburn
                                        break;
484 5315 acydburn
485 5315 acydburn
                                        default:
486 5315 acydburn
                                                if (!in_array($this->language_file, $this->main_files))
487 5315 acydburn
                                                {
488 6320 acydburn
                                                        trigger_error($user->lang['WRONG_LANGUAGE_FILE'] . adm_back_link($this->u_action . '&amp;action=details&amp;id=' . $lang_id), E_USER_WARNING);
489 5315 acydburn
                                                }
490 5315 acydburn
                                }
491 8763 acydburn
492 5315 acydburn
                                if (isset($_POST['remove_store']))
493 5315 acydburn
                                {
494 5315 acydburn
                                        $store_filename = $this->get_filename($lang_iso, $this->language_directory, $this->language_file, true, true);
495 7872 acydburn
496 7872 acydburn
                                        if (file_exists($phpbb_root_path . $store_filename))
497 7872 acydburn
                                        {
498 7872 acydburn
                                                @unlink($phpbb_root_path . $store_filename);
499 7872 acydburn
                                        }
500 5315 acydburn
                                }
501 5315 acydburn
502 5562 davidmj
                                include_once($phpbb_root_path . 'includes/functions_transfer.' . $phpEx);
503 5562 davidmj
504 5562 davidmj
                                $methods = transfer::methods();
505 5562 davidmj
506 5562 davidmj
                                foreach ($methods as $method)
507 5562 davidmj
                                {
508 5562 davidmj
                                        $template->assign_block_vars('buttons', array(
509 5562 davidmj
                                                'VALUE' => $method
510 5562 davidmj
                                        ));
511 5562 davidmj
                                }
512 5562 davidmj
513 5315 acydburn
                                $template->assign_vars(array(
514 5315 acydburn
                                        'S_DETAILS'                        => true,
515 5558 acydburn
                                        'U_ACTION'                        => $this->u_action . "&amp;action=details&amp;id=$lang_id",
516 5558 acydburn
                                        'U_BACK'                        => $this->u_action,
517 5315 acydburn
                                        'LANG_LOCAL_NAME'        => $lang_entries['lang_local_name'],
518 5315 acydburn
                                        'LANG_ENGLISH_NAME'        => $lang_entries['lang_english_name'],
519 5315 acydburn
                                        'LANG_ISO'                        => $lang_entries['lang_iso'],
520 5315 acydburn
                                        'LANG_AUTHOR'                => $lang_entries['lang_author'],
521 5562 davidmj
                                        'ALLOW_UPLOAD'                => sizeof($methods)
522 5315 acydburn
                                        )
523 5315 acydburn
                                );
524 5315 acydburn
525 5315 acydburn
                                // If current lang is different from the default lang, then first try to grab missing/additional vars
526 5315 acydburn
                                if ($lang_iso != $config['default_lang'])
527 5315 acydburn
                                {
528 5315 acydburn
                                        $is_missing_var = false;
529 5315 acydburn
530 5315 acydburn
                                        foreach ($this->main_files as $file)
531 5315 acydburn
                                        {
532 5315 acydburn
                                                if (file_exists($phpbb_root_path . $this->get_filename($lang_iso, '', $file)))
533 5315 acydburn
                                                {
534 5315 acydburn
                                                        $missing_vars[$file] = $this->compare_language_files($config['default_lang'], $lang_iso, '', $file);
535 8763 acydburn
536 5315 acydburn
                                                        if (sizeof($missing_vars[$file]))
537 5315 acydburn
                                                        {
538 5315 acydburn
                                                                $is_missing_var = true;
539 5315 acydburn
                                                        }
540 5315 acydburn
                                                }
541 5315 acydburn
                                                else
542 5315 acydburn
                                                {
543 5315 acydburn
                                                        $missing_files[] = $this->get_filename($lang_iso, '', $file);
544 5315 acydburn
                                                }
545 5315 acydburn
                                        }
546 5315 acydburn
547 5315 acydburn
                                        // Now go through acp/mods directories
548 5315 acydburn
                                        foreach ($acp_files as $file)
549 5315 acydburn
                                        {
550 5315 acydburn
                                                if (file_exists($phpbb_root_path . $this->get_filename($lang_iso, 'acp', $file)))
551 5315 acydburn
                                                {
552 5315 acydburn
                                                        $missing_vars['acp/' . $file] = $this->compare_language_files($config['default_lang'], $lang_iso, 'acp', $file);
553 8763 acydburn
554 5315 acydburn
                                                        if (sizeof($missing_vars['acp/' . $file]))
555 5315 acydburn
                                                        {
556 5315 acydburn
                                                                $is_missing_var = true;
557 5315 acydburn
                                                        }
558 5315 acydburn
                                                }
559 5315 acydburn
                                                else
560 5315 acydburn
                                                {
561 5315 acydburn
                                                        $missing_files[] = $this->get_filename($lang_iso, 'acp', $file);
562 5315 acydburn
                                                }
563 5315 acydburn
                                        }
564 5315 acydburn
565 5315 acydburn
                                        if (sizeof($mods_files))
566 5315 acydburn
                                        {
567 5315 acydburn
                                                foreach ($mods_files as $file)
568 5315 acydburn
                                                {
569 5315 acydburn
                                                        if (file_exists($phpbb_root_path . $this->get_filename($lang_iso, 'mods', $file)))
570 5315 acydburn
                                                        {
571 5315 acydburn
                                                                $missing_vars['mods/' . $file] = $this->compare_language_files($config['default_lang'], $lang_iso, 'mods', $file);
572 8763 acydburn
573 5315 acydburn
                                                                if (sizeof($missing_vars['mods/' . $file]))
574 5315 acydburn
                                                                {
575 5315 acydburn
                                                                        $is_missing_var = true;
576 5315 acydburn
                                                                }
577 5315 acydburn
                                                        }
578 5315 acydburn
                                                        else
579 5315 acydburn
                                                        {
580 5315 acydburn
                                                                $missing_files[] = $this->get_filename($lang_iso, 'mods', $file);
581 5315 acydburn
                                                        }
582 5315 acydburn
                                                }
583 5315 acydburn
                                        }
584 8763 acydburn
585 5315 acydburn
                                        // More missing files... for example email templates?
586 5315 acydburn
                                        foreach ($email_files as $file)
587 5315 acydburn
                                        {
588 5315 acydburn
                                                if (!file_exists($phpbb_root_path . $this->get_filename($lang_iso, 'email', $file)))
589 5315 acydburn
                                                {
590 5315 acydburn
                                                        $missing_files[] = $this->get_filename($lang_iso, 'email', $file);
591 5315 acydburn
                                                }
592 5315 acydburn
                                        }
593 5315 acydburn
594 5315 acydburn
                                        if (sizeof($missing_files))
595 5315 acydburn
                                        {
596 5315 acydburn
                                                $template->assign_vars(array(
597 5315 acydburn
                                                        'S_MISSING_FILES'                => true,
598 5315 acydburn
                                                        'L_MISSING_FILES'                => sprintf($user->lang['THOSE_MISSING_LANG_FILES'], $lang_entries['lang_local_name']),
599 5315 acydburn
                                                        'MISSING_FILES'                        => implode('<br />', $missing_files))
600 6546 acydburn
                                                );
601 5315 acydburn
                                        }
602 5315 acydburn
603 5315 acydburn
                                        if ($is_missing_var)
604 5315 acydburn
                                        {
605 5315 acydburn
                                                $template->assign_vars(array(
606 5315 acydburn
                                                        'S_MISSING_VARS'                        => true,
607 5315 acydburn
                                                        'L_MISSING_VARS_EXPLAIN'        => sprintf($user->lang['THOSE_MISSING_LANG_VARIABLES'], $lang_entries['lang_local_name']),
608 5558 acydburn
                                                        'U_MISSING_ACTION'                        => $this->u_action . "&amp;action=$action&amp;id=$lang_id")
609 6546 acydburn
                                                );
610 5315 acydburn
611 5315 acydburn
                                                foreach ($missing_vars as $file => $vars)
612 5315 acydburn
                                                {
613 5315 acydburn
                                                        if (!sizeof($vars))
614 5315 acydburn
                                                        {
615 5315 acydburn
                                                                continue;
616 5315 acydburn
                                                        }
617 5315 acydburn
618 5315 acydburn
                                                        $template->assign_block_vars('missing', array(
619 5315 acydburn
                                                                'FILE'                        => $file,
620 5315 acydburn
                                                                'TPL'                        => $this->print_language_entries($vars, '', false),
621 5315 acydburn
                                                                'KEY'                        => (strpos($file, '/') === false) ? '|' . $file : str_replace('/', '|', $file))
622 5315 acydburn
                                                        );
623 5315 acydburn
                                                }
624 5315 acydburn
                                        }
625 5315 acydburn
                                }
626 5315 acydburn
627 5315 acydburn
                                // Main language files
628 5315 acydburn
                                $s_lang_options = '<option value="|common.' . $phpEx . '" class="sep">' . $user->lang['LANGUAGE_FILES'] . '</option>';
629 5315 acydburn
                                foreach ($this->main_files as $file)
630 5315 acydburn
                                {
631 5315 acydburn
                                        if (strpos($file, 'help_') === 0)
632 5315 acydburn
                                        {
633 5315 acydburn
                                                continue;
634 5315 acydburn
                                        }
635 5315 acydburn
636 5315 acydburn
                                        $prefix = (file_exists($phpbb_root_path . $this->get_filename($lang_iso, '', $file, true, true))) ? '* ' : '';
637 5315 acydburn
638 5315 acydburn
                                        $selected = (!$this->language_directory && $this->language_file == $file) ? ' selected="selected"' : '';
639 5315 acydburn
                                        $s_lang_options .= '<option value="|' . $file . '"' . $selected . '>' . $prefix . $file . '</option>';
640 5315 acydburn
                                }
641 6546 acydburn
642 5315 acydburn
                                // Help Files
643 5315 acydburn
                                $s_lang_options .= '<option value="|common.' . $phpEx . '" class="sep">' . $user->lang['HELP_FILES'] . '</option>';
644 5315 acydburn
                                foreach ($this->main_files as $file)
645 5315 acydburn
                                {
646 5315 acydburn
                                        if (strpos($file, 'help_') !== 0)
647 5315 acydburn
                                        {
648 5315 acydburn
                                                continue;
649 5315 acydburn
                                        }
650 5315 acydburn
651 5315 acydburn
                                        $prefix = (file_exists($phpbb_root_path . $this->get_filename($lang_iso, '', $file, true, true))) ? '* ' : '';
652 5315 acydburn
653 5315 acydburn
                                        $selected = (!$this->language_directory && $this->language_file == $file) ? ' selected="selected"' : '';
654 5315 acydburn
                                        $s_lang_options .= '<option value="|' . $file . '"' . $selected . '>' . $prefix . $file . '</option>';
655 5315 acydburn
                                }
656 5315 acydburn
657 5315 acydburn
                                // Now every other language directory
658 5315 acydburn
                                $check_files = array('email', 'acp', 'mods');
659 5315 acydburn
660 5315 acydburn
                                foreach ($check_files as $check)
661 5315 acydburn
                                {
662 5315 acydburn
                                        if (!sizeof(${$check . '_files'}))
663 5315 acydburn
                                        {
664 5315 acydburn
                                                continue;
665 5315 acydburn
                                        }
666 5315 acydburn
667 5315 acydburn
                                        $s_lang_options .= '<option value="|common.' . $phpEx . '" class="sep">' . $user->lang[strtoupper($check) . '_FILES'] . '</option>';
668 6546 acydburn
669 5315 acydburn
                                        foreach (${$check . '_files'} as $file)
670 5315 acydburn
                                        {
671 5315 acydburn
                                                $prefix = (file_exists($phpbb_root_path . $this->get_filename($lang_iso, $check, $file, true, true))) ? '* ' : '';
672 5315 acydburn
673 5315 acydburn
                                                $selected = ($this->language_directory == $check && $this->language_file == $file) ? ' selected="selected"' : '';
674 5315 acydburn
                                                $s_lang_options .= '<option value="' . $check . '|' . $file . '"' . $selected . '>' . $prefix . $file . '</option>';
675 5315 acydburn
                                        }
676 5315 acydburn
                                }
677 5315 acydburn
678 5315 acydburn
                                // Get Language Entries - if saved within store folder, we take this one (with the option to remove it)
679 5315 acydburn
                                $lang = array();
680 5315 acydburn
681 5315 acydburn
                                $is_email_file = ($this->language_directory == 'email') ? true : false;
682 5315 acydburn
                                $is_help_file = (strpos($this->language_file, 'help_') === 0) ? true : false;
683 5315 acydburn
684 5315 acydburn
                                $file_from_store = (file_exists($phpbb_root_path . $this->get_filename($lang_iso, $this->language_directory, $this->language_file, true, true))) ? true : false;
685 5315 acydburn
                                $no_store_filename = $this->get_filename($lang_iso, $this->language_directory, $this->language_file);
686 5315 acydburn
687 5315 acydburn
                                if (!$file_from_store && !file_exists($phpbb_root_path . $no_store_filename))
688 5315 acydburn
                                {
689 5315 acydburn
                                        $print_message = sprintf($user->lang['MISSING_LANGUAGE_FILE'], $no_store_filename);
690 5315 acydburn
                                }
691 5315 acydburn
                                else
692 5315 acydburn
                                {
693 5315 acydburn
                                        if ($is_email_file)
694 5315 acydburn
                                        {
695 5422 davidmj
                                                $lang = file_get_contents($phpbb_root_path . $this->get_filename($lang_iso, $this->language_directory, $this->language_file, $file_from_store));
696 5315 acydburn
                                        }
697 5315 acydburn
                                        else
698 5315 acydburn
                                        {
699 5678 acydburn
                                                $help = array();
700 5315 acydburn
                                                include($phpbb_root_path . $this->get_filename($lang_iso, $this->language_directory, $this->language_file, $file_from_store));
701 5315 acydburn
702 5315 acydburn
                                                if ($is_help_file)
703 5315 acydburn
                                                {
704 5315 acydburn
                                                        $lang = $help;
705 5315 acydburn
                                                        unset($help);
706 5315 acydburn
                                                }
707 5315 acydburn
                                        }
708 6546 acydburn
709 5315 acydburn
                                        $print_message = (($this->language_directory) ? $this->language_directory . '/' : '') . $this->language_file;
710 5315 acydburn
                                }
711 5315 acydburn
712 5315 acydburn
                                // Normal language pack entries
713 5315 acydburn
                                $template->assign_vars(array(
714 5558 acydburn
                                        'U_ENTRY_ACTION'                => $this->u_action . "&amp;action=details&amp;id=$lang_id#entries",
715 5315 acydburn
                                        'S_EMAIL_FILE'                        => $is_email_file,
716 5315 acydburn
                                        'S_FROM_STORE'                        => $file_from_store,
717 5315 acydburn
                                        'S_LANG_OPTIONS'                => $s_lang_options,
718 5315 acydburn
                                        'PRINT_MESSAGE'                        => $print_message,
719 5315 acydburn
                                        )
720 5315 acydburn
                                );
721 6546 acydburn
722 5315 acydburn
                                if (!$is_email_file)
723 5315 acydburn
                                {
724 5315 acydburn
                                        $tpl = '';
725 5315 acydburn
                                        $name = (($this->language_directory) ? $this->language_directory . '/' : '') . $this->language_file;
726 5315 acydburn
727 5315 acydburn
                                        if (isset($missing_vars[$name]) && sizeof($missing_vars[$name]))
728 5315 acydburn
                                        {
729 6819 acydburn
                                                $tpl .= $this->print_language_entries($missing_vars[$name], '* ');
730 5315 acydburn
                                        }
731 6546 acydburn
732 6819 acydburn
                                        $tpl .= $this->print_language_entries($lang);
733 5315 acydburn
734 5315 acydburn
                                        $template->assign_var('TPL', $tpl);
735 5315 acydburn
                                        unset($tpl);
736 5315 acydburn
                                }
737 5315 acydburn
                                else
738 5315 acydburn
                                {
739 5315 acydburn
                                        $template->assign_vars(array(
740 5315 acydburn
                                                'LANG'                => $lang)
741 5315 acydburn
                                        );
742 6546 acydburn
743 5315 acydburn
                                        unset($lang);
744 5315 acydburn
                                }
745 5315 acydburn
746 5315 acydburn
                                return;
747 6546 acydburn
748 5315 acydburn
                        break;
749 5315 acydburn
750 5315 acydburn
                        case 'delete':
751 6546 acydburn
752 5315 acydburn
                                if (!$lang_id)
753 5315 acydburn
                                {
754 6320 acydburn
                                        trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
755 5315 acydburn
                                }
756 6546 acydburn
757 6165 acydburn
                                $sql = 'SELECT *
758 6165 acydburn
                                        FROM ' . LANG_TABLE . '
759 5315 acydburn
                                        WHERE lang_id = ' . $lang_id;
760 5315 acydburn
                                $result = $db->sql_query($sql);
761 5315 acydburn
                                $row = $db->sql_fetchrow($result);
762 5315 acydburn
                                $db->sql_freeresult($result);
763 5315 acydburn
764 5315 acydburn
                                if ($row['lang_iso'] == $config['default_lang'])
765 5315 acydburn
                                {
766 6320 acydburn
                                        trigger_error($user->lang['NO_REMOVE_DEFAULT_LANG'] . adm_back_link($this->u_action), E_USER_WARNING);
767 5315 acydburn
                                }
768 5315 acydburn
769 9669 leviatan21
                                if (confirm_box(true))
770 9669 leviatan21
                                {
771 9669 leviatan21
                                        $db->sql_query('DELETE FROM ' . LANG_TABLE . ' WHERE lang_id = ' . $lang_id);
772 5315 acydburn
773 9669 leviatan21
                                        $sql = 'UPDATE ' . USERS_TABLE . "
774 9669 leviatan21
                                                SET user_lang = '" . $db->sql_escape($config['default_lang']) . "'
775 9669 leviatan21
                                                WHERE user_lang = '" . $db->sql_escape($row['lang_iso']) . "'";
776 9669 leviatan21
                                        $db->sql_query($sql);
777 6546 acydburn
778 9669 leviatan21
                                        // We also need to remove the translated entries for custom profile fields - we want clean tables, don't we?
779 9669 leviatan21
                                        $sql = 'DELETE FROM ' . PROFILE_LANG_TABLE . ' WHERE lang_id = ' . $lang_id;
780 9669 leviatan21
                                        $db->sql_query($sql);
781 6839 acydburn
782 9669 leviatan21
                                        $sql = 'DELETE FROM ' . PROFILE_FIELDS_LANG_TABLE . ' WHERE lang_id = ' . $lang_id;
783 9669 leviatan21
                                        $db->sql_query($sql);
784 6839 acydburn
785 9669 leviatan21
                                        $sql = 'DELETE FROM ' . STYLES_IMAGESET_DATA_TABLE . " WHERE image_lang = '" . $db->sql_escape($row['lang_iso']) . "'";
786 9669 leviatan21
                                        $result = $db->sql_query($sql);
787 7404 davidmj
788 9669 leviatan21
                                        $cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
789 7404 davidmj
790 9669 leviatan21
                                        add_log('admin', 'LOG_LANGUAGE_PACK_DELETED', $row['lang_english_name']);
791 6546 acydburn
792 9669 leviatan21
                                        trigger_error(sprintf($user->lang['LANGUAGE_PACK_DELETED'], $row['lang_english_name']) . adm_back_link($this->u_action));
793 9669 leviatan21
                                }
794 9669 leviatan21
                                else
795 9669 leviatan21
                                {
796 9669 leviatan21
                                        $s_hidden_fields = array(
797 9669 leviatan21
                                                'i'                        => $id,
798 9669 leviatan21
                                                'mode'                => $mode,
799 9669 leviatan21
                                                'action'        => $action,
800 9669 leviatan21
                                                'id'                => $lang_id,
801 9669 leviatan21
                                        );
802 9669 leviatan21
                                        confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields($s_hidden_fields));
803 9669 leviatan21
                                }
804 5315 acydburn
                        break;
805 5315 acydburn
806 5315 acydburn
                        case 'install':
807 5315 acydburn
                                $lang_iso = request_var('iso', '');
808 5315 acydburn
                                $lang_iso = basename($lang_iso);
809 5315 acydburn
810 5315 acydburn
                                if (!$lang_iso || !file_exists("{$phpbb_root_path}language/$lang_iso/iso.txt"))
811 5315 acydburn
                                {
812 6320 acydburn
                                        trigger_error($user->lang['LANGUAGE_PACK_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING);
813 5315 acydburn
                                }
814 5315 acydburn
815 5315 acydburn
                                $file = file("{$phpbb_root_path}language/$lang_iso/iso.txt");
816 5315 acydburn
817 5315 acydburn
                                $lang_pack = array(
818 5315 acydburn
                                        'iso'                => $lang_iso,
819 6015 acydburn
                                        'name'                => trim(htmlspecialchars($file[0])),
820 6546 acydburn
                                        'local_name'=> trim(htmlspecialchars($file[1], ENT_COMPAT, 'UTF-8')),
821 6546 acydburn
                                        'author'        => trim(htmlspecialchars($file[2], ENT_COMPAT, 'UTF-8'))
822 5315 acydburn
                                );
823 5315 acydburn
                                unset($file);
824 5315 acydburn
825 6165 acydburn
                                $sql = 'SELECT lang_iso
826 6165 acydburn
                                        FROM ' . LANG_TABLE . "
827 5315 acydburn
                                        WHERE lang_iso = '" . $db->sql_escape($lang_iso) . "'";
828 5315 acydburn
                                $result = $db->sql_query($sql);
829 6546 acydburn
                                $row = $db->sql_fetchrow($result);
830 6546 acydburn
                                $db->sql_freeresult($result);
831 5315 acydburn
832 6561 acydburn
                                if ($row)
833 5315 acydburn
                                {
834 6320 acydburn
                                        trigger_error($user->lang['LANGUAGE_PACK_ALREADY_INSTALLED'] . adm_back_link($this->u_action), E_USER_WARNING);
835 5315 acydburn
                                }
836 5315 acydburn
837 5315 acydburn
                                if (!$lang_pack['name'] || !$lang_pack['local_name'])
838 5315 acydburn
                                {
839 6320 acydburn
                                        trigger_error($user->lang['INVALID_LANGUAGE_PACK'] . adm_back_link($this->u_action), E_USER_WARNING);
840 5315 acydburn
                                }
841 6546 acydburn
842 5315 acydburn
                                // Add language pack
843 5315 acydburn
                                $sql_ary = array(
844 5315 acydburn
                                        'lang_iso'                        => $lang_pack['iso'],
845 5315 acydburn
                                        'lang_dir'                        => $lang_pack['iso'],
846 5315 acydburn
                                        'lang_english_name'        => $lang_pack['name'],
847 5315 acydburn
                                        'lang_local_name'        => $lang_pack['local_name'],
848 5315 acydburn
                                        'lang_author'                => $lang_pack['author']
849 5315 acydburn
                                );
850 5315 acydburn
851 5315 acydburn
                                $db->sql_query('INSERT INTO ' . LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary));
852 6839 acydburn
                                $lang_id = $db->sql_nextid();
853 6546 acydburn
854 7404 davidmj
                                $valid_localized = array(
855 7404 davidmj
                                        'icon_back_top', 'icon_contact_aim', 'icon_contact_email', 'icon_contact_icq', 'icon_contact_jabber', 'icon_contact_msnm', 'icon_contact_pm', 'icon_contact_yahoo', 'icon_contact_www', 'icon_post_delete', 'icon_post_edit', 'icon_post_info', 'icon_post_quote', 'icon_post_report', 'icon_user_online', 'icon_user_offline', 'icon_user_profile', 'icon_user_search', 'icon_user_warn', 'button_pm_forward', 'button_pm_new', 'button_pm_reply', 'button_topic_locked', 'button_topic_new', 'button_topic_reply',
856 7404 davidmj
                                );
857 7404 davidmj
858 7404 davidmj
                                $sql_ary = array();
859 7404 davidmj
860 7404 davidmj
                                $sql = 'SELECT *
861 7404 davidmj
                                        FROM ' . STYLES_IMAGESET_TABLE;
862 7404 davidmj
                                $result = $db->sql_query($sql);
863 7404 davidmj
                                while ($imageset_row = $db->sql_fetchrow($result))
864 7404 davidmj
                                {
865 7404 davidmj
                                        if (@file_exists("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$lang_pack['iso']}/imageset.cfg"))
866 7404 davidmj
                                        {
867 7404 davidmj
                                                $cfg_data_imageset_data = parse_cfg_file("{$phpbb_root_path}styles/{$imageset_row['imageset_path']}/imageset/{$lang_pack['iso']}/imageset.cfg");
868 7404 davidmj
                                                foreach ($cfg_data_imageset_data as $image_name => $value)
869 7404 davidmj
                                                {
870 7404 davidmj
                                                        if (strpos($value, '*') !== false)
871 7404 davidmj
                                                        {
872 7404 davidmj
                                                                if (substr($value, -1, 1) === '*')
873 7404 davidmj
                                                                {
874 7404 davidmj
                                                                        list($image_filename, $image_height) = explode('*', $value);
875 7404 davidmj
                                                                        $image_width = 0;
876 7404 davidmj
                                                                }
877 7404 davidmj
                                                                else
878 7404 davidmj
                                                                {
879 7404 davidmj
                                                                        list($image_filename, $image_height, $image_width) = explode('*', $value);
880 7404 davidmj
                                                                }
881 7404 davidmj
                                                        }
882 7404 davidmj
                                                        else
883 7404 davidmj
                                                        {
884 7404 davidmj
                                                                $image_filename = $value;
885 7404 davidmj
                                                                $image_height = $image_width = 0;
886 7404 davidmj
                                                        }
887 7404 davidmj
888 7404 davidmj
                                                        if (strpos($image_name, 'img_') === 0 && $image_filename)
889 7404 davidmj
                                                        {
890 7404 davidmj
                                                                $image_name = substr($image_name, 4);
891 7404 davidmj
                                                                if (in_array($image_name, $valid_localized))
892 7404 davidmj
                                                                {
893 7404 davidmj
                                                                        $sql_ary[] = array(
894 7961 acydburn
                                                                                'image_name'                => (string) $image_name,
895 7961 acydburn
                                                                                'image_filename'        => (string) $image_filename,
896 7961 acydburn
                                                                                'image_height'                => (int) $image_height,
897 7961 acydburn
                                                                                'image_width'                => (int) $image_width,
898 7961 acydburn
                                                                                'imageset_id'                => (int) $imageset_row['imageset_id'],
899 7961 acydburn
                                                                                'image_lang'                => (string) $lang_pack['iso'],
900 7404 davidmj
                                                                        );
901 7404 davidmj
                                                                }
902 7404 davidmj
                                                        }
903 7404 davidmj
                                                }
904 7404 davidmj
                                        }
905 7404 davidmj
                                }
906 7404 davidmj
                                $db->sql_freeresult($result);
907 7404 davidmj
908 7404 davidmj
                                if (sizeof($sql_ary))
909 7404 davidmj
                                {
910 7404 davidmj
                                        $db->sql_multi_insert(STYLES_IMAGESET_DATA_TABLE, $sql_ary);
911 7404 davidmj
                                        $cache->destroy('sql', STYLES_IMAGESET_DATA_TABLE);
912 7404 davidmj
                                }
913 7404 davidmj
914 6839 acydburn
                                // Now let's copy the default language entries for custom profile fields for this new language - makes admin's life easier.
915 6839 acydburn
                                $sql = 'SELECT lang_id
916 6839 acydburn
                                        FROM ' . LANG_TABLE . "
917 6839 acydburn
                                        WHERE lang_iso = '" . $db->sql_escape($config['default_lang']) . "'";
918 6839 acydburn
                                $result = $db->sql_query($sql);
919 6839 acydburn
                                $default_lang_id = (int) $db->sql_fetchfield('lang_id');
920 6839 acydburn
                                $db->sql_freeresult($result);
921 6839 acydburn
922 11544 git-gate
                                // We want to notify the admin that custom profile fields need to be updated for the new language.
923 11544 git-gate
                                $notify_cpf_update = false;
924 11544 git-gate
925 6839 acydburn
                                // From the mysql documentation:
926 6839 acydburn
                                // Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14.
927 6839 acydburn
                                // Due to this we stay on the safe side if we do the insertion "the manual way"
928 6839 acydburn
929 6839 acydburn
                                $sql = 'SELECT field_id, lang_name, lang_explain, lang_default_value
930 6839 acydburn
                                        FROM ' . PROFILE_LANG_TABLE . '
931 6839 acydburn
                                        WHERE lang_id = ' . $default_lang_id;
932 6839 acydburn
                                $result = $db->sql_query($sql);
933 6839 acydburn
934 6839 acydburn
                                while ($row = $db->sql_fetchrow($result))
935 6839 acydburn
                                {
936 6839 acydburn
                                        $row['lang_id'] = $lang_id;
937 6839 acydburn
                                        $db->sql_query('INSERT INTO ' . PROFILE_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $row));
938 11544 git-gate
                                        $notify_cpf_update = true;
939 6839 acydburn
                                }
940 6839 acydburn
                                $db->sql_freeresult($result);
941 6839 acydburn
942 6839 acydburn
                                $sql = 'SELECT field_id, option_id, field_type, lang_value
943 6839 acydburn
                                        FROM ' . PROFILE_FIELDS_LANG_TABLE . '
944 6839 acydburn
                                        WHERE lang_id = ' . $default_lang_id;
945 6839 acydburn
                                $result = $db->sql_query($sql);
946 6839 acydburn
947 6839 acydburn
                                while ($row = $db->sql_fetchrow($result))
948 6839 acydburn
                                {
949 6839 acydburn
                                        $row['lang_id'] = $lang_id;
950 6839 acydburn
                                        $db->sql_query('INSERT INTO ' . PROFILE_FIELDS_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $row));
951 11544 git-gate
                                        $notify_cpf_update = true;
952 6839 acydburn
                                }
953 6839 acydburn
                                $db->sql_freeresult($result);
954 6839 acydburn
955 5315 acydburn
                                add_log('admin', 'LOG_LANGUAGE_PACK_INSTALLED', $lang_pack['name']);
956 6546 acydburn
957 11544 git-gate
                                $message = sprintf($user->lang['LANGUAGE_PACK_INSTALLED'], $lang_pack['name']);
958 11544 git-gate
                                $message .= ($notify_cpf_update) ? '<br /><br />' . $user->lang['LANGUAGE_PACK_CPF_UPDATE'] : '';
959 11544 git-gate
                                trigger_error($message . adm_back_link($this->u_action));
960 5315 acydburn
961 5315 acydburn
                        break;
962 5315 acydburn
963 5315 acydburn
                        case 'download':
964 6546 acydburn
965 5315 acydburn
                                if (!$lang_id)
966 5315 acydburn
                                {
967 6320 acydburn
                                        trigger_error($user->lang['NO_LANG_ID'] . adm_back_link($this->u_action), E_USER_WARNING);
968 5315 acydburn
                                }
969 5315 acydburn
970 8147 acydburn
                                $sql = 'SELECT *
971 6165 acydburn
                                        FROM ' . LANG_TABLE . '
972 5315 acydburn
                                        WHERE lang_id = ' . $lang_id;
973 5315 acydburn
                                $result = $db->sql_query($sql);
974 5315 acydburn
                                $row = $db->sql_fetchrow($result);
975 5315 acydburn
                                $db->sql_freeresult($result);
976 5315 acydburn
977 5315 acydburn
                                $use_method = request_var('use_method', '');
978 5422 davidmj
                                $methods = array('.tar');
979 5315 acydburn
980 5422 davidmj
                                $available_methods = array('.tar.gz' => 'zlib', '.tar.bz2' => 'bz2', '.zip' => 'zlib');
981 5315 acydburn
                                foreach ($available_methods as $type => $module)
982 5315 acydburn
                                {
983 5315 acydburn
                                        if (!@extension_loaded($module))
984 5315 acydburn
                                        {
985 5315 acydburn
                                                continue;
986 5315 acydburn
                                        }
987 6546 acydburn
988 5315 acydburn
                                        $methods[] = $type;
989 5315 acydburn
                                }
990 5315 acydburn
991 5315 acydburn
                                // Let the user decide in which format he wants to have the pack
992 5315 acydburn
                                if (!$use_method)
993 5315 acydburn
                                {
994 5315 acydburn
                                        $this->page_title = 'SELECT_DOWNLOAD_FORMAT';
995 5315 acydburn
996 5315 acydburn
                                        $radio_buttons = '';
997 5315 acydburn
                                        foreach ($methods as $method)
998 5315 acydburn
                                        {
999 7469 acydburn
                                                $radio_buttons .= '<label><input type="radio"' . ((!$radio_buttons) ? ' id="use_method"' : '') . ' class="radio" value="' . $method . '" name="use_method" /> ' . $method . '</label>';
1000 5315 acydburn
                                        }
1001 5315 acydburn
1002 5315 acydburn
                                        $template->assign_vars(array(
1003 5315 acydburn
                                                'S_SELECT_METHOD'                => true,
1004 5558 acydburn
                                                'U_BACK'                                => $this->u_action,
1005 5558 acydburn
                                                'U_ACTION'                                => $this->u_action . "&amp;action=$action&amp;id=$lang_id",
1006 5315 acydburn
                                                'RADIO_BUTTONS'                        => $radio_buttons)
1007 5315 acydburn
                                        );
1008 6546 acydburn
1009 5315 acydburn
                                        return;
1010 5315 acydburn
                                }
1011 5315 acydburn
1012 5422 davidmj
                                if (!in_array($use_method, $methods))
1013 5422 davidmj
                                {
1014 5422 davidmj
                                        $use_method = '.tar';
1015 5422 davidmj
                                }
1016 5422 davidmj
1017 5315 acydburn
                                include_once($phpbb_root_path . 'includes/functions_compress.' . $phpEx);
1018 5315 acydburn
1019 6260 acydburn
                                if ($use_method == '.zip')
1020 5315 acydburn
                                {
1021 6029 davidmj
                                        $compress = new compress_zip('w', $phpbb_root_path . 'store/lang_' . $row['lang_iso'] . $use_method);
1022 5315 acydburn
                                }
1023 5315 acydburn
                                else
1024 5315 acydburn
                                {
1025 6029 davidmj
                                        $compress = new compress_tar('w', $phpbb_root_path . 'store/lang_' . $row['lang_iso'] . $use_method, $use_method);
1026 5315 acydburn
                                }
1027 5315 acydburn
1028 5315 acydburn
                                // Get email templates
1029 5315 acydburn
                                $email_templates = filelist($phpbb_root_path . 'language/' . $row['lang_iso'], 'email', 'txt');
1030 5315 acydburn
                                $email_templates = $email_templates['email/'];
1031 5315 acydburn
1032 5315 acydburn
                                // Get acp files
1033 5315 acydburn
                                $acp_files = filelist($phpbb_root_path . 'language/' . $row['lang_iso'], 'acp', $phpEx);
1034 5315 acydburn
                                $acp_files = $acp_files['acp/'];
1035 5315 acydburn
1036 5315 acydburn
                                // Get mod files
1037 5315 acydburn
                                $mod_files = filelist($phpbb_root_path . 'language/' . $row['lang_iso'], 'mods', $phpEx);
1038 5315 acydburn
                                $mod_files = (isset($mod_files['mods/'])) ? $mod_files['mods/'] : array();
1039 5315 acydburn
1040 5315 acydburn
                                // Add main files
1041 5315 acydburn
                                $this->add_to_archive($compress, $this->main_files, $row['lang_iso']);
1042 5315 acydburn
1043 6258 acydburn
                                // Add search files if they exist...
1044 6258 acydburn
                                if (file_exists($phpbb_root_path . 'language/' . $row['lang_iso'] . '/search_ignore_words.' . $phpEx))
1045 6258 acydburn
                                {
1046 6258 acydburn
                                        $this->add_to_archive($compress, array("search_ignore_words.$phpEx"), $row['lang_iso']);
1047 6258 acydburn
                                }
1048 6258 acydburn
1049 6258 acydburn
                                if (file_exists($phpbb_root_path . 'language/' . $row['lang_iso'] . '/search_synonyms.' . $phpEx))
1050 6258 acydburn
                                {
1051 6258 acydburn
                                        $this->add_to_archive($compress, array("search_synonyms.$phpEx"), $row['lang_iso']);
1052 6258 acydburn
                                }
1053 6258 acydburn
1054 5315 acydburn
                                // Write files in folders
1055 5315 acydburn
                                $this->add_to_archive($compress, $email_templates, $row['lang_iso'], 'email');
1056 5315 acydburn
                                $this->add_to_archive($compress, $acp_files, $row['lang_iso'], 'acp');
1057 5315 acydburn
                                $this->add_to_archive($compress, $mod_files, $row['lang_iso'], 'mods');
1058 5315 acydburn
1059 5315 acydburn
                                // Write ISO File
1060 6548 acydburn
                                $iso_src = htmlspecialchars_decode($row['lang_english_name']) . "\n";
1061 6548 acydburn
                                $iso_src .= htmlspecialchars_decode($row['lang_local_name']) . "\n";
1062 6548 acydburn
                                $iso_src .= htmlspecialchars_decode($row['lang_author']);
1063 5315 acydburn
                                $compress->add_data($iso_src, 'language/' . $row['lang_iso'] . '/iso.txt');
1064 5315 acydburn
1065 10956 git-gate
                                // index.htm files
1066 10956 git-gate
                                $compress->add_data('', 'language/' . $row['lang_iso'] . '/index.htm');
1067 10956 git-gate
                                $compress->add_data('', 'language/' . $row['lang_iso'] . '/email/index.htm');
1068 10956 git-gate
                                $compress->add_data('', 'language/' . $row['lang_iso'] . '/acp/index.htm');
1069 8763 acydburn
1070 5315 acydburn
                                if (sizeof($mod_files))
1071 5315 acydburn
                                {
1072 10956 git-gate
                                        $compress->add_data('', 'language/' . $row['lang_iso'] . '/mods/index.htm');
1073 5315 acydburn
                                }
1074 5315 acydburn
1075 5315 acydburn
                                $compress->close();
1076 5315 acydburn
1077 5315 acydburn
                                $compress->download('lang_' . $row['lang_iso']);
1078 6312 acydburn
                                @unlink($phpbb_root_path . 'store/lang_' . $row['lang_iso'] . $use_method);
1079 5315 acydburn
1080 5315 acydburn
                                exit;
1081 5315 acydburn
1082 5315 acydburn
                        break;
1083 5315 acydburn
                }
1084 5315 acydburn
1085 5315 acydburn
                $sql = 'SELECT user_lang, COUNT(user_lang) AS lang_count
1086 8147 acydburn
                        FROM ' . USERS_TABLE . '
1087 5315 acydburn
                        GROUP BY user_lang';
1088 5315 acydburn
                $result = $db->sql_query($sql);
1089 5315 acydburn
1090 5315 acydburn
                $lang_count = array();
1091 5315 acydburn
                while ($row = $db->sql_fetchrow($result))
1092 5315 acydburn
                {
1093 5315 acydburn
                        $lang_count[$row['user_lang']] = $row['lang_count'];
1094 5315 acydburn
                }
1095 5315 acydburn
                $db->sql_freeresult($result);
1096 5315 acydburn
1097 8147 acydburn
                $sql = 'SELECT *
1098 6165 acydburn
                        FROM ' . LANG_TABLE . '
1099 6165 acydburn
                        ORDER BY lang_english_name';
1100 5315 acydburn
                $result = $db->sql_query($sql);
1101 5315 acydburn
1102 5315 acydburn
                $installed = array();
1103 5315 acydburn
1104 5315 acydburn
                while ($row = $db->sql_fetchrow($result))
1105 5315 acydburn
                {
1106 5315 acydburn
                        $installed[] = $row['lang_iso'];
1107 5315 acydburn
                        $tagstyle = ($row['lang_iso'] == $config['default_lang']) ? '*' : '';
1108 5315 acydburn
1109 5315 acydburn
                        $template->assign_block_vars('lang', array(
1110 6546 acydburn
                                'U_DETAILS'                        => $this->u_action . "&amp;action=details&amp;id={$row['lang_id']}",
1111 6546 acydburn
                                'U_DOWNLOAD'                => $this->u_action . "&amp;action=download&amp;id={$row['lang_id']}",
1112 6546 acydburn
                                'U_DELETE'                        => $this->u_action . "&amp;action=delete&amp;id={$row['lang_id']}",
1113 5315 acydburn
1114 6546 acydburn
                                'ENGLISH_NAME'                => $row['lang_english_name'],
1115 6546 acydburn
                                'TAG'                                => $tagstyle,
1116 6546 acydburn
                                'LOCAL_NAME'                => $row['lang_local_name'],
1117 6546 acydburn
                                'ISO'                                => $row['lang_iso'],
1118 6546 acydburn
                                'USED_BY'                        => (isset($lang_count[$row['lang_iso']])) ? $lang_count[$row['lang_iso']] : 0,
1119 6546 acydburn
                        ));
1120 5315 acydburn
                }
1121 5315 acydburn
                $db->sql_freeresult($result);
1122 5315 acydburn
1123 5315 acydburn
                $new_ary = $iso = array();
1124 6912 acydburn
                $dp = @opendir("{$phpbb_root_path}language");
1125 5315 acydburn
1126 6912 acydburn
                if ($dp)
1127 5315 acydburn
                {
1128 6912 acydburn
                        while (($file = readdir($dp)) !== false)
1129 5315 acydburn
                        {
1130 10587 git-gate
                                if ($file[0] == '.' || !is_dir($phpbb_root_path . 'language/' . $file))
1131 10496 nickvergessen
                                {
1132 10496 nickvergessen
                                        continue;
1133 10496 nickvergessen
                                }
1134 10496 nickvergessen
1135 10587 git-gate
                                if (file_exists("{$phpbb_root_path}language/$file/iso.txt"))
1136 5315 acydburn
                                {
1137 6912 acydburn
                                        if (!in_array($file, $installed))
1138 5315 acydburn
                                        {
1139 6912 acydburn
                                                if ($iso = file("{$phpbb_root_path}language/$file/iso.txt"))
1140 5315 acydburn
                                                {
1141 6912 acydburn
                                                        if (sizeof($iso) == 3)
1142 6912 acydburn
                                                        {
1143 6912 acydburn
                                                                $new_ary[$file] = array(
1144 6912 acydburn
                                                                        'iso'                => $file,
1145 6912 acydburn
                                                                        'name'                => trim($iso[0]),
1146 6912 acydburn
                                                                        'local_name'=> trim($iso[1]),
1147 6912 acydburn
                                                                        'author'        => trim($iso[2])
1148 6912 acydburn
                                                                );
1149 6912 acydburn
                                                        }
1150 5315 acydburn
                                                }
1151 5315 acydburn
                                        }
1152 5315 acydburn
                                }
1153 5315 acydburn
                        }
1154 6912 acydburn
                        closedir($dp);
1155 5315 acydburn
                }
1156 6912 acydburn
1157 5315 acydburn
                unset($installed);
1158 5315 acydburn
1159 5315 acydburn
                if (sizeof($new_ary))
1160 5315 acydburn
                {
1161 5315 acydburn
                        foreach ($new_ary as $iso => $lang_ary)
1162 5315 acydburn
                        {
1163 5315 acydburn
                                $template->assign_block_vars('notinst', array(
1164 6546 acydburn
                                        'ISO'                        => htmlspecialchars($lang_ary['iso']),
1165 6546 acydburn
                                        'LOCAL_NAME'        => htmlspecialchars($lang_ary['local_name'], ENT_COMPAT, 'UTF-8'),
1166 6546 acydburn
                                        'NAME'                        => htmlspecialchars($lang_ary['name'], ENT_COMPAT, 'UTF-8'),
1167 5558 acydburn
                                        'U_INSTALL'                => $this->u_action . '&amp;action=install&amp;iso=' . urlencode($lang_ary['iso']))
1168 5315 acydburn
                                );
1169 5315 acydburn
                        }
1170 5315 acydburn
                }
1171 6546 acydburn
1172 5315 acydburn
                unset($new_ary);
1173 5315 acydburn
        }
1174 5315 acydburn
1175 5315 acydburn
1176 5315 acydburn
        /**
1177 5315 acydburn
        * Set default language variables/header
1178 5315 acydburn
        */
1179 5315 acydburn
        function default_variables()
1180 5315 acydburn
        {
1181 5315 acydburn
                global $phpEx;
1182 5315 acydburn
1183 5315 acydburn
                $this->language_file_header = '<?php
1184 8147 acydburn
/**
1185 5315 acydburn
*
1186 5315 acydburn
* {FILENAME} [{LANG_NAME}]
1187 5315 acydburn
*
1188 5315 acydburn
* @package language
1189 7007 acydburn
* @version $' . 'Id: ' . '$
1190 8147 acydburn
* @copyright (c) ' . date('Y') . ' phpBB Group
1191 5315 acydburn
* @author {CHANGED} - {AUTHOR}
1192 8147 acydburn
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
1193 5315 acydburn
*
1194 5315 acydburn
*/
1195 5315 acydburn
1196 5562 davidmj
/**
1197 5562 davidmj
* DO NOT CHANGE
1198 5562 davidmj
*/
1199 8183 acydburn
if (!defined(\'IN_PHPBB\'))
1200 8183 acydburn
{
1201 8183 acydburn
        exit;
1202 8183 acydburn
}
1203 8183 acydburn
1204 5562 davidmj
if (empty($lang) || !is_array($lang))
1205 5562 davidmj
{
1206 5562 davidmj
        $lang = array();
1207 5562 davidmj
}
1208 5562 davidmj
1209 5315 acydburn
// DEVELOPERS PLEASE NOTE
1210 5315 acydburn
//
1211 6427 grahamje
// All language files should use UTF-8 as their encoding and the files must not contain a BOM.
1212 6427 grahamje
//
1213 5315 acydburn
// Placeholders can now contain order information, e.g. instead of
1214 5315 acydburn
// \'Page %s of %s\' you can (and should) write \'Page %1$s of %2$s\', this allows
1215 5315 acydburn
// translators to re-order the output of data while ensuring it remains correct
1216 5315 acydburn
//
1217 5315 acydburn
// You do not need this where single placeholders are used, e.g. \'Message %d\' is fine
1218 5315 acydburn
// equally where a string contains only two placeholders which are used to wrap text
1219 5315 acydburn
// in a url you again do not need to specify an order e.g., \'Click %sHERE%s\' is fine
1220 5315 acydburn
';
1221 5315 acydburn
1222 5315 acydburn
                $this->lang_header = '
1223 5562 davidmj
$lang = array_merge($lang, array(
1224 5315 acydburn
';
1225 5315 acydburn
1226 5315 acydburn
                // Language files in language root directory
1227 10956 git-gate
                $this->main_files = array("captcha_qa.$phpEx", "captcha_recaptcha.$phpEx", "common.$phpEx", "groups.$phpEx", "install.$phpEx", "mcp.$phpEx", "memberlist.$phpEx", "posting.$phpEx", "search.$phpEx", "ucp.$phpEx", "viewforum.$phpEx", "viewtopic.$phpEx", "help_bbcode.$phpEx", "help_faq.$phpEx");
1228 5315 acydburn
        }
1229 5315 acydburn
1230 5315 acydburn
        /**
1231 5315 acydburn
        * Get filename/location of language file
1232 5315 acydburn
        */
1233 5315 acydburn
        function get_filename($lang_iso, $directory, $filename, $check_store = false, $only_return_filename = false)
1234 5315 acydburn
        {
1235 5315 acydburn
                global $phpbb_root_path, $safe_mode;
1236 8763 acydburn
1237 5315 acydburn
                $check_filename = "language/$lang_iso/" . (($directory) ? $directory . '/' : '') . $filename;
1238 5315 acydburn
1239 5315 acydburn
                if ($check_store)
1240 5315 acydburn
                {
1241 5315 acydburn
                        $check_store_filename = ($safe_mode) ? "store/langfile_{$lang_iso}" . (($directory) ? '_' . $directory : '') . "_{$filename}" : "store/language/$lang_iso/" . (($directory) ? $directory . '/' : '') . $filename;
1242 5315 acydburn
1243 5315 acydburn
                        if (!$only_return_filename && file_exists($phpbb_root_path . $check_store_filename))
1244 5315 acydburn
                        {
1245 5315 acydburn
                                return $check_store_filename;
1246 5315 acydburn
                        }
1247 5315 acydburn
                        else if ($only_return_filename)
1248 5315 acydburn
                        {
1249 5315 acydburn
                                return $check_store_filename;
1250 5315 acydburn
                        }
1251 5315 acydburn
                }
1252 5315 acydburn
1253 5315 acydburn
                return $check_filename;
1254 5315 acydburn
        }
1255 5315 acydburn
1256 5315 acydburn
        /**
1257 5315 acydburn
        * Add files to archive
1258 5315 acydburn
        */
1259 5315 acydburn
        function add_to_archive(&$compress, $filelist, $lang_iso, $directory = '')
1260 5315 acydburn
        {
1261 5315 acydburn
                global $phpbb_root_path;
1262 5315 acydburn
1263 5315 acydburn
                foreach ($filelist as $file)
1264 5315 acydburn
                {
1265 5315 acydburn
                        // Get source filename
1266 5315 acydburn
                        $source = $this->get_filename($lang_iso, $directory, $file, true);
1267 5315 acydburn
                        $destination = 'language/' . $lang_iso . '/' . (($directory) ? $directory . '/' : '') . $file;
1268 5315 acydburn
1269 5315 acydburn
                        // Add file to archive
1270 5315 acydburn
                        $compress->add_custom_file($phpbb_root_path . $source, $destination);
1271 5315 acydburn
                }
1272 5315 acydburn
        }
1273 5315 acydburn
1274 5315 acydburn
        /**
1275 6819 acydburn
        * Little helper to add some hardcoded template bits
1276 6819 acydburn
        */
1277 6819 acydburn
        function add_input_field()
1278 6819 acydburn
        {
1279 6819 acydburn
                $keys = func_get_args();
1280 6819 acydburn
1281 6819 acydburn
                $non_static                = array_shift($keys);
1282 9637 leviatan21
                $value                        = utf8_normalize_nfc(array_shift($keys));
1283 6819 acydburn
1284 6819 acydburn
                if (!$non_static)
1285 6819 acydburn
                {
1286 6819 acydburn
                        return '<strong>' . htmlspecialchars($value, ENT_COMPAT, 'UTF-8') . '</strong>';
1287 6819 acydburn
                }
1288 6819 acydburn
1289 6819 acydburn
                // If more then 270 characters, then we present a textarea, else an input field
1290 6819 acydburn
                $textarea = (utf8_strlen($value) > 270) ? true : false;
1291 6819 acydburn
                $tpl = '';
1292 6819 acydburn
1293 6819 acydburn
                $tpl .= ($textarea) ? '<textarea name="' : '<input type="text" name="';
1294 6819 acydburn
                $tpl .= 'entry[' . implode('][', array_map('utf8_htmlspecialchars', $keys)) . ']"';
1295 6819 acydburn
1296 6914 dhn2
                $tpl .= ($textarea) ? ' cols="80" rows="5" class="langvalue">' : ' class="langvalue" value="';
1297 6819 acydburn
                $tpl .= htmlspecialchars($value, ENT_COMPAT, 'UTF-8');
1298 6819 acydburn
                $tpl .= ($textarea) ? '</textarea>' : '" />';
1299 6819 acydburn
1300 6819 acydburn
                return $tpl;
1301 6819 acydburn
        }
1302 6819 acydburn
1303 6819 acydburn
        /**
1304 5315 acydburn
        * Print language entries
1305 5315 acydburn
        */
1306 5315 acydburn
        function print_language_entries(&$lang_ary, $key_prefix = '', $input_field = true)
1307 5315 acydburn
        {
1308 5315 acydburn
                $tpl = '';
1309 5315 acydburn
1310 5315 acydburn
                foreach ($lang_ary as $key => $value)
1311 5315 acydburn
                {
1312 5315 acydburn
                        if (is_array($value))
1313 5315 acydburn
                        {
1314 6819 acydburn
                                // Write key
1315 5315 acydburn
                                $tpl .= '
1316 5315 acydburn
                                <tr>
1317 6819 acydburn
                                        <td class="row3" colspan="2">' . htmlspecialchars($key_prefix, ENT_COMPAT, 'UTF-8') . '<strong>' . htmlspecialchars($key, ENT_COMPAT, 'UTF-8') . '</strong></td>
1318 5315 acydburn
                                </tr>';
1319 5315 acydburn
1320 5315 acydburn
                                foreach ($value as $_key => $_value)
1321 5315 acydburn
                                {
1322 6114 acydburn
                                        if (is_array($_value))
1323 5315 acydburn
                                        {
1324 6819 acydburn
                                                // Write key
1325 6114 acydburn
                                                $tpl .= '
1326 6114 acydburn
                                                        <tr>
1327 6819 acydburn
                                                                <td class="row3" colspan="2">' . htmlspecialchars($key_prefix, ENT_COMPAT, 'UTF-8') . '&nbsp; &nbsp;<strong>' . htmlspecialchars($_key, ENT_COMPAT, 'UTF-8') . '</strong></td>
1328 6114 acydburn
                                                        </tr>';
1329 6114 acydburn
1330 6114 acydburn
                                                foreach ($_value as $__key => $__value)
1331 6114 acydburn
                                                {
1332 6819 acydburn
                                                        // Write key
1333 6114 acydburn
                                                        $tpl .= '
1334 6114 acydburn
                                                                <tr>
1335 6819 acydburn
                                                                        <td class="row1" style="white-space: nowrap;">' . htmlspecialchars($key_prefix, ENT_COMPAT, 'UTF-8') . '<strong>' . htmlspecialchars($__key, ENT_COMPAT, 'UTF-8') . '</strong></td>
1336 6114 acydburn
                                                                        <td class="row2">';
1337 6114 acydburn
1338 6819 acydburn
                                                        $tpl .= $this->add_input_field($input_field, $__value, $key, $_key, $__key);
1339 6819 acydburn
1340 6114 acydburn
                                                        $tpl .= '</td>
1341 6114 acydburn
                                                                </tr>';
1342 6114 acydburn
                                                }
1343 5315 acydburn
                                        }
1344 5315 acydburn
                                        else
1345 5315 acydburn
                                        {
1346 6819 acydburn
                                                // Write key
1347 6114 acydburn
                                                $tpl .= '
1348 6114 acydburn
                                                        <tr>
1349 6819 acydburn
                                                                <td class="row1" style="white-space: nowrap;">' . htmlspecialchars($key_prefix, ENT_COMPAT, 'UTF-8') . '<strong>' . htmlspecialchars($_key, ENT_COMPAT, 'UTF-8') . '</strong></td>
1350 6114 acydburn
                                                                <td class="row2">';
1351 6546 acydburn
1352 6819 acydburn
                                                $tpl .= $this->add_input_field($input_field, $_value, $key, $_key);
1353 6819 acydburn
1354 6114 acydburn
                                                $tpl .= '</td>
1355 6114 acydburn
                                                        </tr>';
1356 5315 acydburn
                                        }
1357 5315 acydburn
                                }
1358 5315 acydburn
1359 5315 acydburn
                                $tpl .= '
1360 5315 acydburn
                                <tr>
1361 5315 acydburn
                                        <td class="spacer" colspan="2">&nbsp;</td>
1362 5315 acydburn
                                </tr>';
1363 5315 acydburn
                        }
1364 5315 acydburn
                        else
1365 5315 acydburn
                        {
1366 6819 acydburn
                                // Write key
1367 5315 acydburn
                                $tpl .= '
1368 5315 acydburn
                                <tr>
1369 6819 acydburn
                                        <td class="row1" style="white-space: nowrap;">' . htmlspecialchars($key_prefix, ENT_COMPAT, 'UTF-8') . '<strong>' . htmlspecialchars($key, ENT_COMPAT, 'UTF-8') . '</strong></td>
1370 5315 acydburn
                                        <td class="row2">';
1371 5315 acydburn
1372 6819 acydburn
                                $tpl .= $this->add_input_field($input_field, $value, $key);
1373 5315 acydburn
1374 5315 acydburn
                                $tpl .= '</td>
1375 5315 acydburn
                                        </tr>';
1376 5315 acydburn
                        }
1377 5315 acydburn
                }
1378 6546 acydburn
1379 5315 acydburn
                return $tpl;
1380 5315 acydburn
        }
1381 5315 acydburn
1382 5315 acydburn
        /**
1383 5315 acydburn
        * Compare two language files
1384 5315 acydburn
        */
1385 5315 acydburn
        function compare_language_files($source_lang, $dest_lang, $directory, $file)
1386 5315 acydburn
        {
1387 5315 acydburn
                global $phpbb_root_path, $phpEx;
1388 5315 acydburn
1389 5315 acydburn
                $return_ary = array();
1390 5315 acydburn
1391 5315 acydburn
                $lang = array();
1392 5315 acydburn
                include("{$phpbb_root_path}language/{$source_lang}/" . (($directory) ? $directory . '/' : '') . $file);
1393 5315 acydburn
                $lang_entry_src = $lang;
1394 5315 acydburn
1395 5315 acydburn
                $lang = array();
1396 5315 acydburn
1397 5315 acydburn
                if (!file_exists($phpbb_root_path . $this->get_filename($dest_lang, $directory, $file, true)))
1398 5315 acydburn
                {
1399 5315 acydburn
                        return array();
1400 5315 acydburn
                }
1401 5315 acydburn
1402 5315 acydburn
                include($phpbb_root_path . $this->get_filename($dest_lang, $directory, $file, true));
1403 5315 acydburn
1404 5315 acydburn
                $lang_entry_dst = $lang;
1405 5315 acydburn
1406 5315 acydburn
                unset($lang);
1407 5315 acydburn
1408 5315 acydburn
                $diff_array_keys = array_diff(array_keys($lang_entry_src), array_keys($lang_entry_dst));
1409 5315 acydburn
                unset($lang_entry_dst);
1410 5315 acydburn
1411 5315 acydburn
                foreach ($diff_array_keys as $key)
1412 5315 acydburn
                {
1413 5315 acydburn
                        $return_ary[$key] = $lang_entry_src[$key];
1414 5315 acydburn
                }
1415 5315 acydburn
1416 5315 acydburn
                unset($lang_entry_src);
1417 5315 acydburn
1418 5315 acydburn
                return $return_ary;
1419 5315 acydburn
        }
1420 6139 acydburn
1421 6139 acydburn
        /**
1422 6139 acydburn
        * Return language string value for storage
1423 6139 acydburn
        */
1424 6139 acydburn
        function prepare_lang_entry($text, $store = true)
1425 6139 acydburn
        {
1426 6139 acydburn
                $text = (STRIP) ? stripslashes($text) : $text;
1427 6139 acydburn
1428 6139 acydburn
                // Adjust for storage...
1429 6139 acydburn
                if ($store)
1430 6139 acydburn
                {
1431 6139 acydburn
                        $text = str_replace("'", "\\'", str_replace('\\', '\\\\', $text));
1432 6139 acydburn
                }
1433 6139 acydburn
1434 6139 acydburn
                return $text;
1435 6139 acydburn
        }
1436 6139 acydburn
1437 6139 acydburn
        /**
1438 6139 acydburn
        * Format language array for storage
1439 6139 acydburn
        */
1440 6139 acydburn
        function format_lang_array($key, $value, $tabs = "\t")
1441 6139 acydburn
        {
1442 6139 acydburn
                $entry = '';
1443 6139 acydburn
1444 6139 acydburn
                if (!is_array($value))
1445 6139 acydburn
                {
1446 7872 acydburn
                        $entry .= "{$tabs}'" . $this->prepare_lang_entry($key) . "'\t=> '" . $this->prepare_lang_entry($value) . "',\n";
1447 6139 acydburn
                }
1448 6139 acydburn
                else
1449 6139 acydburn
                {
1450 6139 acydburn
                        $_tabs = $tabs . "\t";
1451 7872 acydburn
                        $entry .= "\n{$tabs}'" . $this->prepare_lang_entry($key) . "'\t=> array(\n";
1452 6139 acydburn
1453 6139 acydburn
                        foreach ($value as $_key => $_value)
1454 6139 acydburn
                        {
1455 6139 acydburn
                                $entry .= $this->format_lang_array($_key, $_value, $_tabs);
1456 6139 acydburn
                        }
1457 6139 acydburn
1458 6139 acydburn
                        $entry .= "{$tabs}),\n\n";
1459 6139 acydburn
                }
1460 6139 acydburn
1461 6139 acydburn
                return $entry;
1462 6139 acydburn
        }
1463 5315 acydburn
}
1464 5315 acydburn
1465 5315 acydburn
?>