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, $Module = 'In-Portal') { $tmpphrase = $this->GetPhrase($Phrase, $LangId); if (!$tmpphrase) { $p = new clsPhrase(); $p->tablename = $this->SourceTable; $p->Set(array("Phrase","LanguageId","Translation","PhraseType", 'Module', 'LastChanged', 'LastChangeIP'), array($Phrase,$LangId,$Translation,$Type, $Module, time(), $_SERVER['REMOTE_ADDR'] )); $p->Dirty(); $p->Create(); return $p; } else { //echo 'phrase already exists with label '.$Phrase.'
'; $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, $Module = 'In-Portal') { $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->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."
\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
"; 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."
\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."
\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 "
"; print_r($element); echo "
"; $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 = HREF_Wrapper(); 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"); if(strlen($icon)>0) { $file = $TemplateRoot."/".$icon; //echo "File:$file
\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->Set('Enabled', 1); $l->Update(); $this->m_Primary = $lang_id; } function GetPrimary($Field = 'LanguageId') { 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; $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", "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", "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("&","&",$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 "
"; print_r($p); echo "
"; if(is_object($p)) { if($OverwitePhrases) { //$p->debuglevel=1; $p->Set("Translation",$i->Get("Translation")); //echo $i->Get("Translation")."
"; $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"); } } ?>