Index: trunk/kernel/include/language.php =================================================================== diff -u -N -r8097 -r8436 --- trunk/kernel/include/language.php (.../language.php) (revision 8097) +++ trunk/kernel/include/language.php (.../language.php) (revision 8436) @@ -12,7 +12,7 @@ if($id) $this->LoadFromDatabase($id); } - + function LoadFromDatabase($Id) { global $Errors; @@ -23,11 +23,11 @@ return false; } if($Id) - { + { $sql = sprintf("SELECT * FROM ".$this->tablename." WHERE ".$this->IdField()." = '%s'",$Id); $result = $this->adodbConnection->Execute($sql); if ($result === false) - { + { $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase"); return false; } @@ -95,7 +95,7 @@ $p = $this->GetItem($id); $p->Set(array("Phrase","LanguageId","Translation","PhraseType", 'Module', 'LastChanged', 'LastChangeIP'), array($Phrase,$LangId,$Translation,$Type, $Module, time(), $_SERVER['REMOTE_ADDR'] )); - $p->Dirty(); + $p->Dirty(); $p->Update(); return $p; } @@ -126,7 +126,7 @@ $sql='INSERT INTO '.GetTablePrefix().'Phrase SELECT Phrase, Translation, PhraseType, 0, LanguageId FROM '.$objSession->GetEditTable('Phrase').' WHERE PhraseId < 0'; $this->adodbConnection->Execute($sql); return; - + //$idlist = array(); $sql = "SELECT * FROM $edit_table"; //echo "performing mass create/update
"; @@ -136,11 +136,11 @@ while($rs && !$rs->EOF) { $data = $rs->fields; - $c = $this->AddItemFromArray($data); - $c->Dirty(); + $c = $this->AddItemFromArray($data); + $c->Dirty(); if($data["PhraseId"]>0) { - $c->Update(); + $c->Update(); } else { @@ -151,17 +151,17 @@ $rs->MoveNext(); } - + // Phrases deleted from temporary table are marked with LanguageId = 0, when saving we need to actually delete them all // The idea was taken from Images edit by Kostja $sql = "DELETE FROM ".$this->SourceTable." WHERE LanguageId = 0"; $this->adodbConnection->Execute($sql); - + if( $GLOBALS['debuglevel'] ) echo $sql."
\n"; $this->adodbConnection->Execute($sql); unset($GLOBALS['_CopyFromEditTable']); } - + function PurgeEditTable() { global $objSession; @@ -172,18 +172,18 @@ function GetPhrase($Phrase,$Lang, $no_db=FALSE) { - $found = FALSE; - + $found = FALSE; + foreach($this->Items as $i) - { + { if($i->Get("Phrase")==$Phrase && $i->Get("LanguageId")==$Lang) { $found = TRUE; break; } } if(!$found && !$no_db) - { + { $sql = "SELECT * FROM ".$this->SourceTable." WHERE Phrase='$Phrase' AND LanguageId='$Lang'"; //echo $sql."
\n"; $rs = $this->adodbConnection->Execute($sql); @@ -219,12 +219,12 @@ function LoadFromDatabase($Id) { global $Errors; - + if(!isset($Id)) { $Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromDatabase"); return false; - } + } $sql = sprintf("SELECT * FROM ".$this->tablename." WHERE ".$this->IdField()." = '%s'",$Id); $result = $this->adodbConnection->Execute($sql); if ($result === false) @@ -238,7 +238,7 @@ $this->SetFromArray($data); $this->Clean(); return true; - } + } function Delete() { @@ -251,14 +251,14 @@ function ParseObject($element) { global $m_var_list,$m_var_list_update, $var_list,$var_list_update, $TemplateRoot; - + //echo "
"; print_r($element); echo "
"; $extra_attribs = ExtraAttributes($element->attributes); if(strtolower($element->name)==$this->TagPrefix) - { - $field = strtolower($element->attributes["_field"]); + { + $field = strtolower($element->attributes["_field"]); switch($field) - { + { case "id": $ret = $this->Get("LanguageId"); break; @@ -271,7 +271,7 @@ case "link": $t = $element->attributes["_template"]; if(strlen($t)) - { + { $var_list_update["t"] = $t; } else @@ -290,7 +290,7 @@ case "icon": $ret = ""; $icon = $this->Get("IconURL"); - + if(strlen($icon)>0) { $file = $TemplateRoot."/".$icon; @@ -342,12 +342,12 @@ } function SetPrimary($lang_id) - { + { $sql = "UPDATE ".$this->SourceTable." SET PrimaryLang=0 "; $this->adodbConnection->Execute($sql); $l = $this->GetItem($lang_id); - $l->Set('PrimaryLang', 1); - $l->Set('Enabled', 1); + $l->Set('PrimaryLang', 1); + $l->Set('Enabled', 1); $l->Update(); $this->m_Primary = $lang_id; } @@ -356,20 +356,20 @@ { static $skip_quering = false; if ($skip_quering) return $this->m_Primary; - + if(!$this->m_Primary) { $sql = 'SELECT '.$Field.' FROM '.$this->SourceTable.' WHERE PrimaryLang = 1'; $this->m_Primary = $this->adodbConnection->GetOne($sql); $skip_quering = true; } - + return $this->m_Primary; } - + function LoadAllLanguages() { - $sql = "SELECT * FROM ".$this->SourceTable; + $sql = "SELECT * FROM ".$this->SourceTable; $this->Query_Item($sql); } @@ -408,7 +408,7 @@ $new_id=$db->GetOne($sql); $db->Execute('UPDATE '.$this->SourceTable.' SET PrimaryLang = 1, Enabled = 1 WHERE LanguageId = '.$new_id); } - $l->Delete(); + $l->Delete(); } function CopyFromEditTable() @@ -424,9 +424,9 @@ while($rs && !$rs->EOF) { $data = $rs->fields; - $c = $this->AddItemFromArray($data); + $c = $this->AddItemFromArray($data); $c->Dirty(); - + if($c->Get('PrimaryLang') == 1) { $c->Set('Enabled',1); @@ -446,18 +446,18 @@ $id = $c->Get("LanguageId"); $phrase_table = $objSession->GetEditTable("Phrase"); $message_table = $objSession->GetEditTable("EmailMessage"); - $sql = "UPDATE $phrase_table SET LanguageId=$id WHERE LanguageId=$oldid"; + $sql = "UPDATE $phrase_table SET LanguageId=$id WHERE LanguageId=$oldid"; $this->adodbConnection->Execute($sql); - $sql = "UPDATE $message_table SET LanguageId=$id WHERE LanguageId=$oldid"; - $this->adodbConnection->Execute($sql); + $sql = "UPDATE $message_table SET LanguageId=$id WHERE LanguageId=$oldid"; + $this->adodbConnection->Execute($sql); } $rs->MoveNext(); } unset($GLOBALS['_CopyFromEditTable']); } function ExportPhrases($file,$LangIds=NULL,$PhraseTypes=null) - { + { $output = array(); $this->Clear(); $where_parts = Array(); @@ -468,41 +468,41 @@ $objXML = new xml_doc(); $RootNode =& $objXML->getTagByID($objXML->createTag("LANGUAGES")); - + $ret = 0; if($this->NumItems()>0) - { + { $phrase_where = isset($PhraseTypes) ? ' AND PhraseType IN ('.$PhraseTypes.')' : ''; $event_where = isset($PhraseTypes) ? ' AND Type+1 IN ('.$PhraseTypes.')' : ''; foreach($this->Items as $l) - { + { $LangRoot =& $objXML->getTagByID($RootNode->addChild($objXML,"LANGUAGE",array("PackName"=>$l->Get("PackName")),"")); $LangRoot->addChild($objXML,"DATEFORMAT",array(),$l->Get("DateFormat")); $LangRoot->addChild($objXML,"TIMEFORMAT",array(),$l->Get("TimeFormat")); $LangRoot->addChild($objXML,"DECIMAL",array(),$l->Get("DecimalPoint")); $LangRoot->addChild($objXML,"THOUSANDS",array(),$l->Get("ThousandSep")); $LangRoot->addChild($objXML,"CHARSET",array(),$l->Get("Charset")); $PhraseRoot =& $objXML->getTagByID($LangRoot->addChild($objXML,"PHRASES")); - + $sql = "SELECT * FROM ".GetTablePrefix()."Phrase WHERE LanguageId=".$l->Get("LanguageId").$phrase_where; $rs=$this->adodbConnection->Execute($sql); while($rs && ! $rs->EOF) { $PhraseRoot->addChild($objXML,"PHRASE",array("Label"=>$rs->fields["Phrase"],"Type"=>$rs->fields["PhraseType"]),base64_encode($rs->fields["Translation"])); $rs->MoveNext(); } - + $EventRoot =& $objXML->getTagByID($LangRoot->addChild($objXML,"EVENTS")); $ev = GetTablePrefix()."Events"; $em = GetTablePrefix()."EmailMessage"; $sql = "SELECT $em.*,$ev.Event,$ev.Type FROM $em INNER JOIN $ev ON ($em.EventId=$ev.EventId) WHERE LanguageId=".$l->Get("LanguageId").$event_where; - $rs = $this->adodbConnection->Execute($sql); + $rs = $this->adodbConnection->Execute($sql); while($rs && !$rs->EOF) - { - $EventRoot->AddChild($objXML,"EVENT",array("MessageType"=>$rs->fields["MessageType"],"Event"=>$rs->fields["Event"],"Type"=>$rs->fields["Type"]),base64_encode($rs->fields["Template"])); + { + $EventRoot->AddChild($objXML,"EVENT",array("MessageType"=>$rs->fields["MessageType"],"Event"=>$rs->fields["Event"],"Type"=>$rs->fields["Type"]),base64_encode($rs->fields["Template"])); $rs->MoveNext(); - } + } } $objXML->generate(); $objXML->xml = str_replace("&","&",$objXML->xml); @@ -514,12 +514,12 @@ } function ReadImportTable($TableName, $SetEnabled=0, $Types="0,1", $OverwitePhrases=FALSE, $MaxInserts=100, $Offset=0) - { + { global $objPhraseList; - + if(!is_object($objPhraseList)) $objPhraseList = new clsPhraseList(); - + $PhraseList = new clsPhraseList(); $TypeArray = explode(",",$Types); $Inserts = 0; @@ -536,7 +536,7 @@ if(is_object($p)) { if($OverwitePhrases) - { + { //$p->debuglevel=1; $p->Set("Translation",$i->Get("Translation")); //echo $i->Get("Translation")."
"; @@ -547,15 +547,15 @@ } else { //$i->debuglevel=1; - $i->Create(); + $i->Create(); } $Inserts++; } } $Offset = $Offset + $Inserts; return $Offset; } - + function PurgeEditTable() { global $objSession; @@ -565,209 +565,4 @@ } } -class clsLanguageCache -{ - var $m_CachedLanguage; - var $FullLoad = FALSE; - var $cache; - var $adodbConnection; - var $TemplateName; - var $TemplateCache; - var $TemplateDate; - var $ThemeId; - - function clsLanguageCache($LangId=NULL) - { - global $objConfig; - - $this->m_CachedLanguage = $LangId; - $this->adodbConnection =&GetADODBConnection(); - $this->Clear(); - } - - function Clear() - { - unset($this->cache); - $this->cache = array(); - $this->TemplateCache = array(); - } - - function LoadLanguage($LangId,$Type) - { - $this->Clear(); - $this->m_CachedLanguage = $LangId; - $this->FullLoad = TRUE; - $sql = "SELECT Phrase,Translation FROM ".GetTablePrefix()."Phrase WHERE LanguageId=$LangId AND PhraseType=$Type"; - $rs = $this->adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $this->cache[$rs->fields["Phrase"]] = $rs->fields["Translation"]; - if(ADODB_EXTENSION>0) - { - adodb_movenext($rs); - } - else - $rs->MoveNext(); - } - - return (count($this->cache)>0); - } - - function GetPhrase($Phrase,$Lang) - { - $t = ""; - $sql = "SELECT PhraseId,Phrase,Translation FROM ".GetTablePrefix()."Phrase WHERE Phrase='$Phrase' AND LanguageId='$Lang'"; - - $rs = $this->adodbConnection->Execute($sql); - if($rs && !$rs->EOF) - { - $t = $rs->fields["Translation"]; - $this->TemplateCache[] = $rs->fields["PhraseId"]; - } - - return $t; - } - - function LoadTemplateCache($t, $timeout, $ThemeId) - { - - $this->TemplateName = $t; - $this->TemplateDate = 0; - $this->ThemeId = $ThemeId; - if($timeout > 0) - { - $sql = "SELECT * FROM ".GetTablePrefix()."PhraseCache WHERE Template='$t' AND ThemeId=$ThemeId"; - $rs = $this->adodbConnection->Execute($sql); - if($rs && !$rs->EOF) - { - $this->TemplateCache = explode(',', $rs->fields['PhraseList']); - $t_length = strlen($rs->fields['PhraseList']) ? 1 : 0; - - $this->TemplateDate = $rs->fields["CacheDate"]; - if(adodb_date("U") < $this->TemplateDate + $timeout || !$t_length) - { - $this->TemplateCache = Array(); - $this->TemplateDate=0; - } - } - else - $this->TemplateDate = -1; - } - else - $this->TemplateDate=-2; - } - - function LoadCachedVars($LangId) - { - if(count($this->TemplateCache)) - { - $values = implode(",",$this->TemplateCache); - $this->FullLoad = FALSE; - $this->m_CachedLanguage = $LangId; - $sql = "SELECT Phrase,Translation FROM ".GetTablePrefix()."Phrase WHERE LanguageId=$LangId AND PhraseId IN ($values)"; - $rs = $this->adodbConnection->Execute($sql); - while($rs && !$rs->EOF) - { - $this->cache[$rs->fields["Phrase"]] = $rs->fields["Translation"]; - if( defined('ADODB_EXTENSION') && constant('ADODB_EXTENSION') > 0 ) - adodb_movenext($rs); - else - $rs->MoveNext(); - } - } - } - - function SaveTemplateCache() - { - if($this->TemplateDate==0 || $this->TemplateDate==-1) - { - $value = implode(",",$this->TemplateCache); - if($this->TemplateDate==0) - { - $sql = "UPDATE ".GetTablePrefix()."PhraseCache SET PhraseList='$value',CacheDate=".adodb_date("U"); - $sql .=" WHERE Template='".$this->TemplateName."' AND ThemeId=".$this->ThemeId; - } - else - { - $sql = "REPLACE INTO ".GetTablePrefix()."PhraseCache (Template,PhraseList,CacheDate,ThemeId) VALUES ('"; - $sql .= $this->TemplateName."','$value',".adodb_date("U").",".$this->ThemeId.")"; - } - $this->adodbConnection->Execute($sql); - } - } - - //This function returns a translation for a particular phrase - //if translation is not found then !phrase! is returned. - function GetTranslation($phrase,$language) - { - global $objSession, $LogPhraseLookups,$LangList, $MissingList; - - $missing = FALSE; - if(!$this->FullLoad) - { - $this->RefreshCacheStatus($language); - if(!isset($this->cache[$phrase])) - { - $this->cache[$phrase] = $this->GetPhrase($phrase,$language); - $translation = $this->cache[$phrase]; - //$translation = ""; - } - else - $translation = $this->cache[$phrase]; - } - else - { - $translation = $this->cache[$phrase]; - } - if(!strlen($translation)) - { - $missing = TRUE; - - if($language != 1) - { - $translation=$this->GetTranslation($phrase,1); - } - else - { - $translation = "!".$phrase."!"; - } - } - - if($LogPhraseLookups==TRUE) - { - //if(!is_array($LangList)) - // $LangList = array(); - //$LangList[$phrase] = $LangList; - if($missing) - { - if(!is_array($MissingList)) - { - $MissingList = array(); - } - if(!in_array($phrase,$MissingList)) - $MissingList[] = $phrase; - } - } - - return $translation; - } - - //This function checks if cache is current for current language - //if not clear it out - function RefreshCacheStatus($language) - { - //First remember what language we are caching -// if(!isset($this->m_CachedLanguage)) -// $this->m_CachedLanguage = $language; - - - //If this is the different language, then clear the cache -// if($this->m_CachedLanguage != $language) -// { -// $this->Clear(); -// $this->m_CachedLanguage = $language; -// } - } - -} ?>