Changeset 102
- Timestamp:
- 03/25/2009 03:26:20 PM (3 years ago)
- Location:
- trunk/WordPress/plugin/transposh
- Files:
-
- 1 added
- 1 edited
-
transposh.php (modified) (7 diffs)
-
transposh_db.php (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/WordPress/plugin/transposh/transposh.php
r96 r102 29 29 require_once("logging.php"); 30 30 require_once("constants.php"); 31 require_once("transposh_db.php"); 31 32 require_once("parser.php"); 32 33 require_once("transposh_widget.php"); … … 34 35 35 36 // 36 //Constants37 //38 39 //Table name in database for storing translations40 define("TRANSLATIONS_TABLE", "translations");41 define("TRANSLATIONS_LOG", "translations_log");42 43 //Database version44 define("DB_VERSION", "1.02");45 46 //Constant used as key in options database47 define("TRANSPOSH_DB_VERSION", "transposh_db_version");48 49 //50 37 // Global variables 51 38 // 52 39 53 //The full table name, i.e. prefix + name54 $table_name;55 56 40 //Home url of the blog 57 41 $home_url; … … 72 56 function process_page(&$buffer) { 73 57 74 global $wp_query, $tr_page, $page, $pos, $lang, $plugin_url, $is_edit_mode , $wpdb, $table_name;58 global $wp_query, $tr_page, $page, $pos, $lang, $plugin_url, $is_edit_mode; 75 59 76 60 $start_time = microtime(TRUE); … … 209 193 return $url; 210 194 } 211 212 /*213 * Fetch translation from db or cache.214 * Returns An array that contains the translated string and it source.215 * Will return NULL if no translation is available.216 */217 function fetch_translation($original)218 {219 global $wpdb, $lang, $table_name;220 $translated = NULL;221 logger("Enter " . __METHOD__ . ": $original", 4);222 223 //The original is saved in db in its escaped form224 $original = $wpdb->escape(html_entity_decode($original, ENT_NOQUOTES, 'UTF-8'));225 226 if(ENABLE_APC && function_exists('apc_fetch'))227 {228 $cached = apc_fetch($original .'___'. $lang, $rc);229 if($rc === TRUE)230 {231 logger("Exit from cache " . __METHOD__ . ": $cached", 4);232 return $cached;233 }234 }235 236 $query = "SELECT * FROM $table_name WHERE original = '$original' and lang = '$lang' ";237 $row = $wpdb->get_row($query);238 239 if($row !== FALSE)240 {241 $translated_text = stripslashes($row->translated);242 $translated = array($translated_text, $row->source);243 244 logger("db result for $original >>> $translated_text ($lang) ({$row->source})" , 3);245 }246 247 if(ENABLE_APC && function_exists('apc_store'))248 {249 //If we don't have translation still we want to have it in cache250 $cache_entry = $translated;251 if($cache_entry == NULL)252 {253 $cache_entry = "";254 }255 256 //update cache257 $rc = apc_store($original .'___'. $lang, $cache_entry, 3600);258 if($rc === TRUE)259 {260 logger("Stored in cache: $original => $translated", 3);261 }262 }263 264 logger("Exit " . __METHOD__ . ": $translated", 4);265 return $translated;266 }267 268 195 /* 269 196 * Return the img tag that will added to enable editing a translatable … … 306 233 function init_global_vars() 307 234 { 308 global $home_url, $home_url_quoted, $plugin_url, $ table_name, $wpdb, $enable_auto_translate;235 global $home_url, $home_url_quoted, $plugin_url, $enable_auto_translate; 309 236 310 237 $home_url = get_option('home'); … … 315 242 $home_url_quoted = preg_replace("/\//", "\\/", $home_url_quoted); 316 243 317 $table_name = $wpdb->prefix . TRANSLATIONS_TABLE;318 244 $enable_auto_translate = get_option(ENABLE_AUTO_TRANSLATE,1) && is_translator(); 319 }320 321 /*322 * A new translation has been posted, update the translation database.323 */324 function update_translation()325 {326 global $wpdb, $table_name;327 328 $ref=getenv('HTTP_REFERER');329 $original = base64_url_decode($_POST['token']);330 $translation = $_POST['translation'];331 $lang = $_POST['lang'];332 $source = $_POST['source'];333 334 if(!isset($original) || !isset($translation) || !isset($lang))335 {336 logger("Enter " . __FILE__ . " missing params: $original , $translation, $lang," . $ref, 0);337 return;338 }339 340 //Check that use is allowed to translate341 if(!is_translator())342 {343 logger("Unauthorized translation attempt " . $_SERVER['REMOTE_ADDR'] , 1);344 }345 346 //Decode & remove already escaped character to avoid double escaping347 $translation = $wpdb->escape(htmlspecialchars(stripslashes(urldecode($translation))));348 349 //The original content is encoded as base64 before it is sent (i.e. token), after we350 //decode it should just the same after it was parsed.351 $original = $wpdb->escape(html_entity_decode($original, ENT_NOQUOTES, 'UTF-8'));352 353 $update = "REPLACE INTO $table_name (original, translated, lang, source)354 VALUES ('" . $original . "','" . $translation . "','" . $lang . "','" . $source . "')";355 356 $result = $wpdb->query($update);357 358 if($result !== FALSE)359 {360 update_transaction_log($original, $translation, $lang, $source);361 362 //Delete entry from cache363 if(ENABLE_APC && function_exists('apc_store'))364 {365 apc_delete($original .'___'. $lang);366 }367 368 logger("Inserted to db '$original' , '$translation', '$lang' " , 3);369 }370 else371 {372 logger("Error !!! failed to insert to db $original , $translation, $lang," , 0);373 header("HTTP/1.0 404 Failed to update language database");374 }375 376 exit;377 }378 379 /*380 * Update the transaction log381 */382 function update_transaction_log(&$original, &$translation, &$lang, $source)383 {384 global $wpdb, $user_ID;385 get_currentuserinfo();386 387 // log either the user ID or his IP388 if ('' == $user_ID)389 {390 $loguser = $_SERVER['REMOTE_ADDR'];391 }392 else393 {394 $loguser = $user_ID;395 }396 397 $log = "INSERT INTO ".$wpdb->prefix.TRANSLATIONS_LOG." (original, translated, lang, translated_by, source) ".398 "VALUES ('" . $original . "','" . $translation . "','" . $lang . "','".$loguser."','".$source."')";399 400 $result = $wpdb->query($log);401 402 if($result === FALSE)403 {404 logger(mysql_error(),0);405 logger("Error !!! failed to update transaction log: $loguser, $original ,$translation, $lang, $source" , 0);406 }407 245 } 408 246 … … 514 352 515 353 /* 516 * Setup the translation database.517 */518 function setup_db()519 {520 logger("Enter " . __METHOD__ );521 global $wpdb;522 require_once(ABSPATH . 'wp-admin/includes/upgrade.php');523 524 $installed_ver = get_option(TRANSPOSH_DB_VERSION);525 526 if( $installed_ver != DB_VERSION ) {527 $table_name = $wpdb->prefix . TRANSLATIONS_TABLE;528 529 logger("Attempting to create table $table_name", 0);530 $sql = "CREATE TABLE $table_name (original VARCHAR(256) NOT NULL,".531 "lang CHAR(5) NOT NULL,".532 "translated VARCHAR(256),".533 "source TINYINT NOT NULL,".534 "PRIMARY KEY (original, lang)) DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci";535 536 dbDelta($sql);537 538 539 $table_name = $wpdb->prefix . TRANSLATIONS_LOG;540 541 logger("Attempting to create table $table_name", 0);542 $sql = "CREATE TABLE $table_name (original VARCHAR(256) NOT NULL,".543 "lang CHAR(5) NOT NULL,".544 "translated VARCHAR(256),".545 "translated_by VARCHAR(15),".546 "source TINYINT NOT NULL,".547 "timestamp TIMESTAMP,".548 "PRIMARY KEY (original, lang, timestamp)) DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci";549 550 dbDelta($sql);551 update_option(TRANSPOSH_DB_VERSION, DB_VERSION);552 }553 554 logger("Exit " . __METHOD__ );555 }556 557 /*558 354 * Determine if the current user is allowed to translate. 559 355 * Return TRUE if allowed to translate otherwise FALSE
Note: See TracChangeset
for help on using the changeset viewer.
