Changeset 406
- Timestamp:
- 05/23/2010 03:01:41 PM (2 years ago)
- Location:
- trunk/WordPress/plugin/transposh
- Files:
-
- 7 edited
-
core/utils.php (modified) (1 diff)
-
test/core/utilsTest.php (modified) (1 diff)
-
transposh.php (modified) (4 diffs)
-
wp/transposh_admin.php (modified) (2 diffs)
-
wp/transposh_db.php (modified) (3 diffs)
-
wp/transposh_options.php (modified) (4 diffs)
-
wp/transposh_widget.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/WordPress/plugin/transposh/core/utils.php
r346 r406 238 238 function base64_url_decode($input) { 239 239 return base64_decode(strtr($input, '-_,', '+/=')); 240 } 241 242 /** 243 * Function to translate a given url permalink to a target language 244 * TODO - check params 245 * @param string $href 246 * @param string $home_url 247 * @param string $target_language 248 * @param function $fetch_translation_func 249 * @return string translated url permalink 250 */ 251 function translate_url($href, $home_url, $target_language,$fetch_translation_func) { 252 // todo - check query part... sanitize 253 $href = substr($href,strlen($home_url)+1); 254 $parts = explode('/', $href); 255 foreach ($parts as $part) { 256 if (!$part) continue; 257 list($translated_text, $old_source) = call_user_func_array($fetch_translation_func, array($part, $target_language)); 258 if ($translated_text) 259 $url .= '/'.str_replace(' ', '-',$translated_text); 260 else { 261 // now the same attempt with '-' replaced to ' ' 262 list($translated_text, $old_source) = call_user_func_array($fetch_translation_func, array(str_replace('-', ' ', $part), $target_language)); 263 logger ($part. ' '.str_replace('-', ' ', $part).' '.$translated_text); 264 if ($translated_text) 265 $url .= '/'.str_replace(' ', '-',$translated_text); 266 else 267 $url .= '/'.$part; 268 } 269 } 270 $href = $home_url.$url.'/'; 271 return $href; 272 } 273 274 /** 275 * From a given translated url, tries to get the original URL 276 * @param string $href 277 * @param string $target_language 278 * @param function $fetch_translation_func 279 * @return string 280 */ 281 function get_original_url($href, $target_language,$fetch_translation_func) { 282 $url = urldecode($href); 283 $url = (($pos=strpos($url, '?')) ? substr($url, 0, $pos) : $url); 284 $parts = explode('/', $url); 285 foreach ($parts as $part) { 286 if (!$part) continue; 287 // don't attempt for lang or numbers 288 if ($part == $target_language || is_numeric($part)) { 289 $url2 .= '/'.$part; 290 continue; 291 } 292 293 $original_text = call_user_func_array($fetch_translation_func, array($part, $target_language)); 294 if ($original_text) 295 $url2 .= '/'.strtolower(str_replace(' ', '-',$original_text)); //? CHECK 296 else { 297 $original_text = call_user_func_array($fetch_translation_func, array(str_replace('-', ' ', $part), $target_language)); 298 if ($original_text) 299 $url2 .= '/'.strtolower(str_replace(' ', '-',$original_text)); //? CHECK 300 else 301 $url2 .= '/'.$part; 302 } 303 } 304 // TODO: Consider sanitize_title_with_dashes 305 // TODO : need to handle params.... 306 //logger(substr($url,strlen($url)-1)); 307 //if (substr($url,strlen($url)-1) == '/') $url2 .= '/'; 308 //$url2 = rtrim($url2,'/'); 309 logger ("$href $url $url2"); 310 //$href = $this->home_url.$url2; 311 312 return $url2.'/'; 240 313 } 241 314 -
trunk/WordPress/plugin/transposh/test/core/utilsTest.php
r305 r406 225 225 } 226 226 227 public function testCleanupURL3() 228 { 229 $homeurl = ""; 230 //$params_only = true; 231 $this->assertEquals("/test",cleanup_url("/he/test",$homeurl)); 232 $this->assertEquals("/test",cleanup_url("he/test",$homeurl)); 233 } 234 227 235 public function testGrabLanguage() 228 236 { -
trunk/WordPress/plugin/transposh/transposh.php
r405 r406 111 111 add_filter('query_vars', array(&$this,'parameter_queryvars' )); 112 112 add_filter('rewrite_rules_array', array(&$this,'update_rewrite_rules')); 113 if ($this->options->get_enable_url_translate()) { 114 add_filter('request', array(&$this,'request_filter')); 115 } 113 116 add_action('init', array(&$this,'on_init'),0); // really high priority 114 117 add_action('parse_request', array(&$this,'on_parse_request')); … … 524 527 */ 525 528 // lost in compatability 526 /* function add_transposh_async() {529 /* function add_transposh_async() { 527 530 if (!$this->edit_mode && !$this->is_auto_translate_permitted()) { 528 531 return; … … 607 610 $use_params = !$this->enable_permalinks_rewrite; 608 611 612 // some hackery needed for url translations 613 // first cut home 614 if ($this->options->get_enable_url_translate()) { 615 $href = translate_url($href, $this->home_url,$this->target_language,array(&$this->database,'fetch_translation')); 616 } 609 617 $href = rewrite_url_lang_param($href,$this->home_url,$this->enable_permalinks_rewrite, $this->target_language, $this->edit_mode, $use_params); 610 618 logger ("rewritten: $href",4); … … 730 738 } 731 739 740 /** 741 * This function enables the correct parsing of translated URLs 742 * @global <type> $wp 743 * @param <type> $query 744 * @return <type> 745 */ 746 function request_filter($query) { 747 //no need to handle non-lang 748 if (!$query['lang']) return $query; 749 750 // the trick is to replace the URI and put it back afterwards 751 $oldRequestUri = $_SERVER['REQUEST_URI']; 752 $_SERVER['REQUEST_URI'] = get_original_url($_SERVER['REQUEST_URI'], $query['lang'], array($this->database,'fetch_original')); 753 remove_filter('request', array(&$this,'request_filter')); 754 global $wp; 755 $wp->parse_request(); 756 $query = $wp->query_vars; 757 logger($query,4); 758 $_SERVER['REQUEST_URI'] = $oldRequestUri; 759 760 return $query; 761 } 762 732 763 } 733 764 -
trunk/WordPress/plugin/transposh/wp/transposh_admin.php
r387 r406 116 116 $this->transposh->options->set_enable_default_translate($_POST[ENABLE_DEFAULT_TRANSLATE]); 117 117 $this->transposh->options->set_enable_search_translate($_POST[ENABLE_SEARCH_TRANSLATE]); 118 $this->transposh->options->set_enable_url_translate($_POST[ENABLE_URL_TRANSLATE]); 118 119 $this->transposh->options->set_enable_msn_translate($_POST[ENABLE_MSN_TRANSLATE]); 119 120 $this->transposh->options->set_preferred_translator($_POST[PREFERRED_TRANSLATOR]); … … 464 465 'Allow search of translated languages, in those languages (and the original language)'; 465 466 467 /** 468 * Insert the option to enable translation of urls 469 * Disbaled by default. 470 * @since 0.5.3 471 */ 472 echo '<h4>Enable url translation (expirimental)</h4>'; 473 echo '<input type="checkbox" value="1" name="'.ENABLE_URL_TRANSLATE.'" '.$this->checked ($this->transposh->options->get_enable_url_translate()).'/> '. 474 'Allow translation of permalinks and urls'; 475 466 476 } 467 477 -
trunk/WordPress/plugin/transposh/wp/transposh_db.php
r398 r406 47 47 } 48 48 49 /** 50 * Allow fetching of multiple translation requests from the database with a single query 51 * @param array $originals 52 * @param string $lang 53 */ 49 54 function prefetch_translations($originals, $lang) { 50 55 if (!$originals) return; … … 70 75 logger($this->translations, 5); 71 76 } 77 72 78 /** 73 79 * Fetch translation from db or cache. … … 126 132 logger("Exit: $translated", 4); 127 133 return $translated; 134 } 135 136 /** 137 * Fetch original from db or cache. 138 * Returns the original for a given translation. 139 * Will return NULL if no translation is available. 140 * @param string $original 141 * @param string $lang 142 * @return array list(translation,source) 143 */ 144 function fetch_original($translation, $lang) { 145 $original = NULL; 146 logger("Enter: $translation", 3); 147 148 //The original is saved in db in its escaped form 149 $translation = $GLOBALS['wpdb']->escape(html_entity_decode($translation, ENT_NOQUOTES, 'UTF-8')); 150 151 if(ENABLE_APC && function_exists('apc_fetch')) { 152 $cached = apc_fetch($translation .'_r_r_'. $lang, $rc); 153 if($rc === TRUE) { 154 logger("Exit from cache: $cached", 3); 155 return $cached; 156 } 157 } 158 159 if ($this->translations[$translation]) { 160 $original = $this->translations[$translation]; 161 logger("prefetch result for $translation >>> {$this->translations[$translation][0]} ({$this->translations[$translation][1]})" , 3); 162 } else { 163 164 $table_name = $GLOBALS['wpdb']->prefix . TRANSLATIONS_TABLE; 165 $query = "SELECT * FROM $table_name WHERE translated = '$translation' and lang = '$lang' "; 166 $row = $GLOBALS['wpdb']->get_row($query); 167 168 if($row !== FALSE) { 169 $original = stripslashes($row->original); 170 //$translated = array($translated_text, $row->source); 171 logger("db result for $translation >>> $original ($lang) ({$row->source})" , 3); 172 } 173 } 174 175 if(ENABLE_APC && function_exists('apc_store')) { 176 //If we don't have translation still we want to have it in cache 177 $cache_entry = $original; 178 if($cache_entry == NULL) { 179 $cache_entry = ""; 180 } 181 182 //update cache 183 $rc = apc_store($translation .'_r_r_'. $lang, $cache_entry, 3600); 184 if($rc === TRUE) { 185 logger("Stored in cache: $translation => $original", 4); 186 } 187 } 188 189 logger("Exit: $original", 3); 190 return $original; 128 191 } 129 192 -
trunk/WordPress/plugin/transposh/wp/transposh_options.php
r387 r406 67 67 //Option to enable/disable default language translation @since 0.3.6 68 68 define("ENABLE_SEARCH_TRANSLATE", "enable_search_translate"); 69 //Option to enable/disable url translation @since 0.5.3 70 define("ENABLE_URL_TRANSLATE", "enable_url_translate"); 69 71 //Option to enable/disable rewrite of permalinks 70 72 define("ENABLE_PERMALINKS", "enable_permalinks"); … … 165 167 * Get a user sorted language list 166 168 * @since 0.3.9 167 * @return array sorted list of languages, pointing to names and flags 169 * @return array sorted list of languages, pointing to names and flags 168 170 */ 169 171 function get_sorted_langs() { … … 216 218 if (!isset($this->options[ENABLE_SEARCH_TRANSLATE])) return 1; // default is true 217 219 return $this->options[ENABLE_SEARCH_TRANSLATE]; 220 } 221 222 function get_enable_url_translate() { 223 return $this->options[ENABLE_URL_TRANSLATE]; 218 224 } 219 225 … … 343 349 } 344 350 351 function set_enable_url_translate($val) { 352 $val = ($val) ? 1 : 0; 353 $this->set_value($val, $this->options[ENABLE_URL_TRANSLATE]); 354 } 355 345 356 function set_enable_auto_translate($val) { 346 357 $val = ($val) ? 1 : 0; -
trunk/WordPress/plugin/transposh/wp/transposh_widget.php
r355 r406 126 126 127 127 //remove any language identifier 128 $clean_page_url = cleanup_url($page_url,$this->transposh->home_url, true); 128 $clean_page_url = cleanup_url($page_url,$this->transposh->home_url, true); 129 if ($this->transposh->options->get_enable_url_translate()) { 130 $clean_page_url = get_original_url($clean_page_url,$this->transposh->target_language,array($this->transposh->database,'fetch_original')); 131 } 129 132 logger ("WIDGET: clean page url: $clean_page_url ,orig: $page_url"); 130 133 … … 144 147 ($this->transposh->options->is_default_language($code))) { 145 148 logger ("code = ".$code,5); 146 $page_url = rewrite_url_lang_param($clean_page_url,$this->transposh->home_url,$this->transposh->enable_permalinks_rewrite, $code, $this->transposh->edit_mode); 149 if ($this->transposh->options->get_enable_url_translate()) { 150 $page_url = translate_url($clean_page_url, '',$code,array(&$this->transposh->database,'fetch_translation')); 151 } else { 152 $page_url = $clean_page_url; 153 } 154 $page_url = rewrite_url_lang_param($page_url,$this->transposh->home_url,$this->transposh->enable_permalinks_rewrite, $code, $this->transposh->edit_mode); 147 155 if ($this->transposh->options->is_default_language($code)) { 148 156 $page_url = $clean_page_url;
Note: See TracChangeset
for help on using the changeset viewer.
