Changeset 102


Ignore:
Timestamp:
03/25/2009 03:26:20 PM (3 years ago)
Author:
amir
Message:

Refactoring project's structure, moving db specific code to another file.

Location:
trunk/WordPress/plugin/transposh
Files:
1 added
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/WordPress/plugin/transposh/transposh.php

    r96 r102  
    2929require_once("logging.php"); 
    3030require_once("constants.php"); 
     31require_once("transposh_db.php"); 
    3132require_once("parser.php"); 
    3233require_once("transposh_widget.php"); 
     
    3435 
    3536// 
    36 //Constants 
    37 // 
    38  
    39 //Table name in database for storing translations 
    40 define("TRANSLATIONS_TABLE", "translations"); 
    41 define("TRANSLATIONS_LOG", "translations_log"); 
    42  
    43 //Database version 
    44 define("DB_VERSION", "1.02"); 
    45  
    46 //Constant used as key in options database 
    47 define("TRANSPOSH_DB_VERSION", "transposh_db_version"); 
    48  
    49 // 
    5037// Global variables 
    5138// 
    5239 
    53 //The full table name, i.e. prefix + name 
    54 $table_name; 
    55  
    5640//Home url of the blog 
    5741$home_url; 
     
    7256function process_page(&$buffer) { 
    7357 
    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; 
    7559 
    7660        $start_time = microtime(TRUE); 
     
    209193        return $url; 
    210194} 
    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 form 
    224         $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 cache 
    250                 $cache_entry = $translated; 
    251                 if($cache_entry == NULL) 
    252                 { 
    253                         $cache_entry = ""; 
    254                 } 
    255  
    256                 //update cache 
    257                 $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  
    268195/* 
    269196 * Return the img tag that will added to enable editing a translatable 
     
    306233function init_global_vars() 
    307234{ 
    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; 
    309236 
    310237        $home_url = get_option('home'); 
     
    315242        $home_url_quoted = preg_replace("/\//", "\\/", $home_url_quoted); 
    316243 
    317         $table_name = $wpdb->prefix . TRANSLATIONS_TABLE; 
    318244        $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 translate 
    341         if(!is_translator()) 
    342         { 
    343                 logger("Unauthorized translation attempt " . $_SERVER['REMOTE_ADDR'] , 1); 
    344         } 
    345  
    346         //Decode & remove already escaped character to avoid double escaping 
    347         $translation = $wpdb->escape(htmlspecialchars(stripslashes(urldecode($translation)))); 
    348  
    349         //The original content is encoded as base64 before it is sent (i.e. token), after we 
    350         //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 cache 
    363                 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         else 
    371         { 
    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 log 
    381  */ 
    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 IP 
    388         if ('' == $user_ID) 
    389         { 
    390                 $loguser = $_SERVER['REMOTE_ADDR']; 
    391         } 
    392         else 
    393         { 
    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         } 
    407245} 
    408246 
     
    514352 
    515353/* 
    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 /* 
    558354 * Determine if the current user is allowed to translate. 
    559355 * Return TRUE if allowed to translate otherwise FALSE 
Note: See TracChangeset for help on using the changeset viewer.