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
/**
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 71
* List of available filters to pass variables through.
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 72
* @var array
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 73
* @access private
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 74
*/
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 75
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 76
protected $filters = array();
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 77
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 78
/**
205
+ − 79
* Constructor.
+ − 80
* @param int|string Language ID or code to load.
+ − 81
*/
+ − 82
+ − 83
function __construct($lang)
+ − 84
{
+ − 85
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 86
626
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 87
if ( defined('IN_ENANO_INSTALL') && ( !defined('ENANO_CONFIG_FETCHED') || ( defined('IN_ENANO_UPGRADE') && !defined('IN_ENANO_UPGRADE_POST') ) ) )
205
+ − 88
{
616
e311f5e6f904
Got the installer working. Fixed a few bugs including a nasty-to-debug issue where the lang_id was being hardcoded during installation, resulting in strings being inserted with the wrong lang_id causing an infinfinite loop with fetch() throwing a "no strings" error and using template (which calls fetch()) to complain
Dan
diff
changeset
+ − 89
// special case for the Enano installer: it will load its own strings from a JSON file and just use this API for fetching
e311f5e6f904
Got the installer working. Fixed a few bugs including a nasty-to-debug issue where the lang_id was being hardcoded during installation, resulting in strings being inserted with the wrong lang_id causing an infinfinite loop with fetch() throwing a "no strings" error and using template (which calls fetch()) to complain
Dan
diff
changeset
+ − 90
// and templatizing them.
e311f5e6f904
Got the installer working. Fixed a few bugs including a nasty-to-debug issue where the lang_id was being hardcoded during installation, resulting in strings being inserted with the wrong lang_id causing an infinfinite loop with fetch() throwing a "no strings" error and using template (which calls fetch()) to complain
Dan
diff
changeset
+ − 91
// 1.1.4 fix: this was still being called after main API startup from installer payload
243
+ − 92
$this->lang_id = 1;
+ − 93
$this->lang_code = $lang;
205
+ − 94
return true;
+ − 95
}
+ − 96
if ( is_string($lang) )
+ − 97
{
371
dc6026376919
Improved compatibility with PostgreSQL and fixed a number of installer bugs; fixed missing "meta" category declaration in language files
Dan
diff
changeset
+ − 98
$sql_col = 'lang_code=\'' . $db->escape($lang) . '\'';
205
+ − 99
}
+ − 100
else if ( is_int($lang) )
+ − 101
{
+ − 102
$sql_col = 'lang_id=' . $lang . '';
+ − 103
}
+ − 104
else
+ − 105
{
+ − 106
$db->_die('lang.php - attempting to pass invalid value to constructor');
+ − 107
}
+ − 108
616
e311f5e6f904
Got the installer working. Fixed a few bugs including a nasty-to-debug issue where the lang_id was being hardcoded during installation, resulting in strings being inserted with the wrong lang_id causing an infinfinite loop with fetch() throwing a "no strings" error and using template (which calls fetch()) to complain
Dan
diff
changeset
+ − 109
$lang_default = ( $x = getConfig('default_language') ) ? intval($x) : '0';
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
+ − 110
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
+ − 111
$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
+ − 112
+ − 113
if ( !$q )
+ − 114
$db->_die('lang.php - main select query');
+ − 115
+ − 116
if ( $db->numrows() < 1 )
+ − 117
$db->_die('lang.php - There are no languages installed');
+ − 118
+ − 119
$row = $db->fetchrow();
+ − 120
+ − 121
$this->lang_id = intval( $row['lang_id'] );
+ − 122
$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
+ − 123
$this->lang_timestamp = $row['last_changed'];
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 124
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 125
$this->register_filter('htmlsafe', 'htmlspecialchars');
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 126
$this->register_filter('urlencode', 'urlencode');
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 127
$this->register_filter('rawurlencode', 'rawurlencode');
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 128
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 129
$code = $plugins->setHook('lang_init');
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 130
foreach ( $code as $cmd )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 131
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 132
eval($cmd);
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 133
}
205
+ − 134
}
+ − 135
+ − 136
/**
+ − 137
* Fetches language strings from the database, or a cache file if it's available.
+ − 138
* @param bool If true (default), allows the cache to be used.
+ − 139
*/
+ − 140
+ − 141
function fetch($allow_cache = true)
+ − 142
{
+ − 143
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 144
+ − 145
// Attempt to load the strings from a cache file
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 146
$loaded = false;
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 147
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 148
if ( $allow_cache )
205
+ − 149
{
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 150
// Load the cache manager
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 151
global $cache;
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 152
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 153
if ( $cached = $cache->fetch("lang_{$this->lang_id}") )
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 154
{
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 155
$this->merge($cached);
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 156
$loaded = true;
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 157
}
205
+ − 158
}
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 159
if ( !$loaded )
205
+ − 160
{
+ − 161
// No cache file - select and retrieve from the database
+ − 162
$q = $db->sql_unbuffered_query("SELECT string_category, string_name, string_content FROM " . table_prefix . "language_strings WHERE lang_id = {$this->lang_id};");
+ − 163
if ( !$q )
+ − 164
$db->_die('lang.php - selecting language string data');
+ − 165
if ( $row = $db->fetchrow() )
+ − 166
{
+ − 167
$strings = array();
+ − 168
do
+ − 169
{
+ − 170
$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
+ − 171
if ( !is_array(@$strings[$cat]) )
205
+ − 172
{
+ − 173
$strings[$cat] = array();
+ − 174
}
+ − 175
$strings[$cat][ $row['string_name'] ] = $row['string_content'];
+ − 176
}
+ − 177
while ( $row = $db->fetchrow() );
+ − 178
// all done fetching
+ − 179
$this->merge($strings);
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 180
$this->regen_caches(false);
205
+ − 181
}
654
+ − 182
/*
205
+ − 183
else
+ − 184
{
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
+ − 185
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
+ − 186
$db->_die('lang.php - No strings for language ' . $this->lang_code);
205
+ − 187
}
654
+ − 188
*/
205
+ − 189
}
+ − 190
}
+ − 191
+ − 192
/**
+ − 193
* Loads a file from the disk cache (treated as PHP) and merges it into RAM.
+ − 194
* @param string File to load
+ − 195
*/
+ − 196
+ − 197
function load_cache_file($file)
+ − 198
{
+ − 199
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 200
+ − 201
if ( !file_exists($file) )
+ − 202
$db->_die('lang.php - requested cache file doesn\'t exist');
+ − 203
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
+ − 204
@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
+ − 205
205
+ − 206
if ( !isset($lang_cache) || ( isset($lang_cache) && !is_array($lang_cache) ) )
+ − 207
$db->_die('lang.php - the cache file is invalid (didn\'t set $lang_cache as an array)');
+ − 208
+ − 209
$this->merge($lang_cache);
+ − 210
}
+ − 211
+ − 212
/**
243
+ − 213
* Loads a JSON language file and parses the strings into RAM. Will use the cache if possible, but stays far away from the database,
+ − 214
* which we assume doesn't exist yet.
+ − 215
*/
+ − 216
+ − 217
function load_file($file)
+ − 218
{
+ − 219
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 220
+ − 221
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
+ − 222
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 223
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
+ − 224
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 225
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
+ − 226
}
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 227
else
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 228
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 229
$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
+ − 230
}
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 231
}
243
+ − 232
+ − 233
$contents = trim(@file_get_contents($file));
+ − 234
if ( empty($contents) )
+ − 235
$db->_die('lang.php - empty language file...');
+ − 236
+ − 237
// Trim off all text before and after the starting and ending braces
+ − 238
$contents = preg_replace('/^([^{]+)\{/', '{', $contents);
+ − 239
$contents = preg_replace('/\}([^}]+)$/', '}', $contents);
+ − 240
$contents = trim($contents);
+ − 241
+ − 242
if ( empty($contents) )
+ − 243
$db->_die('lang.php - no meat to the language file...');
+ − 244
+ − 245
$checksum = md5($contents);
+ − 246
if ( file_exists("./cache/lang_json_{$checksum}.php") )
+ − 247
{
+ − 248
$this->load_cache_file("./cache/lang_json_{$checksum}.php");
+ − 249
}
+ − 250
else
+ − 251
{
348
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 252
// 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
+ − 253
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 254
// eliminate comments
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 255
$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
+ − 256
// 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
+ − 257
'#^\s*//(.+)$#m',
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 258
// 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
+ − 259
'#^\s*/\*(.+)\*/#Us',
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 260
// 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
+ − 261
'#/\*(.+)\*/\s*$#Us'
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 262
), '', $contents);
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 263
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 264
$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
+ − 265
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 266
try
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 267
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 268
$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
+ − 269
}
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 270
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
+ − 271
{
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 272
$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
+ − 273
exit;
87e08a6e4fec
Welcome to the new Enano installer. Much distance still to be covered but the basics are there.
Dan
diff
changeset
+ − 274
}
243
+ − 275
+ − 276
if ( !is_array($langdata) )
+ − 277
$db->_die('lang.php - invalid language file');
+ − 278
+ − 279
if ( !isset($langdata['categories']) || !isset($langdata['strings']) )
+ − 280
$db->_die('lang.php - language file does not contain the proper items');
+ − 281
+ − 282
$this->merge($langdata['strings']);
+ − 283
+ − 284
$lang_file = "./cache/lang_json_{$checksum}.php";
+ − 285
+ − 286
$handle = @fopen($lang_file, 'w');
+ − 287
if ( !$handle )
+ − 288
// Couldn't open the file. Silently fail and let the strings come from RAM.
+ − 289
return false;
+ − 290
+ − 291
// The file's open, that means we should be good.
+ − 292
fwrite($handle, '<?php
+ − 293
// This file was generated automatically by Enano. You should not edit this file because any changes you make
+ − 294
// to it will not be visible in the ACP and all changes will be lost upon any changes to strings in the admin panel.
+ − 295
+ − 296
$lang_cache = ');
+ − 297
+ − 298
$exported = $this->var_export_string($this->strings);
+ − 299
if ( empty($exported) )
+ − 300
// Ehh, that's not good
+ − 301
$db->_die('lang.php - load_file(): var_export_string() failed');
+ − 302
+ − 303
fwrite($handle, $exported . '; ?>');
+ − 304
+ − 305
// Clean up
+ − 306
unset($exported, $langdata);
+ − 307
+ − 308
// Done =)
+ − 309
fclose($handle);
+ − 310
}
+ − 311
}
+ − 312
+ − 313
/**
205
+ − 314
* Merges a standard language assoc array ($arr[cat][stringid]) with the master in RAM.
+ − 315
* @param array
+ − 316
*/
+ − 317
+ − 318
function merge($strings)
+ − 319
{
+ − 320
// This is stupidly simple.
+ − 321
foreach ( $strings as $cat_id => $contents )
+ − 322
{
243
+ − 323
if ( !isset($this->strings[$cat_id]) || ( isset($this->strings[$cat_id]) && !is_array($this->strings[$cat_id]) ) )
205
+ − 324
$this->strings[$cat_id] = array();
+ − 325
foreach ( $contents as $string_id => $string )
+ − 326
{
+ − 327
$this->strings[$cat_id][$string_id] = $string;
+ − 328
}
+ − 329
}
+ − 330
}
+ − 331
+ − 332
/**
+ − 333
* Imports a JSON-format language file into the database and merges with current strings.
+ − 334
* @param string Path to the JSON file to load
626
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 335
* @param bool If true, only imports new strings and skips those that already exist. Defaults to false (import all strings)
514
+ − 336
* @param bool Enable debugging output, makes the process over CLI more interesting
205
+ − 337
*/
+ − 338
626
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 339
function import($file, $skip_existing = false, $debug = false)
205
+ − 340
{
+ − 341
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 342
+ − 343
if ( !file_exists($file) )
+ − 344
$db->_die('lang.php - can\'t import language file: string file doesn\'t exist');
+ − 345
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
+ − 346
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
+ − 347
$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
+ − 348
514
+ − 349
if ( $debug )
516
+ − 350
$br = ( isset($_SERVER['REQUEST_URI']) ) ? '<br />' : '';
+ − 351
+ − 352
if ( $debug )
+ − 353
echo "Importing file: $file$br\n Checking file...$br\n";
514
+ − 354
205
+ − 355
$contents = trim(@file_get_contents($file));
+ − 356
+ − 357
if ( empty($contents) )
+ − 358
$db->_die('lang.php - can\'t load the contents of the language file');
+ − 359
514
+ − 360
if ( $debug )
516
+ − 361
echo " Cleaning up JSON$br\n";
514
+ − 362
205
+ − 363
// Trim off all text before and after the starting and ending braces
+ − 364
$contents = preg_replace('/^([^{]+)\{/', '{', $contents);
+ − 365
$contents = preg_replace('/\}([^}]+)$/', '}', $contents);
+ − 366
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
+ − 367
// 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
+ − 368
$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
+ − 369
514
+ − 370
if ( $debug )
516
+ − 371
echo " Decoding JSON stream$br\n";
514
+ − 372
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
+ − 373
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
+ − 374
{
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
+ − 375
$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
+ − 376
}
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
+ − 377
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
+ − 378
{
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
+ − 379
$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
+ − 380
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
+ − 381
}
205
+ − 382
+ − 383
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
+ − 384
{
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
+ − 385
$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
+ − 386
}
205
+ − 387
514
+ − 388
if ( $debug )
516
+ − 389
echo " Starting string import$br\n";
514
+ − 390
626
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 391
return $this->import_array($langdata, $skip_existing, $debug);
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 392
}
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
/**
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 395
* 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
+ − 396
* @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
+ − 397
*/
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 398
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 399
function import_plugin($file)
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
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
+ − 402
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 403
if ( !file_exists($file) )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 404
$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
+ − 405
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 406
if ( $this->lang_id == 0 )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 407
$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
+ − 408
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
+ − 409
$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
+ − 410
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
+ − 411
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
+ − 412
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
+ − 413
return false;
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 414
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
+ − 415
$contents =& $block[0]['value'];
504
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
// 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
+ − 418
$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
+ − 419
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 420
// 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
+ − 421
$contents = enano_clean_json($contents);
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 422
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 423
try
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 424
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 425
$langdata = enano_json_decode($contents);
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
catch(Zend_Json_Exception $e)
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 428
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 429
$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
+ − 430
exit;
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 431
}
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
if ( !is_array($langdata) )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 434
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 435
$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
+ − 436
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 437
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 438
// 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
+ − 439
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
+ − 440
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 441
// Yes, import that
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 442
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
+ − 443
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 444
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 445
// 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
+ − 446
$supported_langs = array_keys($langdata);
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 447
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 448
if ( !isset($supported_langs[0]) )
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 449
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 450
$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
+ − 451
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 452
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 453
$first_lang = $supported_langs[0];
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 454
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 455
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
+ − 456
}
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 457
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 458
/**
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 459
* 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
+ − 460
* @param array Parsed JSON object, should be in the form of an array
626
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 461
* @param bool If true, only imports new strings and skips those that already exist. Defaults to false.
514
+ − 462
* @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
+ − 463
* @access private
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 464
*/
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 465
626
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 466
protected function import_array($langdata, $skip_existing = false, $debug = false)
504
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 467
{
bc8e0e9ee01d
Added support for embedding language data into plugins; updated all version numbers on plugin files
Dan
diff
changeset
+ − 468
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
+ − 469
205
+ − 470
if ( !isset($langdata['categories']) || !isset($langdata['strings']) )
+ − 471
$db->_die('lang.php - language file does not contain the proper items');
+ − 472
516
+ − 473
if ( $debug )
+ − 474
$br = ( isset($_SERVER['REQUEST_URI']) ) ? '<br />' : '';
+ − 475
205
+ − 476
$insert_list = array();
+ − 477
$delete_list = array();
+ − 478
+ − 479
foreach ( $langdata['categories'] as $category )
+ − 480
{
+ − 481
if ( isset($langdata['strings'][$category]) )
+ − 482
{
514
+ − 483
if ( $debug )
+ − 484
{
+ − 485
$desc = ( isset($langdata['strings']['meta'][$category]) ) ? $langdata['strings']['meta'][$category] : $this->get("meta_$category");
516
+ − 486
echo " Indexing category: $category ({$desc})$br\n";
514
+ − 487
}
205
+ − 488
foreach ( $langdata['strings'][$category] as $string_name => $string_value )
+ − 489
{
626
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 490
// should we skip this string?
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 491
if ( isset($this->strings[$category]) && $skip_existing )
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 492
{
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 493
if ( isset($this->strings[$category][$string_name]) )
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 494
{
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 495
// already exists, skip
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 496
if ( $debug )
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 497
echo " Skipping string (already exists): {$category}_{$string_name}$br\n";
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 498
continue;
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 499
}
be0e904eec17
Refined upgrade process a bit. Uses libenanoinstall (incomplete), and post stage added to flush caches and import new strings
Dan
diff
changeset
+ − 500
}
205
+ − 501
$string_name = $db->escape($string_name);
+ − 502
$string_value = $db->escape($string_value);
+ − 503
$category_name = $db->escape($category);
+ − 504
$insert_list[] = "({$this->lang_id}, '$category_name', '$string_name', '$string_value')";
+ − 505
$delete_list[] = "( lang_id = {$this->lang_id} AND string_category = '$category_name' AND string_name = '$string_name' )";
+ − 506
}
+ − 507
}
+ − 508
}
+ − 509
514
+ − 510
if ( $debug )
+ − 511
{
+ − 512
echo " Running deletion of old strings...";
+ − 513
$start = microtime_float();
+ − 514
}
205
+ − 515
$delete_list = implode(" OR\n ", $delete_list);
+ − 516
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
+ − 517
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
+ − 518
{
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
+ − 519
$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
+ − 520
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
+ − 521
// 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
+ − 522
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
+ − 523
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
+ − 524
// 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
+ − 525
$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
+ − 526
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
+ − 527
$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
+ − 528
}
205
+ − 529
514
+ − 530
if ( $debug )
+ − 531
{
+ − 532
$time = round(microtime_float() - $start, 5);
516
+ − 533
echo "({$time}s)$br\n";
514
+ − 534
}
+ − 535
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
+ − 536
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
+ − 537
{
514
+ − 538
if ( $debug )
+ − 539
{
+ − 540
echo " Inserting strings...";
+ − 541
$start = microtime_float();
+ − 542
}
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
+ − 543
$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
+ − 544
$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
+ − 545
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
+ − 546
// 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
+ − 547
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
+ − 548
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
+ − 549
// 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
+ − 550
$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
+ − 551
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
+ − 552
$db->_die('lang.php - couldn\'t insert strings in import()');
514
+ − 553
+ − 554
if ( $debug )
+ − 555
{
+ − 556
$time = round(microtime_float() - $start, 5);
516
+ − 557
echo "({$time}s)$br\n";
514
+ − 558
}
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
+ − 559
}
205
+ − 560
+ − 561
// YAY! done!
+ − 562
// This will regenerate the cache file if possible.
514
+ − 563
if ( $debug )
516
+ − 564
echo " Regenerating cache file$br\n";
205
+ − 565
$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
+ − 566
ac4c6a7f01d8
Added user preference for disabling visual effects in Javascript applets; added re-import button to installed plugins
Dan
diff
changeset
+ − 567
return true;
205
+ − 568
}
+ − 569
+ − 570
/**
+ − 571
* Refetches the strings and writes out the cache file.
+ − 572
*/
+ − 573
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 574
function regen_caches($refetch = true)
205
+ − 575
{
+ − 576
global $db, $session, $paths, $template, $plugins; // Common objects
+ − 577
+ − 578
// Refresh the strings in RAM to the latest copies in the DB
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 579
if ( $refetch )
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 580
$this->fetch(false);
205
+ − 581
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 582
// Load the cache manager
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 583
global $cache;
205
+ − 584
607
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 585
// Store it
935f3799b654
First stab at cache management backend. Everything seems to have been tested and working so far, but a number of things require a more specialized cache and can't go through the framework (e.g. user ranks which use references to map usernames to user IDs)
Dan
diff
changeset
+ − 586
$cache->store("lang_{$this->lang_id}", $this->strings, -1);
205
+ − 587
210
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 588
// 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
+ − 589
$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
+ − 590
if ( !$q )
2b283402e4e4
Added language export to JSON page and localization for Javascript using $lang.get(). Localized AJAX login interface.
Dan
diff
changeset
+ − 591
$db->_die('lang.php - updating timestamp on language');
613
+ − 592
+ − 593
return true;
205
+ − 594
}
+ − 595
+ − 596
/**
+ − 597
* Calls var_export() on whatever, and returns the function's output.
+ − 598
* @param mixed Whatever you want var_exported. Usually an array.
+ − 599
* @return string
+ − 600
*/
+ − 601
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
+ − 602
static function var_export_string($val)
205
+ − 603
{
+ − 604
ob_start();
+ − 605
var_export($val);
+ − 606
$contents = ob_get_contents();
+ − 607
ob_end_clean();
+ − 608
return $contents;
+ − 609
}
+ − 610
+ − 611
/**
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 612
* Registers a filter, a function that strings can be passed through to change the string somehow (e.g. htmlspecialchars)
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 613
* @param string Filter name. Lowercase alphanumeric (htmlsafe)
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 614
* @param callback Function to call.
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 615
* @return bool True on success, false if some error occurred
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 616
*/
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 617
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 618
public function register_filter($filter_name, $filter_function)
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 619
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 620
if ( !is_string($filter_function) && !is_array($filter_function) )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 621
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 622
return false;
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 623
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 624
if ( ( is_string($filter_function) && !function_exists($filter_function) ) || ( is_array($filter_function) && !method_exists(@$filter_function[0], @$filter_function[1]) ) )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 625
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 626
return false;
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 627
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 628
if ( !preg_match('/^[a-z0-9_]+$/', $filter_name) )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 629
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 630
return false;
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 631
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 632
$this->filters[$filter_name] = $filter_function;
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 633
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 634
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 635
/**
205
+ − 636
* 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
+ − 637
* in the default language. If even then the string can't be found, this function will return what was passed to it.
+ − 638
*
+ − 639
* 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
+ − 640
* of 'foo' => 'foo substitute'.
+ − 641
*
+ − 642
* @param string ID of the string to fetch. This will always be in the format of category_stringid.
+ − 643
* @param array Optional. Associative array of substitutions.
+ − 644
* @return string
+ − 645
*/
+ − 646
+ − 647
function get($string_id, $substitutions = false)
+ − 648
{
376
+ − 649
if ( !is_array($substitutions) )
+ − 650
$substitutions = array();
536
+ − 651
// if this isn't a valid language string ID, just return the string unprocessed.
+ − 652
if ( !preg_match('/^([a-z0-9]+)((_[a-z0-9]+)+)$/', $string_id) )
+ − 653
return $string_id;
376
+ − 654
return $this->substitute($this->get_uncensored($string_id), $substitutions);
+ − 655
}
+ − 656
+ − 657
/**
+ − 658
* The same as get(), but does not perform any substitution or filtering. Used in get() (of course) and in the admin panel, where
+ − 659
* strings are updated only if they were changed.
+ − 660
*
+ − 661
* @param string ID of the string to fetch. This will always be in the format of category_stringid.
+ − 662
* @param array Optional. Associative array of substitutions.
+ − 663
* @return string
+ − 664
*/
+ − 665
+ − 666
function get_uncensored($string_id, $substitutions = false)
+ − 667
{
616
e311f5e6f904
Got the installer working. Fixed a few bugs including a nasty-to-debug issue where the lang_id was being hardcoded during installation, resulting in strings being inserted with the wrong lang_id causing an infinfinite loop with fetch() throwing a "no strings" error and using template (which calls fetch()) to complain
Dan
diff
changeset
+ − 668
global $db, $session, $paths, $template, $plugins; // Common objects
e311f5e6f904
Got the installer working. Fixed a few bugs including a nasty-to-debug issue where the lang_id was being hardcoded during installation, resulting in strings being inserted with the wrong lang_id causing an infinfinite loop with fetch() throwing a "no strings" error and using template (which calls fetch()) to complain
Dan
diff
changeset
+ − 669
205
+ − 670
// Extract the category and string ID
+ − 671
$category = substr($string_id, 0, ( strpos($string_id, '_') ));
+ − 672
$string_name = substr($string_id, ( strpos($string_id, '_') + 1 ));
+ − 673
$found = false;
+ − 674
if ( isset($this->strings[$category]) && isset($this->strings[$category][$string_name]) )
+ − 675
{
+ − 676
$found = true;
+ − 677
$string = $this->strings[$category][$string_name];
+ − 678
}
+ − 679
if ( !$found )
+ − 680
{
+ − 681
// Ehh, the string wasn't found. Rerun fetch() and try again.
536
+ − 682
// Or if it's the installer, no use in refetching, so just fail.
616
e311f5e6f904
Got the installer working. Fixed a few bugs including a nasty-to-debug issue where the lang_id was being hardcoded during installation, resulting in strings being inserted with the wrong lang_id causing an infinfinite loop with fetch() throwing a "no strings" error and using template (which calls fetch()) to complain
Dan
diff
changeset
+ − 683
if ( defined('IN_ENANO_INSTALL') || ( defined('ENANO_INSTALLED') && !@$db->_conn ) )
243
+ − 684
{
+ − 685
return $string_id;
+ − 686
}
205
+ − 687
$this->fetch();
593
4f9bec0d65c1
More optimization work. Moved special page init functions to common instead of common_post hook. Allowed paths to cache page metadata on filesystem. Phased out the redundancy in $paths->pages that paired a number with every urlname as foreach loops are allowed now (and have been for some time). Fixed missing includes for several functions. Rewrote str_replace_once to be a lot more efficient.
Dan
diff
changeset
+ − 688
profiler_log('Language(' . $this->lang_code . '): refetched due to missing string: ' . $string_id);
205
+ − 689
if ( isset($this->strings[$category]) && isset($this->strings[$category][$string_name]) )
+ − 690
{
+ − 691
$found = true;
+ − 692
$string = $this->strings[$category][$string_name];
+ − 693
}
+ − 694
if ( !$found )
+ − 695
{
+ − 696
// STILL not found. Check the default language.
+ − 697
$lang_default = ( $x = getConfig('default_language') ) ? intval($x) : $this->lang_id;
+ − 698
if ( $lang_default != $this->lang_id )
+ − 699
{
+ − 700
if ( !is_object($this->default) )
+ − 701
$this->default = new Language($lang_default);
376
+ − 702
return $this->default->get_uncensored($string_id);
205
+ − 703
}
+ − 704
}
+ − 705
}
+ − 706
if ( !$found )
+ − 707
{
+ − 708
// Alright, it's nowhere. Return the input, grumble grumble...
+ − 709
return $string_id;
+ − 710
}
+ − 711
// Found it!
376
+ − 712
return $string;
205
+ − 713
}
+ − 714
+ − 715
/**
+ − 716
* Processes substitutions.
+ − 717
* @param string
+ − 718
* @param array
+ − 719
* @return string
+ − 720
*/
+ − 721
+ − 722
function substitute($string, $subs)
+ − 723
{
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 724
preg_match_all('/%this\.([a-z0-9_]+)((?:\|(?:[a-z0-9_]+))*)%/', $string, $matches);
205
+ − 725
if ( count($matches[0]) > 0 )
+ − 726
{
+ − 727
foreach ( $matches[1] as $i => $string_id )
+ − 728
{
+ − 729
$result = $this->get($string_id);
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 730
$string = str_replace($matches[0][$i], $this->process_filters($result, $matches[2][$i]), $string);
205
+ − 731
}
+ − 732
}
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 733
preg_match_all('/%config\.([a-z0-9_]+)((?:\|(?:[a-z0-9_]+))*)%/', $string, $matches);
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 734
if ( count($matches[0]) > 0 )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 735
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 736
foreach ( $matches[1] as $i => $string_id )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 737
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 738
$result = getConfig($string_id, '');
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 739
$string = str_replace($matches[0][$i], $this->process_filters($result, $matches[2][$i]), $string);
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 740
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 741
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 742
preg_match_all('/%([a-z0-9_]+)((?:\|(?:[a-z0-9_]+))*)%/', $string, $matches);
209
+ − 743
if ( count($matches[0]) > 0 )
+ − 744
{
+ − 745
foreach ( $matches[1] as $i => $string_id )
+ − 746
{
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 747
if ( isset($subs[$string_id]) )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 748
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 749
$string = str_replace($matches[0][$i], $this->process_filters($subs[$string_id], $matches[2][$i]), $string);
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 750
}
209
+ − 751
}
+ − 752
}
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 753
return ( $this->debug ) ? "$string*" : $string;
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 754
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 755
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 756
/**
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 757
* Processes filters to a language string.
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 758
* @param string Unprocessed string
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 759
* @param string Filter list (format: |filter1|filter2|filter3, initial pipe is important); can also be an array if you so desire
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 760
* @return string
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 761
*/
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 762
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 763
function process_filters($string, $filters)
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 764
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 765
if ( !empty($filters) )
205
+ − 766
{
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 767
$filters = trim($filters, '|');
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 768
$filters = explode('|', $filters);
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 769
foreach ( $filters as $filter )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 770
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 771
if ( isset($this->filters[$filter]) )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 772
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 773
$result = @call_user_func($this->filters[$filter], $string);
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 774
if ( is_string($result) )
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 775
{
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 776
$string = $result;
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 777
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 778
}
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 779
}
205
+ − 780
}
668
0631e4de5de6
Added ability to have language strings send variables through filter functions. Operates based on predefined filters, expandable with a call to Language::register_filter at the hook lang_init
Dan
diff
changeset
+ − 781
return $string;
205
+ − 782
}
+ − 783
+ − 784
} // class Language
+ − 785
+ − 786
?>