Issues (1369)

admin/admin_locale.php (2 issues)

1
<?php
2
3
/**
4
 * adm_locale.php
5
 *
6
 * @v1 (c) copyright 2011 by Gorlum for http://supernova.ws
7
 *
8
 */
9
10
define('INSIDE'  , true);
11
define('INSTALL' , false);
12
define('IN_ADMIN'  , true);
13
14
require('../common.' . substr(strrchr(__FILE__, '.'), 1));
15
16
global $lang, $user;
17
18
SnTemplate::messageBoxAdminAccessDenied(AUTH_LEVEL_ADMINISTRATOR);
19
20
function adm_lng_assign_string($lang_id, $locale_string_name, $value) {
21
  global $locale_string_template, $languages_info, $languages, $domain;
22
23
  if(is_array($value)) {
24
    foreach($value as $sub_key => $sub_value) {
25
      adm_lng_assign_string($lang_id, "{$locale_string_name}[{$sub_key}]", $sub_value);
26
    }
27
  } elseif($value) {
28
    if(!isset($locale_string_template[$locale_string_name])) {
29
      $locale_string_template[$locale_string_name] = array();
30
    }
31
    $locale_string_template[$locale_string_name] = array_merge($locale_string_template[$locale_string_name], array("[{$lang_id}]" => htmlentities($value, ENT_COMPAT, 'utf-8')));
32
  }
33
}
34
35
function adm_lng_load($full_filename) {
36
//  $lang_old = $lang;
37
//  $lang = array();
38
  require($full_filename);
39
//  $lang_new = $lang;
40
//  $lang = $lang_old;
41
//  return $lang_new;
42
  return $a_lang_array;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $a_lang_array seems to be never defined.
Loading history...
43
}
44
45
function adm_lng_parse_string($string_name, $string_value, $ident = '  ') {
46
  global $domain, $lang_id;
47
48
  $return = "{$ident}'{$string_name}' => ";
49
  if(isset($string_value[$lang_id]) && !is_array($string_value[$lang_id])) {
50
    $return .= "'" . str_replace(array("\\", "'"), array('\\\\', "\\'"), $string_value[$lang_id]) . "',";
51
  } else {
52
    $return .= "array(\r\n";
53
    foreach($string_value as $arr_name => $arr_data) {
54
      $return .= adm_lng_parse_string($arr_name, $arr_data, $ident . '  ');
55
    }
56
    $return .= "{$ident}),\r\n";
57
  }
58
59
  return $return . "\r\n";
60
}
61
62
$honor_constants = array(
63
  'admin' => array(
64
    '[adm_opt_ver_response]' => 'SNC_VER_',
65
    '[adm_opt_ver_response_short]' => 'SNC_VER_',
66
  ),
67
68
  'alliance' => array(
69
    '[ali_dip_relations]' => 'ALLY_DIPLOMACY_',
70
  ),
71
72
  'artifacts' => array(
73
    '[art_moon_create]' => 'ART_',
74
  ),
75
76
  'fleet' => array(
77
    '[fl_attack_error]' => 'ATTACK_',
78
    '[fl_shrtcup]' => 'PT_',
79
    '[fl_planettype]' => 'PT_',
80
  ),
81
82
  'infos' => array(
83
    '[info]' => array('TECH_', 'MRC_', 'SHIP_', 'RES_', 'ART_', 'STRUC_'),
84
  ),
85
86
  'market' => array(
87
    '[eco_mrk_errors]' => 'MARKET_', 
88
  ),
89
90
  'quest' => array(
91
    '[qst_status_list]' => 'QUEST_STATUS_', 
92
  ),
93
94
  'tech' => array(
95
    '[type_mission]' => 'MT_', 
96
    '[tech]' => array('TECH_', 'MRC_', 'SHIP_', 'RES_', 'ART_', 'STRUC_'),
97
  ),
98
99
);
100
101
function adm_lng_write_string($string_name, $string_value, $ident = '  ', $string_name_prefix = '') {
102
  global $lang_id, $file_handler, $constants, $honor_constants, $domain;
103
104
  $string_name_new = false;
105
106
  if(isset($honor_constants[$domain][$string_name_prefix])) {
107
    $found_constants = array_keys($constants, $string_name);
108
    foreach($found_constants as $constant_name) {
109
      $honor_prefix_list = is_array($honor_constants[$domain][$string_name_prefix]) ? $honor_constants[$domain][$string_name_prefix] : array($honor_constants[$domain][$string_name_prefix]);
110
      foreach($honor_prefix_list as $honor_prefix) {
111
        if(strpos($constant_name, $honor_prefix) === 0) {
112
          $string_name_new = $constant_name;
113
          break;
114
        }
115
      }
116
    }
117
  }
118
119
  $string_name_new = $string_name_new ? $string_name_new : "'{$string_name}'";
120
  fwrite($file_handler, "{$ident}{$string_name_new} => ");
121
  if(isset($string_value[$lang_id]) && !is_array($string_value[$lang_id])) {
122
    fwrite($file_handler, "'" . str_replace(array("\\", "'"), array('\\\\', "\\'"), $string_value[$lang_id]) . "',");
123
//    fwrite($file_handler, "'" . addslashes($string_value[$lang_id]) . "',");
124
  } else {
125
    $string_name_prefix = $string_name_prefix . "[{$string_name}]";
126
    fwrite($file_handler, "array(\r\n");
127
    foreach($string_value as $arr_name => $arr_data) {
128
      adm_lng_write_string($arr_name, $arr_data, $ident . '  ', $string_name_prefix);
129
    }
130
    fwrite($file_handler, "{$ident}),\r\n");
131
  }
132
133
  fwrite($file_handler, "\r\n");
134
}
135
136
$template = SnTemplate::gettemplate('admin/admin_locale', true);
0 ignored issues
show
true of type true is incompatible with the type null|template expected by parameter $template of SnTemplate::gettemplate(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

136
$template = SnTemplate::gettemplate('admin/admin_locale', /** @scrutinizer ignore-type */ true);
Loading history...
137
138
lng_include('system');
139
lng_include('tech');
140
lng_include('admin');
141
142
$languages = array();
143
$language_domains = array();
144
$languages_info = lng_get_list();
145
$domain = sys_get_param_str('domain');
146
147
if($domain) {
148
  $lang_new = sys_get_param('lang_new');
149
  if(!empty($lang_new) && is_array($lang_new)) {
150
    $constants = get_defined_constants(true);
151
    $constants = $constants['user'];
152
    ksort($constants);
153
    foreach($languages_info as $lang_id => $land_data) {
154
      $file_handler = fopen(SN_ROOT_PHYSICAL . "language/{$lang_id}/{$domain}.mo.php.new", 'w');
155
      fwrite($file_handler, "<?php\r\n\r\n/*\r\n#############################################################################
156
#  Filename: {$domain}.mo.php
157
#  Project: SuperNova.WS
158
#  Website: http://www.supernova.ws
159
#  Description: Massive Multiplayer Online Browser Space Strategy Game\r\n#\r\n");
160
161
      foreach($land_data['LANG_COPYRIGHT'] as $lang_copyright) {
162
        $lang_copyright = str_replace(array('&copy;', '&quot;', '&lt;', '&gt;'), array('©', '"', '<', '>'), $lang_copyright);
163
        fwrite($file_handler, "#  {$lang_copyright}\r\n");
164
      }
165
      fwrite($file_handler, "#############################################################################\r\n*/\r\n
166
/**\r\n*\r\n* @package language\r\n* @system [{$land_data['LANG_NAME_ENGLISH']}]\r\n* @version " . SN_VERSION . "\r\n*\r\n*/\r\n
167
/**\r\n* DO NOT CHANGE\r\n*/\r\n\r\nif (!defined('INSIDE')) die();\r\n
168
\$a_lang_array = array(\r\n");
169
      foreach($lang_new as $string_name => $string_value) {
170
        adm_lng_write_string($string_name, $string_value);
171
      }
172
      fwrite($file_handler, ");\r\n");
173
      fclose($file_handler);
174
    }
175
176
    sys_redirect("admin_locale.php?domain={$domain}");
177
  }
178
179
  foreach($languages_info as $lang_id => $lang_data) {
180
    $template->assign_block_vars('language', $lang_data);
181
    $full_filename = SN_ROOT_PHYSICAL . "language/{$lang_id}/{$domain}.mo.php";
182
    $languages[$lang_id] = adm_lng_load($full_filename . (file_exists($full_filename . '.new') ? '.new' : ''));
183
    foreach($languages[$lang_id] as $locale_string_name => $cork) {
184
      adm_lng_assign_string($lang_id, "[{$locale_string_name}]", $languages[$lang_id][$locale_string_name]);
185
    }
186
  }
187
188
  foreach($locale_string_template as $locale_string_name => $locale_string_list) {
189
    $template->assign_block_vars('string', array(
190
      'NAME' => $locale_string_name,
191
    ));
192
193
    foreach($languages_info as $lang_id => $cork2) {
194
      $template->assign_block_vars('string.locale', array(
195
        'LANG' => $lang_id,
196
        'VALUE' => $locale_string_list["[{$lang_id}]"],
197
      ));
198
    }
199
  }
200
201
  $template->assign_vars(array(
202
    'DOMAIN' => $domain,
203
  ));
204
} else {
205
  $path = SN_ROOT_PHYSICAL . "language/";
206
  $dir = dir($path);
207
  while (false !== ($lang_id = $dir->read())) {
208
    $full_path = $path . $lang_id;
209
    if($lang_id[0] != "." && is_dir($full_path)) {
210
      $lang_file_list = dir($full_path);
211
      while (false !== ($filename = $lang_file_list->read())) {
212
        $lang_domain = strtolower(substr($filename, 0, strpos($filename, '.')));
213
        if(!$lang_domain) {
214
          continue;
215
        }
216
217
        $file_ext = strtolower(substr($filename, strpos($filename, '.')));
218
        if($lang_domain != 'language') {
219
          if($file_ext == '.mo.php.new' || ($file_ext == '.mo.php' && empty($languages[$lang_id][$lang_domain]))) {
220
            $language_domains[$lang_domain] = $lang_domain;
221
            $languages[$lang_id][$lang_domain] = $lang_domain;
222
          }
223
        }
224
      }
225
    }
226
  }
227
  $dir->close();
228
229
  foreach($language_domains as $lang_domain) {
230
    $template->assign_block_vars('domain', array(
231
      'NAME' => $lang_domain,
232
    ));
233
  }
234
}
235
236
SnTemplate::display($template, $lang['adm_lng_title']);
237