Index: branches/RC/core/kernel/languages/phrases_cache.php =================================================================== diff -u -N --- branches/RC/core/kernel/languages/phrases_cache.php (revision 11892) +++ branches/RC/core/kernel/languages/phrases_cache.php (revision 0) @@ -1,282 +0,0 @@ -Conn =& $this->Application->GetADODBConnection(); - } - - function Init($prefix, $special = '') - { - if (constOn('IS_INSTALL')) { - $this->LanguageId = 1; - } - else { - if ($this->Application->IsAdmin()) { - $id_field = $this->Application->getUnitOption('lang', 'IDField'); - $table_name = $this->Application->getUnitOption('lang', 'TableName'); - $sql = 'SELECT '.$id_field.' - FROM '.$table_name.' - WHERE AdminInterfaceLang = 1'; - $this->LanguageId = $this->Conn->GetOne($sql); - } - else { - $this->LanguageId = $this->Application->GetVar('m_lang'); - } - } - - if (isset($this->Application->Caches['PhraseList'])) { - $this->LoadPhrases( $this->Application->Caches['PhraseList'] ); - } - } - - function GetCachedIds() - { - $query = sprintf("SELECT PhraseList, ConfigVariables FROM %s WHERE Template = %s", - TABLE_PREFIX.'PhraseCache', - $this->Conn->Qstr(md5($this->Application->GetVar('t').$this->Application->GetVar('m_theme').$this->Application->GetVar('m_lang')))); - $res = $this->Conn->GetRow($query); - - if ($res && $res['ConfigVariables']) { - $this->Application->OriginalConfigCacheIds = explode(',', $res['ConfigVariables']); - $this->Application->ConfigCacheIds = $this->Application->OriginalConfigCacheIds; - } - - return ($res === false) ? Array() : explode(',', $res['PhraseList']); - } - - function LoadPhrases($ids) - { - if ( !is_array($ids) || !implode('', $ids) ) return; - $query = sprintf("SELECT Translation,UPPER(Phrase) AS Phrase FROM %s WHERE LanguageId = %s AND PhraseId IN (%s)", - TABLE_PREFIX.'Phrase', - $this->LanguageId, - join(',', $ids)); - $this->Phrases = $this->Conn->GetCol($query,'Phrase'); - /*foreach($phrases as $phrase => $tanslation) - { - $this->AddCachedPhrase(mb_strtoupper($phrase), $tanslation); - }*/ - $this->Ids = $ids; - $this->OriginalIds = $ids; - } - - function AddCachedPhrase($label, $value) - { - $label = mb_strtoupper($label); - $this->Phrases[$label] = $value; - } - - function NeedsCacheUpdate() - { - return is_array($this->Ids) && count($this->Ids) > 0 && $this->Ids != $this->OriginalIds; - } - - /** - * Copy from Application->UpdateCache method - * - * @deprecated - */ - function UpdateCache() - { - $update = false; - //something changed - $update = $update || (is_array($this->Ids) && count($this->Ids) > 0 && $this->Ids != $this->OriginalIds); - $update = $update || (count($this->Application->ConfigCacheIds) && $this->Application->ConfigCacheIds != $this->Application->OriginalConfigCacheIds); - if ($update) { - $query = sprintf("REPLACE %s (PhraseList, CacheDate, Template, ConfigVariables) - VALUES (%s, %s, %s, %s)", - TABLE_PREFIX.'PhraseCache', - $this->Conn->Qstr(join(',', $this->Ids)), - adodb_mktime(), - $this->Conn->Qstr(md5($this->Application->GetVar('t').$this->Application->GetVar('m_theme').$this->Application->GetVar('m_lang'))), - $this->Conn->qstr(implode(',', array_unique($this->Application->ConfigCacheIds)))); - $this->Conn->Query($query); - } - } - - function GetPhrase($label) - { - if (!isset($this->LanguageId)) return 'impossible case'; - //actually possible when custom field contains references to language labels and its being rebuilt in OnAfterConfigRead - //which is triggered by Sections rebuild, which in turn read all the configs and all of that happens BEFORE seeting the language... - - if (ereg("^!.+!$", $label) > 0) - { - $label = substr($label, 1, -1); //cut exclamation marks - } - - if( strlen($label) == 0 ) return ''; - - $original_label = $label; - $label = mb_strtoupper($label); - if(isset($this->Phrases[$label])) { - $translated_label = $this->Phrases[$label]; - // debug mode is checked directly to improve performance - if (defined('DEBUG_MODE') && DEBUG_MODE && constOn('DBG_PHRASES_HIGHLIGHT')) { - if (!$this->Application->isDebugMode()) return $translated_label; - - if ($this->Application->IsAdmin()) { - $sql = 'SELECT Module - FROM '.TABLE_PREFIX.'Phrase - WHERE (LanguageId = '.$this->LanguageId.') AND (Phrase = '.$this->Conn->qstr($label).')'; - $this->Application->Debugger->appendHTML('Phrase: '.$label.'; Module: '.$this->Conn->GetOne($sql).''); -// $translated_label = $translated_label.' [m: '.$this->Conn->GetOne($sql).'; l: '.$label.']'; - } - else { - // highlight text created via translated phrase (used to detect if text on screen is phrase or not) - $translated_label = ''.$translated_label.' '.$original_label.''; - } - - } - - if (defined('DEBUG_MODE') && DEBUG_MODE && - (($this->Application->IsAdmin() && constOn('DBG_PHRASES_EDIT_ADMIN')) || (!$this->Application->IsAdmin() && constOn('DBG_PHRASES_EDIT_FRONT')) ) ) { - // option to change translation for Labels - list($edit_tpl, $index_file) = $this->Application->IsAdmin() ? Array('regional/phrases_edit', 'index.php') : Array('phrases_edit', 'index.php'); - - if ($this->Application->IsAdmin() && $this->Application->ConfigValue('UsePopups')) { - // link to popup when using popups (only in admin) - $edit_url = 'javascript:translate_phrase(\''.addslashes($translated_label).'\', \''.$edit_tpl.'\');'; - } - else { - // direct link, when not using popups OR on frontend - $edit_url = $this->Application->HREF($edit_tpl,'',Array('m_opener'=>'d','phrases_label'=>$original_label,'phrases_event'=>'OnPrepareUpdate', 'pass'=>'all,phrases'), $index_file ); - } - $translated_label = '!'.$translated_label.'!'; - } - - return $translated_label; - } - - $this->LoadPhraseByLabel($label, $original_label); - return $this->GetPhrase($label); - } - - function LoadPhraseByLabel($label, $original_label) - { - $query = sprintf("SELECT PhraseId, Translation FROM %s WHERE LanguageId = %s AND UPPER(Phrase) = UPPER(%s)", - TABLE_PREFIX.'Phrase', - $this->LanguageId, - $this->Conn->qstr($label)); - $res = $this->Conn->GetRow($query); - if ($res === false || count($res) == 0) - { - $translation = '!'.$label.'!'; - if($this->Application->isDebugMode() && constOn('DBG_PHRASES')) { - list($edit_tpl, $index_file) = $this->Application->IsAdmin() ? Array('regional/phrases_edit', 'index.php') : Array('phrases_edit', 'index.php'); - - if ($this->Application->IsAdmin() && $this->Application->ConfigValue('UsePopups')) { - // link to popup when using popups (only in admin) - $edit_url = 'javascript:translate_phrase(\''.addslashes($original_label).'\', \''.$edit_tpl.'\');'; - } - else { - // direct link, when not using popups OR on frontend - $edit_url = $this->Application->HREF($edit_tpl,'',Array('m_opener'=>'d','phrases_label'=>$original_label,'phrases_event'=>'OnNew', 'pass'=>'all,phrases'), $index_file ); - } - - $translation = '!'.$label.'!'; - if($this->fromTag) $translation = $this->escapeTagReserved($translation); - } - $this->AddCachedPhrase($label, $translation); //add it as already cached, as long as we dont need to cache not found phrase - return false; - } - - $this->Phrases[$label] = $res['Translation']; - array_push($this->Ids, $res['PhraseId']); - $this->Ids = array_unique($this->Ids); //just to make sure - return true; - } - - /** - * Sort params by name and then by length - * - * @param string $a - * @param string $b - * @return int - * @access private - */ - function CmpParams($a, $b) - { - $a_len = mb_strlen($a); - $b_len = mb_strlen($b); - if ($a_len == $b_len) return 0; - return $a_len > $b_len ? -1 : 1; - } - - /** - * Replace language tags in exclamation marks found in text - * - * @param string $text - * @param bool $force_escape force escaping, not escaping of resulting string - * @return string - * @access public - */ - function ReplaceLanguageTags($text,$forse_escaping=null) - { - $this->fromTag = true; - if( isset($forse_escaping) ) $this->fromTag = $forse_escaping; - preg_match_all("(!(la|lu)[^!]+!)", $text, $res, PREG_PATTERN_ORDER); - $language_tags = $res[0]; - uasort($language_tags, Array(&$this, 'CmpParams') ); - - $values = Array(); - $i = 0; - foreach ($language_tags as $label) { - array_push($values, $this->GetPhrase($label) ); - //array_push($values, $this->Application->Phrase($label) ); - $language_tags[$i] = '/' . $language_tags[$i] . '/'; - $i++; - } - $this->fromTag = false; - return preg_replace($language_tags, $values, $text); - } - - /** - * Escape chars in phrase translation, that could harm parser to process tag - * - * @param string $text - * @return string - * @access private - */ - function escapeTagReserved($text) - { - $reserved = Array('"',"'"); // = - $replacement = Array('\"',"\'"); // \= - return str_replace($reserved,$replacement,$text); - } - -} - - -?> \ No newline at end of file