205
+ − 1
<?php
+ − 2
+ − 3
/*
+ − 4
* Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between
536
+ − 5
* Version 1.1.4 (Caoineag alpha 4)
+ − 6
* Copyright (C) 2006-2008 Dan Fuhry
205
+ − 7
*
+ − 8
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
+ − 9
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+ − 10
*
+ − 11
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
+ − 12
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details.
+ − 13
*/
+ − 14
+ − 15
/**
+ − 16
* Language class - processes, stores, and retrieves language strings.
+ − 17
* @package Enano
+ − 18
* @subpackage Localization
+ − 19
* @copyright 2007 Dan Fuhry
+ − 20
* @license GNU General Public License
+ − 21
*/
+ − 22
+ − 23
class Language
+ − 24
{
+ − 25
+ − 26
/**
+ − 27
* The numerical ID of the loaded language.
+ − 28
* @var int
+ − 29
*/
+ − 30
+ − 31
var $lang_id;
+ − 32
+ − 33
/**
+ − 34
* The ISO-639-3 code for the loaded language. This should be grabbed directly from the database.
+ − 35
* @var string
+ − 36
*/
+ − 37
+ − 38
var $lang_code;
210
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 39
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 40
/**
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 41
* Used to track when a language was last changed, to allow browsers to cache language data
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 42
* @var int
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 43
*/
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 44
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 45
var $lang_timestamp;
205
+ − 46
+ − 47
/**
+ − 48
* Will be an object that holds an instance of the class configured with the site's default language. Only instanciated when needed.
+ − 49
* @var object
+ − 50
*/
+ − 51
+ − 52
var $default;
+ − 53
+ − 54
/**
+ − 55
* The list of loaded strings.
+ − 56
* @var array
+ − 57
* @access private
+ − 58
*/
+ − 59
+ − 60
var $strings = array();
+ − 61
+ − 62
/**
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 63
* Switch for debug mode. If true, will show an asterisk after localized strings. This
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 64
* can be useful if you're localizing a component and need to see what's already done.
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 65
* @var bool
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 66
*/
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 67
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 68
var $debug = false;
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 69
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 70
/**
205
+ − 71
* Constructor.
+ − 72
* @param int|string Language ID or code to load.
+ − 73
*/
+ − 74
+ − 75
function __construct($lang)
+ − 76
{
+ − 77
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 78
+ − 79
if ( defined('IN_ENANO_INSTALL') )
+ − 80
{
+ − 81
// special case for the Enano installer: it will load its own strings from a JSON file and just use this API for fetching and templatizing them.
243
+ − 82
$this->lang_id = 1;
+ − 83
$this->lang_code = $lang;
205
+ − 84
return true;
+ − 85
}
+ − 86
if ( is_string($lang) )
+ − 87
{
371
dc6026376919
Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
diff
changeset
+ − 88
$sql_col = 'lang_code=\'' . $db->escape($lang) . '\'';
205
+ − 89
}
+ − 90
else if ( is_int($lang) )
+ − 91
{
+ − 92
$sql_col = 'lang_id=' . $lang . '';
+ − 93
}
+ − 94
else
+ − 95
{
+ − 96
$db->_die('lang.php - attempting to pass invalid value to constructor');
+ − 97
}
+ − 98
239
0f1b353570a7
Fix a comparison logic SQL error in lang.php; fix attempt to call mysql_real_escape_string() in install without a working DB connection
Dan
diff
changeset
+ − 99
$lang_default = ( $x = getConfig('default_language') ) ? intval($x) : '\'def\'';
372
5bd429428101
A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
diff
changeset
+ − 100
5bd429428101
A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
diff
changeset
+ − 101
$q = $db->sql_query("SELECT lang_id, lang_code, last_changed, ( lang_id = $lang_default ) AS is_default FROM " . table_prefix . "language WHERE $sql_col OR lang_id = $lang_default ORDER BY is_default ASC LIMIT 1;");
205
+ − 102
+ − 103
if ( !$q )
+ − 104
$db->_die('lang.php - main select query');
+ − 105
+ − 106
if ( $db->numrows() < 1 )
+ − 107
$db->_die('lang.php - There are no languages installed');
+ − 108
+ − 109
$row = $db->fetchrow();
+ − 110
+ − 111
$this->lang_id = intval( $row['lang_id'] );
+ − 112
$this->lang_code = $row['lang_code'];
210
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 113
$this->lang_timestamp = $row['last_changed'];
205
+ − 114
}
+ − 115
+ − 116
/**
+ − 117
* Fetches language strings from the database, or a cache file if it's available.
+ − 118
* @param bool If true (default), allows the cache to be used.
+ − 119
*/
+ − 120
+ − 121
function fetch($allow_cache = true)
+ − 122
{
+ − 123
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 124
+ − 125
$lang_file = ENANO_ROOT . "/cache/lang_{$this->lang_id}.php";
+ − 126
// Attempt to load the strings from a cache file
+ − 127
if ( file_exists($lang_file) && $allow_cache )
+ − 128
{
+ − 129
// Yay! found it
+ − 130
$this->load_cache_file($lang_file);
+ − 131
}
+ − 132
else
+ − 133
{
+ − 134
// No cache file - select and retrieve from the database
+ − 135
$q = $db->sql_unbuffered_query("SELECT string_category, string_name, string_content FROM " . table_prefix . "language_strings WHERE lang_id = {$this->lang_id};");
+ − 136
if ( !$q )
+ − 137
$db->_die('lang.php - selecting language string data');
+ − 138
if ( $row = $db->fetchrow() )
+ − 139
{
+ − 140
$strings = array();
+ − 141
do
+ − 142
{
+ − 143
$cat =& $row['string_category'];
371
dc6026376919
Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
diff
changeset
+ − 144
if ( !is_array(@$strings[$cat]) )
205
+ − 145
{
+ − 146
$strings[$cat] = array();
+ − 147
}
+ − 148
$strings[$cat][ $row['string_name'] ] = $row['string_content'];
+ − 149
}
+ − 150
while ( $row = $db->fetchrow() );
+ − 151
// all done fetching
+ − 152
$this->merge($strings);
+ − 153
}
+ − 154
else
+ − 155
{
241
c671f3bb8aed
Trying to get lang import to work in the installer; it's not working ATM - cache file is generated with lang_id = 0. Syncing to Nighthawk.
Dan
diff
changeset
+ − 156
if ( !defined('ENANO_ALLOW_LOAD_NOLANG') )
c671f3bb8aed
Trying to get lang import to work in the installer; it's not working ATM - cache file is generated with lang_id = 0. Syncing to Nighthawk.
Dan
diff
changeset
+ − 157
$db->_die('lang.php - No strings for language ' . $this->lang_code);
205
+ − 158
}
+ − 159
}
+ − 160
}
+ − 161
+ − 162
/**
+ − 163
* Loads a file from the disk cache (treated as PHP) and merges it into RAM.
+ − 164
* @param string File to load
+ − 165
*/
+ − 166
+ − 167
function load_cache_file($file)
+ − 168
{
+ − 169
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 170
+ − 171
if ( !file_exists($file) )
+ − 172
$db->_die('lang.php - requested cache file doesn\'t exist');
+ − 173
590
03a60844c7c5
Several optimization changes including getting rid of a few eval()s. Added placeholder functions for the theme manager, which should be working now
Dan
diff
changeset
+ − 174
@include($file);
03a60844c7c5
Several optimization changes including getting rid of a few eval()s. Added placeholder functions for the theme manager, which should be working now
Dan
diff
changeset
+ − 175
205
+ − 176
if ( !isset($lang_cache) || ( isset($lang_cache) && !is_array($lang_cache) ) )
+ − 177
$db->_die('lang.php - the cache file is invalid (didn\'t set $lang_cache as an array)');
+ − 178
+ − 179
$this->merge($lang_cache);
+ − 180
}
+ − 181
+ − 182
/**
243
+ − 183
* Loads a JSON language file and parses the strings into RAM. Will use the cache if possible, but stays far away from the database,
+ − 184
* which we assume doesn't exist yet.
+ − 185
*/
+ − 186
+ − 187
function load_file($file)
+ − 188
{
+ − 189
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 190
+ − 191
if ( !file_exists($file) )
348
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 192
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 193
if ( defined('IN_ENANO_INSTALL') )
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 194
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 195
die('lang.php - requested JSON file (' . htmlspecialchars($file) . ') doesn\'t exist');
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 196
}
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 197
else
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 198
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 199
$db->_die('lang.php - requested JSON file doesn\'t exist');
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 200
}
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 201
}
243
+ − 202
+ − 203
$contents = trim(@file_get_contents($file));
+ − 204
if ( empty($contents) )
+ − 205
$db->_die('lang.php - empty language file...');
+ − 206
+ − 207
// Trim off all text before and after the starting and ending braces
+ − 208
$contents = preg_replace('/^([^{]+)\{/', '{', $contents);
+ − 209
$contents = preg_replace('/\}([^}]+)$/', '}', $contents);
+ − 210
$contents = trim($contents);
+ − 211
+ − 212
if ( empty($contents) )
+ − 213
$db->_die('lang.php - no meat to the language file...');
+ − 214
+ − 215
$checksum = md5($contents);
+ − 216
if ( file_exists("./cache/lang_json_{$checksum}.php") )
+ − 217
{
+ − 218
$this->load_cache_file("./cache/lang_json_{$checksum}.php");
+ − 219
}
+ − 220
else
+ − 221
{
348
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 222
// Correct syntax to be nice to the json parser
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 223
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 224
// eliminate comments
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 225
$contents = preg_replace(array(
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 226
// eliminate single line comments in '// ...' form
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 227
'#^\s*//(.+)$#m',
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 228
// eliminate multi-line comments in '/* ... */' form, at start of string
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 229
'#^\s*/\*(.+)\*/#Us',
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 230
// eliminate multi-line comments in '/* ... */' form, at end of string
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 231
'#/\*(.+)\*/\s*$#Us'
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 232
), '', $contents);
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 233
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 234
$contents = preg_replace('/([,\{\[])([\s]*?)([a-z0-9_]+)([\s]*?):/', '\\1\\2"\\3" :', $contents);
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 235
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 236
try
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 237
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 238
$langdata = enano_json_decode($contents);
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 239
}
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 240
catch(Zend_Json_Exception $e)
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 241
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 242
$db->_die('lang.php - Exception caught by JSON parser</p><pre>' . htmlspecialchars(print_r($e, true)) . '</pre><p>');
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 243
exit;
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 244
}
243
+ − 245
+ − 246
if ( !is_array($langdata) )
+ − 247
$db->_die('lang.php - invalid language file');
+ − 248
+ − 249
if ( !isset($langdata['categories']) || !isset($langdata['strings']) )
+ − 250
$db->_die('lang.php - language file does not contain the proper items');
+ − 251
+ − 252
$this->merge($langdata['strings']);
+ − 253
+ − 254
$lang_file = "./cache/lang_json_{$checksum}.php";
+ − 255
+ − 256
$handle = @fopen($lang_file, 'w');
+ − 257
if ( !$handle )
+ − 258
// Couldn't open the file. Silently fail and let the strings come from RAM.
+ − 259
return false;
+ − 260
+ − 261
// The file's open, that means we should be good.
+ − 262
fwrite($handle, '<?php
+ − 263
// This file was generated automatically by Enano. You should not edit this file because any changes you make
+ − 264
// to it will not be visible in the ACP and all changes will be lost upon any changes to strings in the admin panel.
+ − 265
+ − 266
$lang_cache = ');
+ − 267
+ − 268
$exported = $this->var_export_string($this->strings);
+ − 269
if ( empty($exported) )
+ − 270
// Ehh, that's not good
+ − 271
$db->_die('lang.php - load_file(): var_export_string() failed');
+ − 272
+ − 273
fwrite($handle, $exported . '; ?>');
+ − 274
+ − 275
// Clean up
+ − 276
unset($exported, $langdata);
+ − 277
+ − 278
// Done =)
+ − 279
fclose($handle);
+ − 280
}
+ − 281
}
+ − 282
+ − 283
/**
205
+ − 284
* Merges a standard language assoc array ($arr[cat][stringid]) with the master in RAM.
+ − 285
* @param array
+ − 286
*/
+ − 287
+ − 288
function merge($strings)
+ − 289
{
+ − 290
// This is stupidly simple.
+ − 291
foreach ( $strings as $cat_id => $contents )
+ − 292
{
243
+ − 293
if ( !isset($this->strings[$cat_id]) || ( isset($this->strings[$cat_id]) && !is_array($this->strings[$cat_id]) ) )
205
+ − 294
$this->strings[$cat_id] = array();
+ − 295
foreach ( $contents as $string_id => $string )
+ − 296
{
+ − 297
$this->strings[$cat_id][$string_id] = $string;
+ − 298
}
+ − 299
}
+ − 300
}
+ − 301
+ − 302
/**
+ − 303
* Imports a JSON-format language file into the database and merges with current strings.
+ − 304
* @param string Path to the JSON file to load
514
+ − 305
* @param bool Enable debugging output, makes the process over CLI more interesting
205
+ − 306
*/
+ − 307
514
+ − 308
function import($file, $debug = false)
205
+ − 309
{
+ − 310
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 311
+ − 312
if ( !file_exists($file) )
+ − 313
$db->_die('lang.php - can\'t import language file: string file doesn\'t exist');
+ − 314
241
c671f3bb8aed
Trying to get lang import to work in the installer; it's not working ATM - cache file is generated with lang_id = 0. Syncing to Nighthawk.
Dan
diff
changeset
+ − 315
if ( $this->lang_id == 0 )
c671f3bb8aed
Trying to get lang import to work in the installer; it's not working ATM - cache file is generated with lang_id = 0. Syncing to Nighthawk.
Dan
diff
changeset
+ − 316
$db->_die('lang.php - BUG: trying to perform import when $lang->lang_id == 0');
c671f3bb8aed
Trying to get lang import to work in the installer; it's not working ATM - cache file is generated with lang_id = 0. Syncing to Nighthawk.
Dan
diff
changeset
+ − 317
514
+ − 318
if ( $debug )
516
+ − 319
$br = ( isset($_SERVER['REQUEST_URI']) ) ? '<br />' : '';
+ − 320
+ − 321
if ( $debug )
+ − 322
echo "Importing file: $file$br\n Checking file...$br\n";
514
+ − 323
205
+ − 324
$contents = trim(@file_get_contents($file));
+ − 325
+ − 326
if ( empty($contents) )
+ − 327
$db->_die('lang.php - can\'t load the contents of the language file');
+ − 328
514
+ − 329
if ( $debug )
516
+ − 330
echo " Cleaning up JSON$br\n";
514
+ − 331
205
+ − 332
// Trim off all text before and after the starting and ending braces
+ − 333
$contents = preg_replace('/^([^{]+)\{/', '{', $contents);
+ − 334
$contents = preg_replace('/\}([^}]+)$/', '}', $contents);
+ − 335
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 336
// Correct syntax to be nice to the json parser
372
5bd429428101
A number of scattered changes. Profiler added and only enabled in debug mode (currently on), but awfully useful for fixing performance in the future. Started work on Admin:LangManager
Dan
diff
changeset
+ − 337
$contents = enano_clean_json($contents);
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 338
514
+ − 339
if ( $debug )
516
+ − 340
echo " Decoding JSON stream$br\n";
514
+ − 341
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 342
try
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 343
{
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 344
$langdata = enano_json_decode($contents);
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 345
}
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 346
catch(Zend_Json_Exception $e)
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 347
{
335
67bd3121a12e
Replaced TinyMCE 2.x with 3.0 beta 3. Supports everything but IE. Also rewrote the editor interface completely from the ground up.
Dan
diff
changeset
+ − 348
$db->_die('lang.php - Exception caught by JSON parser</p><pre>' . htmlspecialchars(print_r($e, true)) . '</pre><p>');
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 349
exit;
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 350
}
205
+ − 351
+ − 352
if ( !is_array($langdata) )
334
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 353
{
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 354
$db->_die('lang.php - invalid or non-well-formed language file');
c72b545f1304
More localization work. Resolved major issue with JSON parser not parsing files over ~50KB. Switched JSON parser to the one from the Zend Framework (BSD licensed). Forced to split enano.json into five different files.
Dan
diff
changeset
+ − 355
}
205
+ − 356
514
+ − 357
if ( $debug )
516
+ − 358
echo " Starting string import$br\n";
514
+ − 359
+ − 360
return $this->import_array($langdata, $debug);
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 361
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 362
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 363
/**
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 364
* Imports a JSON-format language file into the database and merges with current strings.
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 365
* @param string Path to plugin file
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 366
*/
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 367
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 368
function import_plugin($file)
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 369
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 370
global $db, $session, $paths, $template, $plugins; // Common objects
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 371
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 372
if ( !file_exists($file) )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 373
$db->_die('lang.php - can\'t import language file: string file doesn\'t exist');
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 374
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 375
if ( $this->lang_id == 0 )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 376
$db->_die('lang.php - BUG: trying to perform import when $lang->lang_id == 0');
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 377
507
586fd7d3202d
Fixed some stray version numbers (again!); added support for Diffie-Hellman logins in the normal login form (not AJAX) - even works in IE
Dan
diff
changeset
+ − 378
$block = pluginLoader::parse_plugin_blocks($file, 'language');
586fd7d3202d
Fixed some stray version numbers (again!); added support for Diffie-Hellman logins in the normal login form (not AJAX) - even works in IE
Dan
diff
changeset
+ − 379
if ( !is_array($block) )
586fd7d3202d
Fixed some stray version numbers (again!); added support for Diffie-Hellman logins in the normal login form (not AJAX) - even works in IE
Dan
diff
changeset
+ − 380
return false;
586fd7d3202d
Fixed some stray version numbers (again!); added support for Diffie-Hellman logins in the normal login form (not AJAX) - even works in IE
Dan
diff
changeset
+ − 381
if ( !isset($block[0]) )
586fd7d3202d
Fixed some stray version numbers (again!); added support for Diffie-Hellman logins in the normal login form (not AJAX) - even works in IE
Dan
diff
changeset
+ − 382
return false;
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 383
507
586fd7d3202d
Fixed some stray version numbers (again!); added support for Diffie-Hellman logins in the normal login form (not AJAX) - even works in IE
Dan
diff
changeset
+ − 384
$contents =& $block[0]['value'];
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 385
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 386
// Trim off all text before and after the starting and ending braces
519
94214ec0871c
Started work on the new plugin manager and associated management code. Very incomplete at this point and not usable.
Dan
diff
changeset
+ − 387
$contents = enano_trim_json($contents);
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 388
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 389
// Correct syntax to be nice to the json parser
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 390
$contents = enano_clean_json($contents);
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 391
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 392
try
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 393
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 394
$langdata = enano_json_decode($contents);
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 395
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 396
catch(Zend_Json_Exception $e)
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 397
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 398
$db->_die('lang.php - Exception caught by JSON parser</p><pre>' . htmlspecialchars(print_r($e, true)) . '</pre><p>');
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 399
exit;
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 400
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 401
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 402
if ( !is_array($langdata) )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 403
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 404
$db->_die('lang.php - invalid or non-well-formed language file');
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 405
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 406
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 407
// Does the plugin support the current language?
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 408
if ( isset($langdata[$this->lang_code]) )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 409
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 410
// Yes, import that
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 411
return $this->import_array($langdata[$this->lang_code]);
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 412
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 413
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 414
// Just import the first language we run across.
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 415
$supported_langs = array_keys($langdata);
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 416
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 417
if ( !isset($supported_langs[0]) )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 418
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 419
$db->_die('lang.php - plugin has an invalid or corrupt language block');
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 420
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 421
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 422
$first_lang = $supported_langs[0];
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 423
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 424
return $this->import_array($langdata[$first_lang]);
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 425
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 426
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 427
/**
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 428
* Performs the actual import of string data.
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 429
* @param array Parsed JSON object, should be in the form of an array
514
+ − 430
* @param bool Enable debugging output
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 431
* @access private
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 432
*/
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 433
514
+ − 434
protected function import_array($langdata, $debug = false)
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 435
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 436
global $db, $session, $paths, $template, $plugins; // Common objects
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 437
205
+ − 438
if ( !isset($langdata['categories']) || !isset($langdata['strings']) )
+ − 439
$db->_die('lang.php - language file does not contain the proper items');
+ − 440
516
+ − 441
if ( $debug )
+ − 442
$br = ( isset($_SERVER['REQUEST_URI']) ) ? '<br />' : '';
+ − 443
205
+ − 444
$insert_list = array();
+ − 445
$delete_list = array();
+ − 446
+ − 447
foreach ( $langdata['categories'] as $category )
+ − 448
{
+ − 449
if ( isset($langdata['strings'][$category]) )
+ − 450
{
514
+ − 451
if ( $debug )
+ − 452
{
+ − 453
$desc = ( isset($langdata['strings']['meta'][$category]) ) ? $langdata['strings']['meta'][$category] : $this->get("meta_$category");
516
+ − 454
echo " Indexing category: $category ({$desc})$br\n";
514
+ − 455
}
205
+ − 456
foreach ( $langdata['strings'][$category] as $string_name => $string_value )
+ − 457
{
+ − 458
$string_name = $db->escape($string_name);
+ − 459
$string_value = $db->escape($string_value);
+ − 460
$category_name = $db->escape($category);
+ − 461
$insert_list[] = "({$this->lang_id}, '$category_name', '$string_name', '$string_value')";
+ − 462
$delete_list[] = "( lang_id = {$this->lang_id} AND string_category = '$category_name' AND string_name = '$string_name' )";
+ − 463
}
+ − 464
}
+ − 465
}
+ − 466
514
+ − 467
if ( $debug )
+ − 468
{
+ − 469
echo " Running deletion of old strings...";
+ − 470
$start = microtime_float();
+ − 471
}
205
+ − 472
$delete_list = implode(" OR\n ", $delete_list);
+ − 473
377
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 474
if ( !empty($delete_list) )
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 475
{
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 476
$sql = "DELETE FROM " . table_prefix . "language_strings WHERE $delete_list;";
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 477
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 478
// Free some memory
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 479
unset($delete_list);
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 480
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 481
// Run the query
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 482
$q = $db->sql_query($sql);
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 483
if ( !$q )
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 484
$db->_die('lang.php - couldn\'t kill off them old strings');
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 485
}
205
+ − 486
514
+ − 487
if ( $debug )
+ − 488
{
+ − 489
$time = round(microtime_float() - $start, 5);
516
+ − 490
echo "({$time}s)$br\n";
514
+ − 491
}
+ − 492
377
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 493
if ( !empty($insert_list) )
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 494
{
514
+ − 495
if ( $debug )
+ − 496
{
+ − 497
echo " Inserting strings...";
+ − 498
$start = microtime_float();
+ − 499
}
377
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 500
$insert_list = implode(",\n ", $insert_list);
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 501
$sql = "INSERT INTO " . table_prefix . "language_strings(lang_id, string_category, string_name, string_content) VALUES\n $insert_list;";
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 502
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 503
// Free some memory
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 504
unset($insert_list);
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 505
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 506
// Run the query
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 507
$q = $db->sql_query($sql);
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 508
if ( !$q )
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 509
$db->_die('lang.php - couldn\'t insert strings in import()');
514
+ − 510
+ − 511
if ( $debug )
+ − 512
{
+ − 513
$time = round(microtime_float() - $start, 5);
516
+ − 514
echo "({$time}s)$br\n";
514
+ − 515
}
377
bb3e6c3bd4f4
Removed stray debugging info from ACL editor success notification; added ability for guests to set language on URI (?lang=eng); added html_in_pages ACL type and separated from php_in_pages so HTML can be embedded but not PHP; rewote portions of the path manager to better abstract URL input; added Zend Framework into list of BSD-licensed libraries; localized some remaining strings; got the migration script working, but just barely; fixed display bug in Special:Contributions; localized Main Page button in admin panel
Dan
diff
changeset
+ − 516
}
205
+ − 517
+ − 518
// YAY! done!
+ − 519
// This will regenerate the cache file if possible.
514
+ − 520
if ( $debug )
516
+ − 521
echo " Regenerating cache file$br\n";
205
+ − 522
$this->regen_caches();
555
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
diff
changeset
+ − 523
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
diff
changeset
+ − 524
return true;
205
+ − 525
}
+ − 526
+ − 527
/**
+ − 528
* Refetches the strings and writes out the cache file.
+ − 529
*/
+ − 530
+ − 531
function regen_caches()
+ − 532
{
+ − 533
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 534
+ − 535
$lang_file = ENANO_ROOT . "/cache/lang_{$this->lang_id}.php";
+ − 536
+ − 537
// Refresh the strings in RAM to the latest copies in the DB
+ − 538
$this->fetch(false);
+ − 539
+ − 540
$handle = @fopen($lang_file, 'w');
+ − 541
if ( !$handle )
+ − 542
// Couldn't open the file. Silently fail and let the strings come from the database.
+ − 543
return false;
+ − 544
+ − 545
// The file's open, that means we should be good.
+ − 546
fwrite($handle, '<?php
+ − 547
// This file was generated automatically by Enano. You should not edit this file because any changes you make
+ − 548
// to it will not be visible in the ACP and all changes will be lost upon any changes to strings in the admin panel.
+ − 549
+ − 550
$lang_cache = ');
+ − 551
+ − 552
$exported = $this->var_export_string($this->strings);
+ − 553
if ( empty($exported) )
+ − 554
// Ehh, that's not good
+ − 555
$db->_die('lang.php - var_export_string() failed');
+ − 556
+ − 557
fwrite($handle, $exported . '; ?>');
+ − 558
210
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 559
// Update timestamp in database
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 560
$q = $db->sql_query('UPDATE ' . table_prefix . 'language SET last_changed = ' . time() . ' WHERE lang_id = ' . $this->lang_id . ';');
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 561
if ( !$q )
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 562
$db->_die('lang.php - updating timestamp on language');
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 563
205
+ − 564
// Done =)
+ − 565
fclose($handle);
+ − 566
}
+ − 567
+ − 568
/**
+ − 569
* Calls var_export() on whatever, and returns the function's output.
+ − 570
* @param mixed Whatever you want var_exported. Usually an array.
+ − 571
* @return string
+ − 572
*/
+ − 573
590
03a60844c7c5
Several optimization changes including getting rid of a few eval()s. Added placeholder functions for the theme manager, which should be working now
Dan
diff
changeset
+ − 574
static function var_export_string($val)
205
+ − 575
{
+ − 576
ob_start();
+ − 577
var_export($val);
+ − 578
$contents = ob_get_contents();
+ − 579
ob_end_clean();
+ − 580
return $contents;
+ − 581
}
+ − 582
+ − 583
/**
+ − 584
* Fetches a language string from the cache in RAM. If it isn't there, it will call fetch() again and then try. If it still can't find it, it will ask for the string
+ − 585
* in the default language. If even then the string can't be found, this function will return what was passed to it.
+ − 586
*
+ − 587
* This will also templatize strings. If a string contains variables in the format %foo%, you may specify the second parameter as an associative array in the format
+ − 588
* of 'foo' => 'foo substitute'.
+ − 589
*
+ − 590
* @param string ID of the string to fetch. This will always be in the format of category_stringid.
+ − 591
* @param array Optional. Associative array of substitutions.
+ − 592
* @return string
+ − 593
*/
+ − 594
+ − 595
function get($string_id, $substitutions = false)
+ − 596
{
376
+ − 597
if ( !is_array($substitutions) )
+ − 598
$substitutions = array();
536
+ − 599
// if this isn't a valid language string ID, just return the string unprocessed.
+ − 600
if ( !preg_match('/^([a-z0-9]+)((_[a-z0-9]+)+)$/', $string_id) )
+ − 601
return $string_id;
376
+ − 602
return $this->substitute($this->get_uncensored($string_id), $substitutions);
+ − 603
}
+ − 604
+ − 605
/**
+ − 606
* The same as get(), but does not perform any substitution or filtering. Used in get() (of course) and in the admin panel, where
+ − 607
* strings are updated only if they were changed.
+ − 608
*
+ − 609
* @param string ID of the string to fetch. This will always be in the format of category_stringid.
+ − 610
* @param array Optional. Associative array of substitutions.
+ − 611
* @return string
+ − 612
*/
+ − 613
+ − 614
function get_uncensored($string_id, $substitutions = false)
+ − 615
{
205
+ − 616
// Extract the category and string ID
+ − 617
$category = substr($string_id, 0, ( strpos($string_id, '_') ));
+ − 618
$string_name = substr($string_id, ( strpos($string_id, '_') + 1 ));
+ − 619
$found = false;
+ − 620
if ( isset($this->strings[$category]) && isset($this->strings[$category][$string_name]) )
+ − 621
{
+ − 622
$found = true;
+ − 623
$string = $this->strings[$category][$string_name];
+ − 624
}
+ − 625
if ( !$found )
+ − 626
{
+ − 627
// Ehh, the string wasn't found. Rerun fetch() and try again.
536
+ − 628
// Or if it's the installer, no use in refetching, so just fail.
243
+ − 629
if ( defined('IN_ENANO_INSTALL') )
+ − 630
{
+ − 631
return $string_id;
+ − 632
}
590
03a60844c7c5
Several optimization changes including getting rid of a few eval()s. Added placeholder functions for the theme manager, which should be working now
Dan
diff
changeset
+ − 633
profiler_log('Language(' . $this->lang_code . '): refetching due to missing string: ' . $string_id);
205
+ − 634
$this->fetch();
+ − 635
if ( isset($this->strings[$category]) && isset($this->strings[$category][$string_name]) )
+ − 636
{
+ − 637
$found = true;
+ − 638
$string = $this->strings[$category][$string_name];
+ − 639
}
+ − 640
if ( !$found )
+ − 641
{
+ − 642
// STILL not found. Check the default language.
+ − 643
$lang_default = ( $x = getConfig('default_language') ) ? intval($x) : $this->lang_id;
+ − 644
if ( $lang_default != $this->lang_id )
+ − 645
{
+ − 646
if ( !is_object($this->default) )
+ − 647
$this->default = new Language($lang_default);
376
+ − 648
return $this->default->get_uncensored($string_id);
205
+ − 649
}
+ − 650
}
+ − 651
}
+ − 652
if ( !$found )
+ − 653
{
+ − 654
// Alright, it's nowhere. Return the input, grumble grumble...
+ − 655
return $string_id;
+ − 656
}
+ − 657
// Found it!
376
+ − 658
return $string;
205
+ − 659
}
+ − 660
+ − 661
/**
+ − 662
* Processes substitutions.
+ − 663
* @param string
+ − 664
* @param array
+ − 665
* @return string
+ − 666
*/
+ − 667
+ − 668
function substitute($string, $subs)
+ − 669
{
+ − 670
preg_match_all('/%this\.([a-z0-9_]+)%/', $string, $matches);
+ − 671
if ( count($matches[0]) > 0 )
+ − 672
{
+ − 673
foreach ( $matches[1] as $i => $string_id )
+ − 674
{
+ − 675
$result = $this->get($string_id);
+ − 676
$string = str_replace($matches[0][$i], $result, $string);
+ − 677
}
+ − 678
}
209
+ − 679
preg_match_all('/%config\.([a-z0-9_]+)%/', $string, $matches);
+ − 680
if ( count($matches[0]) > 0 )
+ − 681
{
+ − 682
foreach ( $matches[1] as $i => $string_id )
+ − 683
{
+ − 684
$result = getConfig($string_id);
+ − 685
$string = str_replace($matches[0][$i], $result, $string);
+ − 686
}
+ − 687
}
205
+ − 688
foreach ( $subs as $key => $value )
+ − 689
{
209
+ − 690
$subs[$key] = strval($value);
+ − 691
$string = str_replace("%{$key}%", "{$subs[$key]}", $string);
205
+ − 692
}
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 693
return ( $this->debug ) ? "$string*" : $string;
205
+ − 694
}
+ − 695
+ − 696
} // class Language
+ − 697
+ − 698
?>