Seditio Source
Root |
./othercms/b2evolution_7.2.3/inc/locales/translation.ctrl.php
<?php
/**
 * This file implements the UI controller for translation management.
 *
 * This file is part of the evoCore framework - {@link http://evocore.net/}
 * See also {@link https://github.com/b2evolution/b2evolution}.
 *
 * @license GNU GPL v2 - {@link http://b2evolution.net/about/gnu-gpl-license}
 *
 * @copyright (c)2003-2020 by Francois Planque - {@link http://fplanque.com/}
 *
 * @package admin
 */
if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' );

// Check minimum permission:
check_user_perm( 'admin', 'normal', true );
check_user_perm( 'options', 'view', true );

load_funcs('locales/model/_translation.funcs.php');

$AdminUI->set_path( 'options', 'regional', 'locales' );

param_action();
param( 'edit_locale', 'string', '', true );

// Load all available locale defintions:
locales_load_available_defs();

if( !isset(
$locales[$edit_locale] ) )
{    
// Check for correct locale
   
$Messages->add( TB_('The locale is incorrect!'), 'error' );
   
header_redirect( '?ctrl=locales&loc_transinfo=1', 303 );
}

/* Set charset of edited locale in order to display the special UTF symbols correctly */
global $locales, $io_charset, $evo_charset;
if(
$locales[$edit_locale]['charset'] == 'utf-8' && $io_charset != 'utf-8' )
{
   
// Set encoding for MySQL connection
   
$DB->set_connection_charset( $locales[$edit_locale]['charset'] );
   
// Set charset for html format
   
$io_charset = $locales[$edit_locale]['charset'];
   
$evo_charset = $locales[$edit_locale]['charset'];
}

switch(
$action )
{
    case
'import_po':
       
// Check that this action request is not a CSRF hacked request:
       
$Session->assert_received_crumb( 'translation' );

        if(
translation_update_table_po( $edit_locale ) )
        {
           
$Messages->add( TB_('The file .PO was imported into database successfully'), 'success' );
        }
       
header_redirect( '?ctrl=translation&edit_locale='.$edit_locale, 303 );
        break;

    case
'generate_po':
       
// Check that this action request is not a CSRF hacked request:
       
$Session->assert_received_crumb( 'translation' );

        if(
translation_generate_po_file( $edit_locale ) )
        {
           
$Messages->add( TB_('The file .PO was generated successfully'), 'success' );
        }
       
header_redirect( '?ctrl=translation&edit_locale='.$edit_locale, 303 );
        break;

    case
'new':
       
param( 'iost_ID', 'integer', 0, true );

       
$SQL = new SQL( 'Get original string' );
       
$SQL->SELECT( '*, "'.$edit_locale.'" AS itst_locale, "" AS itst_standard' );
       
$SQL->FROM( 'T_i18n_original_string' );
       
$SQL->WHERE( 'iost_ID = '.$DB->quote( $iost_ID ) );
       
$edited_String = $DB->get_row( $SQL );
        break;

    case
'edit':
       
param( 'itst_ID', 'integer', 0, true );

       
$SQL = new SQL( 'Get translated string' );
       
$SQL->SELECT( '*' );
       
$SQL->FROM( 'T_i18n_translated_string' );
       
$SQL->FROM_add( 'LEFT JOIN T_i18n_original_string ON iost_ID = itst_iost_ID' );
       
$SQL->WHERE( 'itst_ID = '.$DB->quote( $itst_ID ) );
       
$edited_String = $DB->get_row( $SQL );
        break;

    case
'update':
       
// Check that this action request is not a CSRF hacked request:
       
$Session->assert_received_crumb( 'translation' );

       
param( 'itst_ID', 'integer' );
       
param( 'itst_standard', 'string' );

        if(
$itst_ID > 0 )
        {    
// Update translated string
           
$DB->query( 'UPDATE T_i18n_translated_string
                  SET itst_standard = '
.$DB->quote( $itst_standard ).'
                WHERE itst_ID = '
.$DB->quote( $itst_ID ) );

           
$Messages->add( TB_('A translated string was updated.'), 'success' );
           
header_redirect( '?ctrl=translation&edit_locale='.$edit_locale, 303 );
        }
        else
        {    
// Insert new translated string
           
param( 'iost_ID', 'integer' );

           
$DB->query( 'INSERT T_i18n_translated_string
                ( itst_iost_ID, itst_locale, itst_standard, itst_inpofile ) VALUES
                ( '
.$iost_ID.', '.$DB->quote( $edit_locale ).', '.$DB->quote( $itst_standard ).', 1 )' );

           
$Messages->add( TB_('New translated string was added.'), 'success' );
           
header_redirect( '?ctrl=translation&edit_locale='.$edit_locale, 303 );
        }
        break;

    case
'delete':
       
// Check that this action request is not a CSRF hacked request:
       
$Session->assert_received_crumb( 'translation' );

       
param( 'itst_ID', 'integer' );

       
$DB->query( 'DELETE FROM T_i18n_translated_string WHERE itst_ID = '.$DB->quote( $itst_ID ) );

       
$Messages->add( TB_('A translated string was deleted.'), 'success' );
       
header_redirect( '?ctrl=translation&edit_locale='.$edit_locale, 303 );
        break;
}

$AdminUI->breadcrumbpath_init( false );
$AdminUI->breadcrumbpath_add( TB_('System'), $admin_url.'?ctrl=system',
       
TB_('Global settings are shared between all blogs; see Blog settings for more granular settings.') );
$AdminUI->breadcrumbpath_add( TB_('Regional'), $admin_url.'?ctrl=locales' );
$AdminUI->breadcrumbpath_add( TB_('Locales'), $admin_url.'?ctrl=locales' );
$AdminUI->breadcrumbpath_add( TB_('Translation editor'), $admin_url.'?ctrl=translation&locale='.$locale );

// Display <html><head>...</head> section! (Note: should be done early if actions do not redirect)
$AdminUI->disp_html_head();

// Display title, menu, messages, etc. (Note: messages MUST be displayed AFTER the actions)
$AdminUI->disp_body_top();

// Begin payload block:
$AdminUI->disp_payload_begin();

// Display VIEW:
switch( $action )
{
    case
'new_strings':
       
param( 'action', 'string', '', true );
       
$AdminUI->disp_view( 'locales/views/_translation_new.view.php' );
        break;

    case
'new':
    case
'edit':
       
$AdminUI->disp_view( 'locales/views/_translation.form.php' );
        break;

    default:
       
$AdminUI->disp_view( 'locales/views/_translation.view.php' );
        break;
}

// End payload block:
$AdminUI->disp_payload_end();

// Display body bottom, debug info and close </html>:
$AdminUI->disp_global_footer();

?>