📄 ad_languages.php
字号:
<?php
class ad_langs
{
var $base_url;
function ad_langs( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
$tmp_in = array_merge( $_GET, $_POST, $_COOKIE );
foreach ( $tmp_in as $k => $v )
{
}
switch ( $IN['code'] )
{
case "add" :
$this->add_language( );
break;
case "edit" :
$this->do_form( "edit" );
break;
case "edit2" :
$this->show_file( );
break;
case "doadd" :
$this->save_wrapper( "add" );
break;
case "doedit" :
$this->save_langfile( );
break;
case "remove" :
$this->remove( );
break;
case "editinfo" :
$this->edit_info( );
break;
case "export" :
$this->export( );
break;
case "import" :
$this->import( );
break;
case "doimport" :
$this->doimport( );
break;
case "makedefault" :
$this->make_default( );
break;
default :
$this->list_current( );
break;
}
}
function make_default( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
global $HTTP_GET_VARS;
$new_dir = stripslashes( urldecode( trim( $HTTP_GET_VARS['id'] ) ) );
if ( $new_dir == "" )
{
$ADMIN->error( "无法找到默认语言文件" );
}
$ADMIN->rebuild_config( array(
"default_language" => $new_dir
) );
$std->boink_it( $SKIN->base_url."&act=lang" );
}
function doimport( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
if ( $IN['tarball'] == "" )
{
$ADMIN->error( "没有选择需要导入的 tar 文件!" );
}
require( ROOT_PATH."sources/lib/tar.php" );
$to_dir = $INFO['base_dir']."lang";
$tarname = $IN['tarball'];
$from_dir = $INFO['base_dir']."archive_in";
$tar = new tar( );
$real_name = preg_replace( "/^lang-(\\S+)\\.tar\$/", "\\1", $IN['tarball'] );
$real_name = preg_replace( "/_/", " ", $real_name );
$tar->new_tar( $from_dir, $tarname );
$files = $tar->list_files( );
if ( 0 < count( $files ) )
{
foreach ( $files as $giles )
{
if ( !preg_match( "/^(?:[\\.\\w\\d\\+\\-\\_\\/]+)\$/", $giles ) )
{
$ADMIN->error( "{$tarname} 可能已经损坏,请重新上传!" );
}
}
}
else
{
$ADMIN->error( "{$tarname} 不是一个有效的 tar 文件" );
}
$DB->query( "INSERT INTO ibf_languages (ldir, lname) VALUES('temp', '{$real_name} (Import)')" );
$new_id = $DB->get_insert_id( );
$dest = $to_dir."/".$new_id;
if ( !mkdir( $dest, 511 ) )
{
$DB->query( "DELETE FROM ibf_languages WHERE lid='{$new_id}'" );
$ADMIN->error( "无法建立新目录 {$to_dir}, 请修改(CHMOD)正确的目录权限。" );
}
$tar->extract_files( $dest );
if ( $tar->error != "" )
{
$DB->query( "DELETE FROM ibf_languages WHERE lid='{$new_id}'" );
$ADMIN->error( $tar->error );
}
$extra = array( "lauthor" => "", "lemail" => "" );
if ( file_exists( $dest."/conf.inc" ) )
{
require( $dest."/conf.inc" );
$extra['lauthor'] = stripslashes( $config['lauthor'] );
$extra['lemail'] = stripslashes( $config['lemail'] );
}
$extra['ldir'] = $new_id;
$db_string = $DB->compile_db_update_string( $extra );
$DB->query( "UPDATE ibf_languages SET {$db_string} WHERE lid='{$new_id}'" );
$ADMIN->done_screen( "语言文件已经导入", "语言文件管理", "act=lang" );
}
function import( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
$ADMIN->page_detail = "你选择的 tar 文件必须以 'binary' 方式上传到论坛 'archive_in' 目录下。";
$ADMIN->page_title = "导入语言文件";
$ADMIN->html .= $SKIN->start_form( array(
1 => array( "code", "doimport" ),
2 => array( "act", "lang" )
) );
$SKIN->td_header[] = array( " ", "50%" );
$SKIN->td_header[] = array( " ", "50%" );
$ADMIN->html .= $SKIN->start_table( "请选择导入的 tar 文件" );
$files = $ADMIN->get_tar_names( "lang-" );
$form_array = array( );
if ( 0 < count( $files ) )
{
foreach ( $files as $piles )
{
$form_array[] = array(
$piles,
$piles
);
}
}
$ADMIN->html .= $SKIN->add_td_row( array(
"<b>Tar 文件导入中 ...</b>",
$SKIN->form_dropdown( "tarball", $form_array )
) );
$ADMIN->html .= $SKIN->end_form( "导入" );
$ADMIN->html .= $SKIN->end_table( );
$ADMIN->output( );
}
function export( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
if ( $IN['id'] == "" )
{
$ADMIN->error( "你必须指定一个存在的语言文件ID,请返回后重试!" );
}
$DB->query( "SELECT * from ibf_languages WHERE lid='".$IN['id']."'" );
if ( !( $row = $DB->fetch_row( ) ) )
{
$ADMIN->error( "不能从数据库获取相关数据信息" );
}
$archive_dir = $INFO['base_dir']."/archive_out";
$lang_dir = $INFO['base_dir']."/lang/".$row['ldir'];
require( ROOT_PATH."sources/lib/tar.php" );
if ( !is_dir( $archive_dir ) )
{
$ADMIN->error( "无法找到目录 {$archive_dir}, 目录是否已经建立?" );
}
if ( !is_writeable( $archive_dir ) )
{
$ADMIN->error( "无法写入目录 {$archive_dir}, 请修改目录权限(CHMOD 755 或 CHMOD 777)。" );
}
if ( !is_dir( $lang_dir ) )
{
$ADMIN->error( "无法找到目录 {$lang_dir}, 目录是否已经建立?" );
}
$l_name = preg_replace( "/\\s{1,}/", "_", $row['lname'] );
$new_dir = "lang-".$l_name;
if ( !$ADMIN->copy_dir( $lang_dir, $archive_dir."/".$new_dir ) )
{
$ADMIN->error( $ADMIN->errors );
}
$file_content = "<?php\n\n\$config=array('lauthor' => \"".addslashes( $row['lauthor'] )."\", 'lemail'=>\"".addslashes( $row['lemail'] )."\")\n\n?".">";
$FH = fopen( $archive_dir."/".$new_dir."/"."conf.inc", "w" );
fwrite( $FH, $file_content, strlen( $file_content ) );
fclose( $FH );
$tar = new tar( );
$tar->new_tar( $archive_dir, $new_dir.".tar" );
$tar->add_directory( $archive_dir."/".$new_dir );
$tar->write_tar( );
if ( $tar->error != "" )
{
$ADMIN->error( $tar->error );
}
$ADMIN->rm_dir( $archive_dir."/".$new_dir );
$ADMIN->done_screen( "导出语言文件已经建立<br><br>你现在可以 [<a href='archive_out/{$new_dir}.tar'>按此</a>] 下载这个 tar 文件。", "语言文件管理", "act=lang" );
}
function show_file( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
if ( $IN['id'] == "" )
{
$ADMIN->error( "你必须指定一个存在的语言文件ID,请返回后重试!" );
}
$DB->query( "SELECT * from ibf_languages WHERE lid='".$IN['id']."'" );
if ( !( $row = $DB->fetch_row( ) ) )
{
$ADMIN->error( "不能从数据库获取相关数据信息" );
}
$lang_dir = $INFO['base_dir']."lang/".$row['ldir'];
$form_array = array( );
$lang_file = $lang_dir."/".$IN['lang_file'];
if ( !is_writeable( $lang_dir ) )
{
$ADMIN->error( "无法写入目录 '{$lang_dir}', 请修改目录权限(CHMOD 755 或 CHMOD 777)。" );
}
if ( !file_exists( $lang_file ) )
{
$ADMIN->error( "无法在 '{$lang_dir}' 目录中找到 {$IN['lang_file']} , 请返回检查你的输入信息" );
}
else
{
require( $lang_file );
}
if ( $IN['lang_file'] == "email_content.php" )
{
$lang = $EMAIL;
}
if ( !is_writeable( $lang_file ) )
{
$ADMIN->error( "无法写入目录 '{$lang_file}', 请修改目录权限(CHMOD 755 或 CHMOD 777)。" );
}
$ADMIN->page_detail = "你可以在下面编辑所有的语言文件信息。";
$ADMIN->page_title = "编辑语言文件:".$row['lname'];
$ADMIN->html .= $SKIN->start_form( array(
1 => array( "code", "doedit" ),
2 => array( "act", "lang" ),
3 => array(
"id",
$IN['id']
),
4 => array(
"lang_file",
$IN['lang_file']
)
) );
$SKIN->td_header[] = array( "文件名称", "20%" );
$SKIN->td_header[] = array( "内容", "80%" );
$ADMIN->html .= $SKIN->start_table( "语言文件:".$IN['lang_file'] );
foreach ( $lang as $k => $v )
{
$v = stripslashes( $v );
$v = preg_replace( "/&/", "&", $v );
$v = preg_replace( "/</", "<", $v );
$v = preg_replace( "/>/", ">", $v );
$v = preg_replace( "/'/", "'", $v );
if ( $IN['lang_file'] == "email_content.php" )
{
$rows = 15;
$cols = 70;
$ADMIN->html .= $SKIN->add_td_row( array(
"<ibf.lang.<b>".$k."</b>>",
$SKIN->form_textarea( "XX_".$k, $v, $cols, $rows )
) );
}
else
{
$ADMIN->html .= $SKIN->add_td_row( array(
"<ibf.lang.<b>".$k."</b>>",
$SKIN->form_input( "XX_".$k, $v )
) );
}
}
$ADMIN->html .= $SKIN->end_form( "编辑这个文件" );
$ADMIN->html .= $SKIN->end_table( );
$ADMIN->output( );
}
function edit_info( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
global $HTTP_POST_VARS;
if ( $IN['id'] == "" )
{
$ADMIN->error( "你必须指定一个存在的语言文件ID,请返回后重试!" );
}
$DB->query( "SELECT * from ibf_languages WHERE lid='".$IN['id']."'" );
if ( !( $row = $DB->fetch_row( ) ) )
{
$ADMIN->error( "无法从数据库获取相关数据信息" );
}
$final['lname'] = stripslashes( $HTTP_POST_VARS['lname'] );
if ( isset( $HTTP_POST_VARS['lname'] ) )
{
$final['lauthor'] = stripslashes( $HTTP_POST_VARS['lauthor'] );
$final['lemail'] = stripslashes( $HTTP_POST_VARS['lemail'] );
}
$db_string = $DB->compile_db_update_string( $final );
$DB->query( "UPDATE ibf_languages SET {$db_string} WHERE lid='".$IN['id']."'" );
$ADMIN->done_screen( "语言文件信息已经更新", "语言文件管理", "act=lang" );
}
function add_language( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
global $HTTP_POST_VARS;
if ( $IN['id'] == "" )
{
$ADMIN->error( "你必须指定一个存在的语言文件ID,请返回后重试!" );
}
$DB->query( "SELECT * FROM ibf_languages WHERE lid='".$IN['id']."'" );
if ( !( $row = $DB->fetch_row( ) ) )
{
$ADMIN->error( "无法从数据库获取相关数据信息" );
}
if ( !is_writeable( ROOT_PATH."lang" ) )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -