| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 2007 Eclipse Foundation and others. | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * | |
| * Contributors: | |
| * Paul Colton (Aptana)- initial API and implementation | |
| * Eclipse Foundation | |
| * Eclipse Contributors (bug 217257) | |
| * Satoru Yoshida - [373204] Babel server getting slow | |
| *******************************************************************************/ | |
| require_once("cb_global.php"); | |
| $string_id = getHTTPParameter("string_id", "POST"); | |
| $translation = getHTTPParameter("translation", "POST"); | |
| $fuzzy_state = getHTTPParameter("fuzzy", "POST"); | |
| $language_id = $_SESSION["language"]; | |
| $project_id = $_SESSION['project']; | |
| $version = $_SESSION["version"]; | |
| $user_id = $User->userid; | |
| # TODO: refactor these ifs | |
| $do_nothing = false; | |
| $affected_rows = 0; | |
| if (empty($translation) || (trim($translation) == '')) { | |
| $do_nothing = true; | |
| } else if($_POST['translate_action'] != "all"){ | |
| $query = "update | |
| translations | |
| set | |
| is_active = 0 | |
| where | |
| string_id = '".addslashes($string_id)."' | |
| and | |
| language_id = '".addslashes($language_id)."' | |
| and | |
| is_active = 1 | |
| "; | |
| $res = mysqli_query($dbh, $query); | |
| $query = "insert into | |
| translations | |
| set | |
| string_id = '".addslashes($string_id)."', | |
| language_id = '".addslashes($language_id)."', | |
| value = '".addslashes($translation)."', | |
| userid = '".addslashes($user_id)."', | |
| possibly_incorrect = '".addslashes($fuzzy_state)."', | |
| created_on = NOW() | |
| "; | |
| $res = mysqli_query($dbh, $query); | |
| $affected_rows += mysqli_affected_rows($dbh); | |
| // print $query; | |
| }else{ | |
| //FIND ALL STRINGS THAT ARE THE SAME ACROSS VERSIONS | |
| $query = "select | |
| s.string_id | |
| from | |
| strings as s | |
| INNER JOIN files AS f on s.file_id = f.file_id | |
| INNER JOIN files AS the_file_selected_for_translation on the_file_selected_for_translation.file_id = (select file_id from strings where string_id = '".addslashes($string_id)."') | |
| where | |
| s.value = (select value from strings where string_id = '".addslashes($string_id)."') | |
| and | |
| s.name = (select name from strings where string_id = '".addslashes($string_id)."') | |
| and f.name = the_file_selected_for_translation.name | |
| and f.project_id = the_file_selected_for_translation.project_id | |
| and s.is_active = 1"; | |
| $res = mysqli_query($dbh, $query); | |
| while($row = mysqli_fetch_assoc($res)){ | |
| $string_ids[] = $row['string_id']; | |
| } | |
| //GET CURRENT TRANSLATION FOR THIS STRING | |
| $query= "select value from translations where string_id = '".addslashes($string_id)."' and language_id = '".addslashes($language_id)."' and is_active = 1 order by version limit 1"; | |
| $res = mysqli_query($dbh, $query); | |
| $string_translation = ""; | |
| while($row = mysqli_fetch_assoc($res)){ | |
| $string_translation = $row['value']; | |
| } | |
| //GET ALL STRINGS WITH SAME TRANSLATIONS | |
| if($string_translation){ | |
| $query = " | |
| select | |
| translation_id,string_id,language_id | |
| from | |
| translations | |
| where | |
| string_id in (".addslashes(implode(',',$string_ids)).") | |
| and | |
| value = '".addslashes($string_translation)."' | |
| and | |
| is_active = 1 | |
| and language_id = '" . addslashes($language_id)."' | |
| "; | |
| $res = mysqli_query($dbh, $query); | |
| while($row = mysqli_fetch_assoc($res)){ | |
| //DE-ACTIVATE ALL OLD TRANSLATIONS | |
| $query = "update translations set is_active = 0 where translation_id = '".addslashes($row['translation_id'])."'"; | |
| $res2 = mysqli_query($dbh, $query); | |
| //INSERT NEW TRANSLATIONS | |
| $query = "insert into | |
| translations | |
| set | |
| string_id = '".addslashes($row['string_id'])."', | |
| language_id = '".addslashes($row['language_id'])."' , | |
| value = '".addslashes($translation)."', | |
| userid = '".addslashes($user_id)."', | |
| possibly_incorrect = '".addslashes($fuzzy_state)."', | |
| created_on = NOW() | |
| "; | |
| $res2 = mysqli_query($dbh, $query); | |
| $affected_rows += mysqli_affected_rows($dbh); | |
| } | |
| }else{ | |
| $query = " | |
| select | |
| strings.string_id | |
| from | |
| strings | |
| left join | |
| translations | |
| on | |
| strings.string_id = translations.string_id | |
| and | |
| translations.value is NULL | |
| where | |
| strings.string_id in (".addslashes(implode(',',$string_ids)).") | |
| "; | |
| $res = mysqli_query($dbh, $query); | |
| while($row = mysqli_fetch_assoc($res)){ | |
| $translation_ids[] = $row['string_id']; | |
| //INSERT NEW TRANSLATIONS | |
| $query = "insert into | |
| translations | |
| set | |
| string_id = '".addslashes($row['string_id'])."', | |
| language_id = '".addslashes($language)."' , | |
| value = '".addslashes($translation)."', | |
| possibly_incorrect = '".addslashes($fuzzy_state)."', | |
| userid = '".addslashes($user_id)."', | |
| created_on = NOW() | |
| "; | |
| $res2 = mysqli_query($dbh, $query); | |
| $affected_rows += mysqli_affected_rows($dbh); | |
| } | |
| } | |
| } | |
| if(!$do_nothing) { | |
| # Find all string_id's that have the same binary value as the one we're translating | |
| # *and* have no translation yet, and update those too. | |
| if(!$fuzzy_state) { | |
| $sql = "SELECT s.string_id, COUNT(t.string_id) AS tr_count | |
| FROM strings AS s | |
| LEFT JOIN translations AS t ON t.string_id = s.string_id AND t.language_id = '".addslashes($language_id)."' | |
| WHERE s.value = BINARY (select value from strings where string_id = '".addslashes($string_id)."') | |
| AND s.is_active = 1 AND t.value IS NULL GROUP BY s.string_id HAVING tr_count = 0"; | |
| $res = mysqli_query($dbh, $sql); | |
| $str_count = mysqli_affected_rows($dbh); | |
| while($myrow = mysqli_fetch_assoc($res)) { | |
| $sql = "insert into | |
| translations | |
| set | |
| string_id = " . $myrow['string_id'] . ", | |
| language_id = '".addslashes($language_id)."', | |
| value = '".addslashes($translation)."', | |
| userid = '".addslashes($user_id)."', | |
| created_on = NOW()"; | |
| mysqli_query($dbh, $sql); | |
| $affected_rows += mysqli_affected_rows($dbh); | |
| } | |
| } | |
| } | |
| $response['translationString'] = htmlspecialchars($translation); | |
| $response['translationArea'] = "<br /><br /><br /> | |
| <center><b>Translated $affected_rows string". ($affected_rows > 1 || $affected_rows == 0 ? "s" : "" ) ." across all Babel projects. | |
| </b></center>"; | |
| print json_encode($response); | |
| ?> |