summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--text.class73
1 files changed, 24 insertions, 49 deletions
diff --git a/text.class b/text.class
index fe071f8..dffe5de 100644
--- a/text.class
+++ b/text.class
@@ -21,42 +21,22 @@ class it_text
var $languages_available = array(); # Available languages
var $language_failsafe; # First available language. Must be complete (used as fallback)
var $statictext = array(); # Text array, read from php file on init
- var $debug; # Non-empty if debug mode is desired
- var $cookiename; # Name of the language cookie, default is "LANGUAGE"
var $unknown_labels = array(); # array for spooling unknown labels in debug mode
/**
* Constructor
- * @param $defaultlanguage Optional default language to use
- * @param $tablename Optional name of text database table (default: 'it_texts')
- * @param $debug Optional debug mode: display label of unknown texts, set to 'label' to always display labels instead of actual text
- * @param $db Optional database object, defaults to global $it_db
- * @param $cookiename Optional cookie name (default: 'LANGUAGE')
+ * @param $p['cookiename'] optional cookie name (default: 'LANGUAGE')
+ * @param $p['debug'] optional debug mode: display label of unknown texts, set to 'label' to always display labels instead of actual text
+ * @param $p['forcelanguage'] optional language to use instead of user's prefered language
+ * @param $p['phpfile'] optional texts file, defaults to service's phpinclude/texts.php
*/
-function it_text($defaultlanguage = 'de', $tablename = 'it_texts', $debug = false, $db = null, $cookiename = 'LANGUAGE')
+function it_text($p = null)
{
- $this->phpfile = isset($phpfile) ? $phpfile : ($GLOBALS['ULTRAHOME'] . '/phpinclude/texts.php');
- $this->debug = $debug;
- $this->cookiename = $cookiename;
+ $this->p = (array)$p + array('cookiename' => 'LANGUAGE', 'debug' => false, 'phpfile' => $GLOBALS['ULTRAHOME'] . '/phpinclude/texts.php');
# Read $this->statictext from php file if it's not defined yet
if (!$this->statictext)
- include($this->phpfile);
-
- # $$$ MIGRATION: Try to create texts.php from database if it doesn't exist
- if (!$this->statictext)
- {
- $db = is_object($db) ? $db : $GLOBALS['it_db'];
- $table = new it_db_table($db, $tablename);
- $record = new it_db_record($table, 'Label');
- for ($record->select(); $record->fetch_next();)
- {
- $data = $record->data;
- unset($data['Label']);
- $this->statictext[$record->data['Label']] = $data;
- }
- $this->dump_php();
- }
+ include($this->p['phpfile']);
# Get array of supported languages and their names
foreach(array_keys($this->statictext['_']) as $code)
@@ -65,6 +45,7 @@ function it_text($defaultlanguage = 'de', $tablename = 'it_texts', $debug = fals
if ($languagename = $this->statictext['_'][$code])
{
$this->languages_available[$code] = $languagename;
+
# Only use a language in browser/cookie detection below if it's not diasbled by a leading '-'
if (substr($languagename, 0, 1) != '-')
{
@@ -101,31 +82,25 @@ function it_text($defaultlanguage = 'de', $tablename = 'it_texts', $debug = fals
debug("No active languages found!", 5);
}
- # If no language matched, use the one that was supplied by our caller
- if (!isset($this->defaultlanguage))
- $this->defaultlanguage = $defaultlanguage;
-
- # If language is still invalid, use failsafe language
+ # If no language matched, use failsafe language
if (!$this->languages[$this->defaultlanguage])
- {
- debug("Bad language \"{$this->defaultlanguage}\", using first entry \"{$this->languages[$this->language_failsafe]}\"", 5);
$this->defaultlanguage = $this->language_failsafe;
- }
- # If a cookie is set, we use its value as our active language
- if (isset($_COOKIE[$this->cookiename]) && ($cookie = $_COOKIE[$this->cookiename]))
+ # If a cookie is set, use its value as our active language
+ if (isset($_COOKIE[$this->p['cookiename']]) && ($this->languages[$cookie = $_COOKIE[$this->p['cookiename']]]))
{
- if ($this->languages[$cookie]) # Is this language available?
- {
- $this->actlanguage = $cookie;
- debug("Got language from cookie: {$this->actlanguage}", 6);
- }
+ $this->actlanguage = $cookie;
+ debug("Got language from cookie: {$this->actlanguage}", 6);
}
# If the cookie supplied no valid language, we use our calculated default language
if (!isset($this->actlanguage))
$this->actlanguage = $this->defaultlanguage;
+ # If the user wants something else, comply
+ if (isset($this->p['forcelanguge']) && isset($this->languages[$this->p['forcelanguage']]))
+ $this->actlanguage = $this->p['forcelanguage'];
+
# And finally, record the name of our active language.
$this->actlanguagename = $this->languages[$this->actlanguage];
@@ -142,7 +117,7 @@ function it_text($defaultlanguage = 'de', $tablename = 'it_texts', $debug = fals
*/
function text($label, $raw = null, $language = null)
{
- if ($this->debug === 'label')
+ if ($this->p['debug'] === 'label')
return $label;
if (!isset($language))
@@ -152,7 +127,7 @@ function text($label, $raw = null, $language = null)
return $this->statictext[$label][$language];
$this->unknown_labels[] = $label;
- return $this->debug ? "<blink>$label ($language)</blink>" : $this->statictext[$label][$this->language_failsafe];
+ return $this->p['debug'] ? "<blink>$label ($language)</blink>" : $this->statictext[$label][$this->language_failsafe];
}
@@ -178,20 +153,20 @@ function etext($label, $values = null, $language = null)
*/
function set_language($language, $setcookie = true)
{
- /* If set to an invalid language (via forged GET?) we delete the cookie */
+ # If $language is unknown, delete the cookie
if ($this->languages_available[$language])
{
if (!$this->languages[$language])
debug('Selected an existing but currently disabled language!', 6);
$this->actlanguage = $language;
if ($setcookie)
- SetCookie($this->cookiename, $this->actlanguage, time() + 31536000, '/'); # 1 year
+ SetCookie($this->p['cookiename'], $this->actlanguage, time() + 31536000, '/'); # 1 year
}
else
{
$this->actlanguage = $this->defaultlanguage;
if ($setcookie)
- SetCookie($this->cookiename, '', time() + 31536000, '/');
+ SetCookie($this->p['cookiename'], '', time() + 31536000, '/');
}
}
@@ -345,9 +320,9 @@ function dump_php()
$this->statictext = array_merge(array('_' => $text['_']), $text);
$oldmask = umask(002);
- if ($f = fopen($this->phpfile, 'w'))
+ if ($f = fopen($this->p['phpfile'], 'w'))
{
- $result = (fputs($f, '<?php $this->statictext = ' . strtr(var_export($this->statictext, TRUE), array("=> \n array (" => "=> array(", "array (\n '_'" => "array(\n'_'", "\n ),\n " => "\n),\n", "\n ),\n" => "\n)\n")) . ";\n?>\n") !== false);
+ $result = (fputs($f, '<?php $this->statictext = ' . strtr(var_export($this->statictext, true), array("=> \n array (" => "=> array(", "array (\n '_'" => "array(\n'_'", "\n ),\n " => "\n),\n", "\n ),\n" => "\n)\n")) . ";\n?>\n") !== false);
fclose($f);
}