<?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 += mysql_affected_rows();
	
//	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 = mysql_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 = mysql_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 = mysql_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 += mysql_affected_rows();
			
		}
		
	}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 = mysql_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 += mysql_affected_rows();
		}	
	}	
}

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 	= mysql_affected_rows();
	
		while($myrow = mysql_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 += mysql_affected_rows();
		}
	}
}

$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);

?>