Index: trunk/kernel/include/language.php
===================================================================
--- trunk/kernel/include/language.php	(revision 1343)
+++ trunk/kernel/include/language.php	(revision 1344)
@@ -1,775 +1,775 @@
 <?php
 
 class clsPhrase extends clsItemDB
 {
 
     function clsPhrase($id=NULL)
     {
         $this->clsItemDB();
         $this->tablename = GetTablePrefix()."Phrase";
         $this->id_field = "PhraseId";
         $this->NoResourceId=1;
         if($id)
             $this->LoadFromDatabase($id);
     }
     
     function LoadFromDatabase($Id)
     {
         global $Errors;
 
         if(!isset($Id))
         {
             $Errors->AddError("error.AppError",NULL,'Internal error: LoadFromDatabase id',"",get_class($this),"LoadFromDatabase");
             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;
           }
 
           $data = $result->fields;
 
           $this->SetFromArray($data);
           $this->Clean();
           return true;
         }
         else
             return FALSE;
     }
 
     function AdminIcon()
     {
         global $imagesURL;
 
         return $imagesURL."/itemicons/icon16_language_var.gif";
     }
 
 }
 
 class clsPhraseList extends clsItemCollection
 {
     var $Page;
     var $PerPageVar;
 
     function clsPhraseList()
     {
         $this->clsItemCollection();
         $this->SourceTable = GetTablePrefix()."Phrase";
         $this->classname = "clsPhrase";
         $this->PerPageVar = "Perpage_Phrase";
         $this->AdminSearchFields = array("p.Phrase","p.Translation");
 
     }
 
     function &AddPhrase($Phrase,$LangId,$Translation,$Type)
     {
     	$tmpphrase = $this->GetPhrase($Phrase, $LangId);
     	if (!$tmpphrase) {
     		$p = new clsPhrase();
         	$p->tablename = $this->SourceTable;
         	$p->Set(array("Phrase","LanguageId","Translation","PhraseType"),
                 	array($Phrase,$LangId,$Translation,$Type));
         	$p->Dirty();
         	$p->Create();
         	return $p;
     	}
     	else {
     		//echo 'phrase already exists with label <b>'.$Phrase.'</b><br>';
     		$add_error = "Error";
     		return $add_error;
 /*    		$tmpphrase->Set(array("Phrase","LanguageId","Translation","PhraseType"),
                 array($Phrase,$LangId,$Translation,$Type));
             $tmpphrase->Dirty();
             $tmpphrase->Update();
             return $tmpphrase;*/
     	}
     }
 
     function &EditPhrase($id,$Phrase,$LangId,$Translation,$Type)
     {
         $p = $this->GetItem($id);
         $p->Set(array("Phrase","LanguageId","Translation","PhraseType"),
                 array($Phrase,$LangId,$Translation,$Type));
         $p->Dirty();        
         $p->Update();
         return $p;
     }
 
     function DeletePhrase($id)
     {
         $p = $this->GetItem($id);
         $p->Delete();
     }
 
     function DeleteLanguage($LangId)
     {
         $sql = "DELETE FROM ".$this->SourceTable." WHERE LanguageId=$LangId";
         if( $GLOBALS['debuglevel'] ) echo $sql."<br>\n";
 
         $this->adodbConnection->Execute($sql);
     }
 
     function CopyFromEditTable()
     {
         global $objSession;
 		$GLOBALS['_CopyFromEditTable']=1;
 
         $edit_table = $objSession->GetEditTable($this->SourceTable);
 
 		$sql='REPLACE '.GetTablePrefix().'Phrase SELECT * FROM '.$objSession->GetEditTable('Phrase').' WHERE PhraseId > 0';
         $this->adodbConnection->Execute($sql);
 		$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<br>";
 		flush();
         $this->Clear();
         $rs = $this->adodbConnection->Execute($sql);
         while($rs && !$rs->EOF)
         {
             $data = $rs->fields;
             $c = $this->AddItemFromArray($data);     
 						$c->Dirty();                   
             if($data["PhraseId"]>0)
             {
                 $c->Update();                
             }
             else
             {
             	$c->debuglevel=0;
                 $c->UnsetIdField();
                 $c->Create();
             }
 
             $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."<br>\n";
         $this->adodbConnection->Execute($sql);
 		unset($GLOBALS['_CopyFromEditTable']);
     }
     
     function PurgeEditTable()
     {
       global $objSession;
 
       $edit_table = $objSession->GetEditTable($this->SourceTable);
       $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
     }
 
     function GetPhrase($Phrase,$Lang, $no_db=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."<br>\n";
           $rs = $this->adodbConnection->Execute($sql);
           if($rs && !$rs->EOF)
           {
               $data = $rs->fields;
               $i = $this->AddItemFromArray($data);
           }
           else
               $i = FALSE;
         }
         return $i;
     }
 }
 
 RegisterPrefix("clsLanguage","lang","kernel/include/language.php");
 
 class clsLanguage extends clsParsedItem
 {
     function clsLanguage($id=NULL)
     {
         $this->clsParsedItem();
         $this->tablename = GetTablePrefix()."Language";
         $this->id_field = "LanguageId";
         $this->NoResourceId=1;
         $this->TagPrefix="lang";
 
         if($id)
             $this->LoadFromDatabase($id);
 
     }
 
     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)
         {
             $Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"",get_class($this),"LoadFromDatabase");
             return false;
         }
 
         $data = $result->fields;
 
         $this->SetFromArray($data);
         $this->Clean();
         return true;
     }    
 
     function Delete()
     {
         $p = new clsPhraseList();
         //$id = $this->Get("LanguageId");
         //$p->DeleteLanguage($id);
         parent::Delete();
     }
 
     function ParseObject($element)
     {
         global $m_var_list,$m_var_list_update, $var_list,$var_list_update, $TemplateRoot;
         
         //echo "<PRE>"; print_r($element); echo "</PRE>";
         $extra_attribs = ExtraAttributes($element->attributes);
         if(strtolower($element->name)==$this->TagPrefix)
         {          
             $field = strtolower($element->attributes["_field"]); 
             switch($field)
             {     
             case "id":
                 $ret = $this->Get("LanguageId");
             break;
             case "packname":
                 $ret = $this->Get("PackName");
             break;
             case "localname":
                 $ret = $this->Get("LocalName");
             break;
             case "link":
                 $t = $element->attributes["_template"];
                 if(strlen($t))
                 {                
                   $var_list_update["t"] = $t;
                 }
                 else
                   $var_list_update["t"] = $var_list["t"];
                 $m_var_list_update["lang"] = $this->Get("LanguageId");
                 $ret = GetIndexURL(2)."?env=".BuildEnv();
                 unset($var_list_update["t"],$m_var_list_update["lang"]);
             break;
             case "primary":
                 $ret = "";
                 if($this->Get("PrimaryLang")==1)
                     $ret = "1";
             break;
             case "icon":
                 $ret = "";
-                $icon = $this->Get("IconUrl");
+                $icon = $this->Get("IconURL");
                                 
                 if(strlen($icon)>0)
                 {
                     $file =  $TemplateRoot."/".$icon;
                     //echo "File:$file <br>\n";
                     if(file_exists($file))
                         $ret = $icon;
                 }
                 if(!strlen($ret))
                     $ret = $element->attributes["_default"];
                 //echo $ret;
             break;
             }//switch
         }//if
         return $ret;
     }
 
     function AdminIcon()
     {
             global $imagesURL;
 
             $file = $imagesURL."/itemicons/icon16_language";
             if($this->Get("PrimaryLang")==1)
             {
                 $file .= "_primary.gif";
             }
             else
             {
                 if($this->Get("Enabled")==0)
                 {
                     $file .= "_disabled";
                 }
                 $file .= ".gif";
             }
             return $file;
 
     }
 }
 
 class clsLanguageList extends clsItemCollection
 {
     var $m_Primary;
 
     function clsLanguageList()
     {
         $this->clsItemCollection();
         $this->SourceTable = GetTablePrefix()."Language";
         $this->classname = "clsLanguage";
         $this->AdminSearchFields = array("PackName","LocalName");
     }
 
     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->Update();
         $this->m_Primary =$lang_id;
     }
 
     function GetPrimary($Field="LanguageId")
     {
         if(!$this->m_Primary)
         {        
           $sql = "SELECT * FROM ".$this->SourceTable." WHERE PrimaryLang=1";       
           $rs = $this->adodbConnection->Execute($sql);
           if($rs && !$rs->EOF)
           {
             $l = $rs->fields[$Field];
           }
           else
              $l = 0;
           $this->m_Primary=$l;
         }
         else
             $l = $this->m_Primary;        
         return $l;
     }
     
     function LoadAllLanguages()
     {
 		$sql = "SELECT * FROM ".$this->SourceTable;       
         $this->Query_Item($sql);
     }
 
     function &AddLanguage($PackName,$LocalName,$Enabled,$Primary, $IconUrl="",$Datefmt,$TimeFmt,$Dec,$Thousand,$Charset)
     {
         $l = new clsLanguage();
         $l->tablename = $this->SourceTable;
-        $l->Set(array("PackName","LocalName","Enabled","PrimaryLang","IconUrl","DateFormat","TimeFormat",
+        $l->Set(array("PackName","LocalName","Enabled","PrimaryLang","IconURL","DateFormat","TimeFormat",
         			  "DecimalPoint","ThousandSep",'Charset'),
                 array($PackName,$LocalName,$Enabled,$Primary,$IconUrl,$Datefmt,$TimeFmt,$Dec,$Thousand,$Charset));
         $l->Dirty();
         $l->Create();
         return $l;
     }
 
     function EditLanguage($id,$PackName,$LocalName,$Enabled,$Primary, $IconUrl="",$Datefmt,$TimeFmt,$Dec,$Thousand,$Charset)
     {
         $l = $this->GetItem($id);
-        $l->Set(array("PackName","LocalName","Enabled","PrimaryLang","IconUrl","DateFormat","TimeFormat",
+        $l->Set(array("PackName","LocalName","Enabled","PrimaryLang","IconURL","DateFormat","TimeFormat",
         			  "DecimalPoint","ThousandSep",'Charset'),
                 array($PackName,$LocalName,$Enabled,$Primary,$IconUrl,$Datefmt,$TimeFmt,$Dec,$Thousand,$Charset));
         $l->Update();
         return $l;
     }
 
     function DeleteLanguage($id)
     {
         $l = $this->GetItem($id);
         if($l->Get('PrimaryLang')==1)
         {
         	// in case if primary language is deleted,
         	// set 1st available (min ID) from languages
         	// table.
         	$db =& GetADODBConnection();
         	$sql = 'SELECT MIN(LanguageId) FROM '.$this->SourceTable.' WHERE LanguageId <> '.$l->UniqueId();
         	$new_id=$db->GetOne($sql);
         	$db->Execute('UPDATE '.$this->SourceTable.' SET PrimaryLang = 1, Enabled = 1 WHERE LanguageId = '.$new_id);
         }
         $l->Delete();          
     }
 
     function CopyFromEditTable()
     {
         global $objSession;
 		$GLOBALS['_CopyFromEditTable']=1;
 
         $edit_table = $objSession->GetEditTable($this->SourceTable);
         $idlist = array();
         $sql = "SELECT * FROM $edit_table";
         $this->Clear();
         $rs = $this->adodbConnection->Execute($sql);
         while($rs && !$rs->EOF)
         {
             $data = $rs->fields;
             $c = $this->AddItemFromArray($data);            
             $c->Dirty();
             
             if($c->Get('PrimaryLang') == 1)
             {
             	$c->Set('Enabled',1);
             	$sql = 'UPDATE '.$this->SourceTable.' SET PrimaryLang = 0';
             	$this->adodbConnection->Execute($sql);
             }
 
             if($data["LanguageId"]>0)
             {
                 $c->Update();
             }
             else
             {
                 $oldid = $c->Get("LanguageId");
                 $c->UnsetIdField();
                 $c->Create();
                 $id = $c->Get("LanguageId");
                 $phrase_table = $objSession->GetEditTable("Phrase");
                 $message_table = $objSession->GetEditTable("EmailMessage");
                 $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);                
             }
             $rs->MoveNext();
         }
 		unset($GLOBALS['_CopyFromEditTable']);
     }
 
     function ExportPhrases($file,$LangIds=NULL,$PhraseTypes=null)
     {        
         $output = array();
         $this->Clear();
         $where_parts = Array();
         if( isset($LangIds) ) $where_parts[] = 'LanguageId IN ('.$LangIds.')';
         $where =  count($where_parts) ? ' WHERE '.implode(' AND ', $where_parts) : '';
         $this->Query_Item($sql = 'SELECT * FROM '.$this->SourceTable.$where);
 
 		$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);  
 				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"]));  	
   					$rs->MoveNext();
 				}                
             }
             $objXML->generate();
 			$objXML->xml = str_replace("&","&amp;",$objXML->xml);
 			$fp = @fopen($file,"w");
 			@fputs($fp,$objXML->xml);
 			@fclose($fp);
         }
         return file_exists($file);
     }
 
     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;
         $sql = "SELECT * FROM $TableName WHERE PhraseType IN ($Types) LIMIT $Offset,$MaxInserts";
         //echo $sql;
         //$PhraseList->EnablePaging = false;
         $PhraseList->Query_Item($sql);
         if($PhraseList->NumItems()>0)
         {
         	foreach($PhraseList->Items as $i)
         	{
         		$p = $objPhraseList->GetPhrase($i->Get("Phrase"),$i->Get("LanguageId"));
         		//echo "<pre>"; print_r($p); echo "</pre>";
         		if(is_object($p))
         		{
         			if($OverwitePhrases)
         			{          			   
         			   //$p->debuglevel=1;
         			   $p->Set("Translation",$i->Get("Translation"));
         			   //echo $i->Get("Translation")."<br>";
         			   $p->Set("PhraseType",$i->Get("PhraseType"));
         			   $p->Dirty();
         			   $p->Update();
         			}
         		}
         		else {
         			//$i->debuglevel=1;
         		  $i->Create();        		  
         		}
         		$Inserts++;
         	}
         }
         $Offset = $Offset + $Inserts;
         return $Offset;
     }
     
     function PurgeEditTable()
     {
       global $objSession;
 
       $edit_table = $objSession->GetEditTable($this->SourceTable);
       $this->adodbConnection->Execute("DROP TABLE IF EXISTS $edit_table");
     }
 }
 
 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(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=".date("U");
               $sql .=" WHERE Template='".$this->TemplateName."' AND ThemeId=".$this->ThemeId;
             }
             else
             {
                 $sql = "INSERT IGNORE INTO ".GetTablePrefix()."PhraseCache (Template,PhraseList,CacheDate,ThemeId) VALUES ('";
                 $sql .= $this->TemplateName."','$value',".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;
 //        }
     }
 
 }
 ?>

Property changes on: trunk/kernel/include/language.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.18
\ No newline at end of property
+1.19
\ No newline at end of property
Index: trunk/admin/config/addlang.php
===================================================================
--- trunk/admin/config/addlang.php	(revision 1343)
+++ trunk/admin/config/addlang.php	(revision 1344)
@@ -1,340 +1,340 @@
 <?php
 
 ##############################################################
 ##In-portal													##
 ##############################################################
 ##					      In-portal							##
 ##					Intechnic Corporation					##
 ##			   All Rights Reserved, 1998-2002				##
 ##															##	
 ##	No portion of this code may be copied, reproduced or	##	
 ##	   otherwise redistributed without proper written		##
 ##	  consent of Intechnic Corporation.  Violation will		##
 ##	   result in revocation of the license and support		##
 ##	 privileges along maximum prosecution allowed by law.	##
 ##############################################################
 
 if(!strlen($pathtoroot))
 {
 	$path=dirname(realpath(__FILE__));
 	if(strlen($path))
 	{
 		/* determine the OS type for path parsing */
 		$pos = strpos($path,":");
 		if ($pos === false)
 		{
 			$gOS_TYPE="unix";
 			$pathchar = "/";
 		}
 		else
 		{
 			$gOS_TYPE="win";
 			$pathchar="\\";
 		}
 		$p = $path.$pathchar;
 		/*Start looking for the root flag file */
 		while(!strlen($pathtoroot) && strlen($p))
 		{
 			$sub = substr($p,strlen($pathchar)*-1);
 			if($sub==$pathchar)
 			{
 				$filename = $p."root.flg";
 			}
 			else
 			$filename = $p.$pathchar."root.flg";
 			if(file_exists($filename))
 			{
 				$pathtoroot = $p;
 			}
 			else
 			{
 				$parent = realpath($p.$pathchar."..".$pathchar);
 				if($parent!=$p)
 				{
 					$p = $parent;
 				}
 				else
 				$p = "";
 			}
 		}
 		if(!strlen($pathtoroot))
 		$pathtoroot = ".".$pathchar;
 	}
 	else
 	{
 		$pathtoroot = ".".$pathchar;
 	}
 }
 
 $sub = substr($pathtoroot,strlen($pathchar)*-1);
 if($sub!=$pathchar)
 {
 	$pathtoroot = $pathtoroot.$pathchar;
 }
 //echo $pathtoroot;
 //print_r($_GET);
 //print_r($_POST);
 require_once($pathtoroot."kernel/startup.php");
 //admin only util
 
 /* set the destination of the image upload, relative to the root path */
 $DestDir = "kernel/images/";
 
 $rootURL="http://".ThisDomain().$objConfig->Get("Site_Path");
 
 $admin = $objConfig->Get("AdminDirectory");
 if(!strlen($admin))
     $admin = "admin";
 
 $localURL=$rootURL."kernel/";
 $adminURL = $rootURL.$admin;
 $imagesURL = $adminURL."/images"; 
 $browseURL = $adminURL."/browse";
 
 $pathtolocal = $pathtoroot."kernel/";
 require_once ($pathtoroot.$admin."/include/elements.php");
 require_once ($pathtoroot."kernel/admin/include/navmenu.php");
 require_once ($pathtolocal."admin/include/navmenu.php");
 require_once($pathtoroot.$admin."/browse/toolbar.php");
 require_once($pathtoroot.$admin."/listview/listview.php");
 
 $m = GetModuleArray();
 foreach($m as $key=>$value)
 {
 	$path = $pathtoroot. $value."admin/include/parser.php";
 	if(file_exists($path))
 	{
 		include_once($path);
 	}
 }
 
 $objMessages = new clsEmailMessageList();
 
 unset($objEditItems);
 
 $objEditItems = new clsLanguageList();
 $objEditItems->SourceTable = $objSession->GetEditTable("Language");
 $objEditItems->EnablePaging = FALSE;
 $objPhraseList = new clsPhraseList();
 $objPhraseList->EnablePaging = FALSE;
 if( GetVar('new') )
 {
 	$c = new clsLanguage(NULL);
 	$c->Set("DecimalPoint",".");
 	$c->Set("ThousandSep",",");
 	$c->Set("DateFormat","m-d-Y");
 	$c->Set("TimeFormat","g:i:s a");	
     $en = 0;
     $action = "m_lang_add";
     $name = prompt_language("la_Text_New");
     $objLanguages->CreateEmptyEditTable("LanguageId");
     $objPhraseList->CreateEmptyEditTable("PhraseId");
     $objMessages->CreateEmptyEditTable($_POST["itemlist"]);
 }
 else
 {   
     $en = (int)$_GET["en"];
 
     if (isset($_POST["itemlist"]))
     {         
         $objLanguages->CopyToEditTable("LanguageId",$_POST["itemlist"]);                
         $objPhraseList->CopyToEditTable("LanguageId",$_POST["itemlist"]);
         $objMessages->CopyToEditTable("LanguageId",$_POST["itemlist"]);
     }   
     $objEditItems->Query_Item("SELECT * FROM ".$objEditItems->SourceTable);
     $itemcount=$objEditItems->NumItems();
 
     $c = $objEditItems->GetItemByIndex($en);
 
     if($itemcount>1)
     {    
 	  if ($en+1 == $itemcount)
 		$en_next = -1;
 	  else
 		$en_next = $en+1;
 	
 	  if ($en == 0)
 		$en_prev = -1;
 	  else
 		$en_prev = $en-1;	
     }
     $action = "m_lang_edit";
     $name = $c->Get("LocalName");
 }
 
 $section = "in-portal:lang_general";
 
 $envar = "env=".BuildEnv();
 
 $title = $title = GetTitle("la_Text_Pack", "la_tab_General", $c->Get('LanguageId'), $c->Get('LocalName'));///prompt_language("la_Text_Configuration")." - ".$name."' ".prompt_language("la_Text_Pack")." - ".prompt_language("la_tab_General");
 
 //Display header
 $sec = $objSections->GetSection($section);
 $objListToolbar = new clsToolBar();
 $objListToolbar->Add("img_save", "la_Save","#","swap('img_save','toolbar/tool_select_f2.gif');", "swap('img_save', 'toolbar/tool_select.gif');","edit_submit('language','LangEditStatus','".$admin."/config/config_lang.php',1);",$imagesURL."/toolbar/tool_select.gif");
 $objListToolbar->Add("img_cancel", "la_Cancel","#","swap('img_cancel','toolbar/tool_cancel_f2.gif');", "swap('img_cancel', 'toolbar/tool_cancel.gif');","edit_submit('language','LangEditStatus','".$admin."/config/config_lang.php',2);",$imagesURL."/toolbar/tool_cancel.gif");
 
 if ( isset($en_prev) || isset($en_next) )
 {
   $url = $admin."/config/addlang.php"; 
   $objListToolbar->Add("divider");
   $form = "language";
   if($en_prev>-1)
   {
     $MouseOver="swap('moveleft','toolbar/tool_prev_f2.gif');";
     $MouseOut="swap('moveleft', 'toolbar/tool_prev.gif');";
     $onClick= $sec->Get("onclick");
 	$var="env=".BuildEnv()."&en=$en_prev";
     $link = "javascript:edit_submit('$form','$url',0,'$var');";
     $objListToolbar->Add("moveleft",admin_language("la_ToolTip_Previous")." ".admin_language("la_Text_Category"),$link,$MouseOver,$MouseOut,"","toolbar/tool_prev.gif");
   }
   else
   {
     $MouseOver="";
     $MouseOut="";
     $onClick="";
     $link="#";
     $objListToolbar->Add("moveleft",admin_language("la_ToolTip_Previous")." ".admin_language("la_Text_Category"),"#","","","","toolbar/tool_prev_f3.gif");
 
   }  
   if($en_next>-1)
   {
     $MouseOver="swap('moveright','toolbar/tool_next_f2.gif');";
     $MouseOut="swap('moveright', 'toolbar/tool_next.gif');";
     $onClick=$sec->Get("onclick");
     $var="env=".BuildEnv()."&en=$en_next";
     $link = "javascript:edit_submit('$form','$url',0,'$var');";    
     $objListToolbar->Add("moveright",admin_language("la_ToolTip_Next")." ".admin_language("la_Text_Category"),$link,$MouseOver,$MouseOut,"","toolbar/tool_next.gif");
   }
   else
   {
     $objListToolbar->Add("moveright",admin_language("la_ToolTip_Next")." ".admin_language("la_Text_Category"),$link,$MouseOver,$MouseOut,"","toolbar/tool_next_f3.gif");
   }
 }
 
 	define('FORCE_CHARSET', $c->Get("Charset") );
   int_header($objListToolbar,NULL,$title);
 if ($objSession->GetVariable("HasChanges") == 1) {
 ?>
 <table width="100%" border="0" cellspacing="0" cellpadding="0" class="toolbar">
   <tr>
     <td valign="top">
       <?php int_hint_red(admin_language("la_Warning_Save_Item")); ?>
     </td>
   </tr>
 </table>
 <?php } ?> 
 <FORM enctype="multipart/form-data" ID="language" NAME="language" method="POST" ACTION="">
 <TABLE cellSpacing="0" cellPadding="2" width="100%" class="tableborder">
 <?php int_subsection_title(prompt_language("la_tab_General")); ?>
 <?php $c->Data=inp_htmlize($c->Data);?>
 <TR <?php int_table_color(); ?> >
   <TD class="text"><?php echo prompt_language("la_prompt_LanguageId"); ?></TD>
   <TD><?php echo $c->Get("LanguageId"); ?></TD>
   <TD></TD>
 </TR>
 
 <TR <?php int_table_color(); ?> >
   <TD><SPAN id="prompt_packname" class="text"><?php echo prompt_language("la_prompt_PackName"); ?></SPAN></TD>
   <TD><input type=text ValidationType="exists" tabindex="1" NAME="packname" VALUE="<?php echo $c->Get("PackName"); ?>"></TD>
   <TD></TD>
 </TR>
 
 <TR <?php int_table_color(); ?> >
   <TD><SPAN id="prompt_localname"><?php echo prompt_language("la_prompt_LocalName"); ?></SPAN></TD>
   <TD><input type=text ValidationType="exists" tabindex="2" NAME="localname" VALUE="<?php echo $c->Get("LocalName"); ?>"></TD>
   <TD></TD>
 </TR>
 <!-- charset: begin -->
 <TR <?php int_table_color(); ?> >
   <TD><SPAN id="prompt_theme_charset"><?php echo prompt_language("la_prompt_charset"); ?></SPAN></TD>
   <TD><input type=text NAME="charset" tabindex="3" VALUE="<?php echo $c->Get("Charset"); ?>"></TD>
   <TD></TD>
 </TR>
 <!-- charset: end -->
 <TR <?php int_table_color(); ?> >
   <TD><SPAN id="prompt_theme_icon"><?php echo prompt_language("la_prompt_icon_url"); ?></SPAN></TD>
-  <TD><input type=text NAME="icon" tabindex="3" VALUE="<?php echo $c->Get("IconUrl"); ?>"></TD>
+  <TD><input type=text NAME="icon" tabindex="3" VALUE="<?php echo $c->Get("IconURL"); ?>"></TD>
   <TD></TD>
 </TR>
 
 <TR <?php int_table_color(); ?> >
   <TD><SPAN id="prompt_dateformat"><?php echo prompt_language("la_prompt_lang_dateformat"); ?></SPAN></TD>
   <TD><input type=text NAME="date_format" tabindex="4" VALUE="<?php echo $c->Get("DateFormat"); ?>">
   <?php if(strlen($c->Get("DateFormat"))) echo prompt_language("la_Text_example").":".date($c->Get("DateFormat")); ?>
   </TD>
   <TD></TD>
 </TR>
 
 <TR <?php int_table_color(); ?> >
   <TD><SPAN id="prompt_timeformat"><?php echo prompt_language("la_prompt_lang_timeformat"); ?></SPAN></TD>
   <TD><input type=text NAME="time_format" tabindex="5" VALUE="<?php echo $c->Get("TimeFormat"); ?>">
   <?php if(strlen($c->Get("TimeFormat"))) echo prompt_language("la_Text_example").":".date($c->Get("TimeFormat")); ?>
   </TD>
   <TD></TD>
 </TR>
 
 <TR <?php int_table_color(); ?> >
   <TD><SPAN id="prompt_lang_decimal"><?php echo prompt_language("la_prompt_decimal"); ?></SPAN></TD>
   <TD><input type=text ValidationType="exists" tabindex="6" NAME="decimal" VALUE="<?php echo $c->Get("DecimalPoint"); ?>"></TD>
   <TD></TD>
 </TR>
 
 <TR <?php int_table_color(); ?> >
   <TD><SPAN id="prompt_lang_thousand"><?php echo prompt_language("la_prompt_thousand"); ?></SPAN></TD>
   <TD><input type=text NAME="thousand" tabindex="7" VALUE="<?php echo $c->Get("ThousandSep"); ?>"></TD>
   <TD></TD>
 </TR>
 
 <tr <?php int_table_color(); ?>>
   <td valign="top" class="text"><?php echo prompt_language("la_prompt_Enabled"); ?></td>
   <td>
     <input type="checkbox" name="enabled" tabindex="8" class="text" value="1" <?php if($c->Get("Enabled") == 1) echo "checked"; ?>>
   </td>
   <td class="text">&nbsp;</td>
 </tr>
 
 <tr <?php int_table_color(); ?>>
   <td valign="top" class="text"><?php echo prompt_language("la_prompt_Primary"); ?></td>
   <td>
     <input type="checkbox" name="primary" tabindex="9" class="text" value="1" <?php if($c->Get("PrimaryLang") == 1) echo "checked"; ?>>
   </td>
   <td class="text">&nbsp;</td>
 </tr>
 <tr <?php int_table_color(); ?>>
   <td valign="top" class="text"><?php echo prompt_language("la_prompt_CopyLabels"); ?></td>
   <td>
     <input type="checkbox" name="importlabels" tabindex="10" class="text" value="1">
     <SELECT NAME="srcpack">    
     <OPTION VALUE="0">--<?php echo prompt_language("la_prompt_Select_Source"); ?>
     <?php
       $ado = &GetADODBConnection();
       $sql = "SELECT * FROM ".GetTablePrefix()."Language";
       $rs = $ado->Execute($sql);
       while($rs && !$rs->EOF)
       {
           echo "<OPTION VALUE=\"".$rs->fields["LanguageId"]."\">".$rs->fields["PackName"]."\n";
           $rs->MoveNext();
       }
     ?>
     </SELECT>
 
   </td>
   <td class="text">
   </td>
       <input type=hidden NAME="Action" VALUE="<?php echo $action; ?>">
       <INPUT TYPE="hidden" NAME="LanguageId" VALUE="<?php echo $c->Get("LanguageId"); ?>">
       <input type="hidden" name="LangEditStatus" VALUE="0">
 </tr>
 
 </TABLE>
 </FORM>
 <!-- CODE FOR VIEW MENU -->
 <form method="post" action="<?php echo $_SERVER["PHP_SELF"]."?".$envar; ?>" name="viewmenu">
 <input type="hidden" name="fieldname" value="">
 <input type="hidden" name="varvalue" value="">
 <input type="hidden" name="varvalue2" value="">
 <input type="hidden" name="Action" value="">
 </form>
 <!-- END CODE-->
 <?php int_footer(); ?>
\ No newline at end of file

Property changes on: trunk/admin/config/addlang.php
___________________________________________________________________
Modified: cvs2svn:cvs-rev
## -1 +1 ##
-1.10
\ No newline at end of property
+1.11
\ No newline at end of property