Source for file LibertyTranslations.php
Documentation is available at LibertyTranslations.php
$this->mContentId = $pContentId;
global $gBitSystem, $gBitLanguage;
if( @BitBase::verifyId( $this->mContentId ) ) {
$translationId = $this->mDb->getOne( "SELECT `translation_id` FROM `". BIT_DB_PREFIX. "i18n_content_trans_map` WHERE `content_id`=?", array( $this->mContentId ) );
if( @BitBase::verifyId( $translationId ) ) {
$query = "SELECT lc.`content_id`, lc.`title`, lc.`lang_code`, ictm.`translation_id`
INNER JOIN `". BIT_DB_PREFIX. "liberty_content` lc ON( lc.`content_id`=ictm.`content_id` )
WHERE ictm.`translation_id`=?";
$result = $this->mDb->query( $query, array( $translationId ) );
while( $aux = $result->fetchRow() ) {
// default to site language
if( empty( $aux['lang_code'] )) {
$aux['lang_code'] = $gBitLanguage->mLanguage;
$ret[$aux['lang_code']] = $aux;
if( $this->verify( $pParamHash ) ) {
if( !@BitBase::verifyId( $pParamHash['translation_store']['translation_id'] ) && is_array( $pParamHash['translation_store'] ) ) {
foreach( $pParamHash['translation_store'] as $store ) {
$result = $this->mDb->associateInsert( $table, $store );
$result = $this->mDb->associateInsert( $table, $pParamHash['translation_store'] );
function verify( &$pParamHash ) {
// make sure we don't have a translation_id for this content yet
if( @BitBase::verifyId( $pParamHash['from_id'] ) ) {
$pParamHash['translation_id'] = $this->mDb->getOne( "SELECT `translation_id` FROM `". BIT_DB_PREFIX. "i18n_content_trans_map` WHERE `content_id`=?", array( $pParamHash['from_id'] ) );
// if we have this page in this translation, we should inform the user somehow.
// in theory, this shouldn't happen, but there might be a situation where we end up with 2 users translating the same page at the same time. (is this true?)
// if we have a translation_id, we add this content to the same group of translations
if( @BitBase::verifyId( $pParamHash['translation_id'] ) ) {
$pParamHash['translation_store']['translation_id'] = $pParamHash['translation_id'];
$pParamHash['translation_store']['content_id'] = $pParamHash['content_id'];
} elseif( @BitBase::verifyId( $pParamHash['from_id'] ) ) {
// we have a from_id but no translation_id, this is a new entry in the translation map and we need both, the original and the new content_id entered
// we can simply use the from_id as the translation_id
$pParamHash['translation_store'][$i]['translation_id'] = $pParamHash['from_id'];
$pParamHash['translation_store'][$i]['content_id'] = $pParamHash['from_id'];
$pParamHash['translation_store'][$i]['translation_id'] = $pParamHash['from_id'];
$pParamHash['translation_store'][$i]['content_id'] = $pParamHash['content_id'];
if( @BitBase::verifyId( $this->mContentId ) ) {
$result = $this->mDb->query( "DELETE FROM `". BIT_DB_PREFIX. "i18n_content_trans_map` WHERE `content_id`=?", $this->mContentId );
// ================== service functions ==================
global $gBitSmarty, $gBitLanguage;
// merge this information that we can display the appropriate flags
if( count( $translations ) > 1 ) {
foreach( $translations as $key => $trans ) {
$translations[$key] = array_merge( $gBitLanguage->mLanguageList[$trans['lang_code']], $trans );
$gBitSmarty->assign( 'i18nTranslations', $translations );
global $gBitLanguage, $gBitSmarty, $gBitUser;
foreach( $gBitLanguage->mLanguageList as $lang_code => $language ) {
$translationsList[$lang_code] = $language;
if( !empty( $translations[$lang_code]['content_id'] ) ) {
$translationsList[$lang_code]['content_id'] = $translations[$lang_code]['content_id'];
$translationsList[$lang_code]['title'] = $translations[$lang_code]['title'];
$translationId = $translations[$lang_code]['translation_id'];
$gBitSmarty->assign( 'translationsList', $translationsList );
$gBitSmarty->assign( 'translationId', $translationId );
if( @BitBase::verifyId( $_REQUEST['i18n']['from_id'] ) ) {
// load the content we're translating from
$gBitSmarty->assign_by_ref( "translateFrom", $transObject );
// attempt google translation
if( !empty( $_REQUEST['i18n']['google'] ) && !empty( $transObject->mInfo['data'] )) {
// temporarily replace \n with a string
// initiate some variables
$transObject->mInfo['google_guess'] = '';
// we need to split the strings into small chunks due to url length limitations
foreach( $strings as $string ) {
$requestUrl = "http://translate.google.com/translate_t?ie=UTF-8&oe=UTF-8&text=". urlencode( preg_replace( '/[\n]/', $nl, $string )). "&langpair=en|{$_REQUEST['i18n']['lang_code']}";
if( $handle = fopen( $requestUrl, "r" )) {
while( !feof( $handle )) {
$data .= fread( $handle, 8192 );
preg_match_all( "!<div id=result_box[^>]*>([^<]*)</div>.*!", $data, $matches );
if( isset ( $matches[1][0] )) {
// if we are creating this content and we have a from_id, we know that we're translating a page
// mInfo['content_id'] isn't set when content is created
if( empty( $pObject->mInfo['content_id'] ) && @BitBase::verifyId( $_REQUEST['i18n']['from_id'] ) ) {
$storeHash = $_REQUEST['i18n'];
$storeHash['content_id'] = $pParamHash['content_id'];
|