📄 ad_skin_import.php
字号:
$raw = preg_replace( "/^.*?(<!--IBF_START_FUNC)/s", "\\1", trim( $raw ) );
$raw = str_replace( "\r\n", "\n", $raw );
$raw = $this->unconvert_tags( $raw );
$master = array( );
$flag = 0;
$eachline = explode( "\n", $raw );
foreach ( $eachline as $line )
{
if ( $flag == 0 && preg_match( "/\\s*<!--IBF_START_FUNC\\|(\\S+?)\\|(.*?)-->\\s*/", $line, $matches ) )
{
$func = trim( $matches[1] );
$data = trim( $matches[2] );
if ( $func != "" )
{
$flag = $func;
$master[$func] = array(
"func_name" => $func,
"func_data" => $data,
"content" => ""
);
continue;
}
}
if ( preg_match( "/\\s*?<!--IBF_END_FUNC\\|{$flag}-->\\s*?/", $line ) )
{
$flag = 0;
}
else if ( isset( $master[$flag]['content'] ) )
{
$master[$flag]['content'] .= $line."\n";
}
}
if ( $INFO['safe_mode_skins'] != 1 )
{
if ( SAFE_MODE_ON == 1 )
{
$ADMIN->error( "侦测到论坛安全模式功能,你需要修改启用论坛设置[安全模式主题],你可以在[论坛变量设置]里进行设置。" );
}
$final = "<?php\n\n"."class {$group} {\n\n";
foreach ( $master as $func_name => $data )
{
$final .= "\n\nfunction ".trim( $data['func_name'] )."(".trim( $data['func_data'] ).") {\n"."global \$ibforums;\n"."return <<<EOF\n";
$final .= trim( $data['content'] );
$final .= "\nEOF;\n}\n";
}
$final .= "\n\n}\n?>";
if ( $fh = fopen( $skin_dir."/".$group.".php", "w" ) )
{
fwrite( $fh, $final, strlen( $final ) );
fclose( $fh );
@chmod( $skin_dir."/".$group.".php", 511 );
}
else
{
if ( $isnew == 1 )
{
$DB->query( "DELETE FROM ibf_tmpl_names WHERE skid='{$setid}'" );
}
$errors[] = "无法写入目录 '{$phpskin}',请检查目录属性(CHMOD 777)。";
}
}
foreach ( $master as $func_name => $data )
{
if ( $isnew == 0 )
{
$str = $DB->compile_db_update_string( array(
"section_content" => stripslashes( trim( $data['content'] ) ),
"func_data" => stripslashes( trim( $data['func_data'] ) )
) );
$DB->query( "UPDATE ibf_skin_templates SET {$str} WHERE set_id='{$setid}' AND group_name='{$group}' AND func_name='".trim( $data['func_name'] )."'" );
}
else
{
$str = $DB->compile_db_insert_string( array(
"section_content" => stripslashes( trim( $data['content'] ) ),
"func_data" => stripslashes( trim( $data['func_data'] ) ),
"set_id" => $setid,
"group_name" => $group,
"func_name" => trim( $data['func_name'] ),
"can_remove" => 0
) );
$DB->query( "INSERT INTO ibf_skin_templates ({$str['FIELD_NAMES']}) VALUES({$str['FIELD_VALUES']})" );
}
}
return TRUE;
}
function template_import( )
{
}
function image_import( )
{
}
function wrap_import( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
}
function css_import( )
{
}
function check_archive( $files )
{
if ( 0 < count( $files ) )
{
foreach ( $files as $giles )
{
if ( !preg_match( "/^(?:[\\(\\)\\:\\;\\~\\.\\w\\d\\+\\-\\_\\/]+)\$/", $giles ) )
{
return FALSE;
}
}
}
else
{
return FALSE;
}
return TRUE;
}
function list_current( )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
$form_array = array( );
$ADMIN->page_detail = "你可以选择需要导入的文件,所有文件必须先上传到 'archive_in' 目录下";
$ADMIN->page_title = "主题界面导入";
$files = array( );
$dir = $INFO['base_dir']."/archive_in";
if ( is_dir( $dir ) )
{
$handle = opendir( $dir );
while ( ( $filename = readdir( $handle ) ) !== false )
{
if ( !( $filename != "." && $filename != ".." ) && !preg_match( "/^(css|image|set|wrap|tmpl).+?\\.(tar|html|css)\$/", $filename ) )
{
$files[] = $filename;
}
}
closedir( $handle );
}
$SKIN->td_header[] = array( "主题界面名称", "30%" );
$SKIN->td_header[] = array( "文件类型", "20%" );
$SKIN->td_header[] = array( "文件名称", "30%" );
$SKIN->td_header[] = array( "导入", "10%" );
$SKIN->td_header[] = array( "删除", "10%" );
$ADMIN->html .= $SKIN->start_table( "当前已经上传的文件" );
if ( 0 < count( $files ) )
{
foreach ( $files as $file )
{
$type = array( "css" => "CSS文件管理", "image" => "模板变量管理", "set" => "主题界面管理", "wrap" => "论坛首页模板", "tmpl" => "论坛模板管理" );
$rtype = preg_replace( "/^(css|image|set|wrap|tmpl).+?\\.(\\S+)\$/", "\\1", $file );
$rname = preg_replace( "/^(css|image|set|wrap|tmpl)-(.+?)\\.(\\S+)\$/", "\\2", $file );
$rname = preg_replace( "/_/", " ", $rname );
$ADMIN->html .= $SKIN->add_td_row( array(
"<b>{$rname}</b>",
"<center>{$type[$rtype]}</center>",
"<center>{$file}</center>",
"<center><a href='".$SKIN->base_url."&act=import&code=import&type={$rtype}&id={$file}'>导入</a></center>",
"<center><a href='".$SKIN->base_url."&act=import&code=remove&id={$file}'>删除</a></center>"
) );
}
}
$ADMIN->html .= $SKIN->end_table( );
$ADMIN->output( );
}
function unconvert_tags( $t = "" )
{
if ( $t == "" )
{
return "";
}
$t = preg_replace( "/\\{ibf\\.vars\\.(sql_driver|sql_host|sql_database|sql_pass|sql_user|sql_port|sql_tbl_prefix|smtp_host|smtp_port|smtp_user|smtp_pass|html_dir|base_dir|upload_dir)\\}/", "", $t );
$t = preg_replace( "/{ibf\\.script_url}/i", "{\$ibforums->base_url}", $t );
$t = preg_replace( "/{ibf\\.session_id}/i", "{\$ibforums->session_id}", $t );
$t = preg_replace( "/{ibf\\.skin\\.(\\w+)}/", "{\$ibforums->skin['\\1']}", $t );
$t = preg_replace( "/{ibf\\.lang\\.(\\w+)}/", "{\$ibforums->lang['\\1']}", $t );
$t = preg_replace( "/{ibf\\.vars\\.(\\w+)}/", "{\$ibforums->vars['\\1']}", $t );
$t = preg_replace( "/{ibf\\.member\\.(\\w+)}/", "{\$ibforums->member['\\1']}", $t );
return $t;
}
function rebuild_phpskin( $templates_dir, $skins_dir )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
$errors = array( );
require( $templates_dir."/config.php" );
if ( $handle = opendir( $templates_dir ) )
{
while ( ( $filename = readdir( $handle ) ) !== false )
{
if ( $filename != "." && $filename != ".." )
{
if ( preg_match( "/^index\\./", $filename ) )
{
}
else if ( preg_match( "/\\.html\$/", $filename ) )
{
$name = preg_replace( "/\\.html\$/", "", $filename );
if ( $FHD = fopen( $templates_dir."/".$filename, "r" ) )
{
$text = fread( $FHD, filesize( $templates_dir."/".$filename ) );
fclose( $FHD );
}
else
{
$errors[] = "无法打开 {$filename}, 忽略文件 ...";
continue;
}
$need = count( $skin[$name] );
$start = 0;
$end = 0;
if ( $need < 1 )
{
$errors[] = "读取数据是出现错误 {$filename}, 忽略文件 ...";
}
else
{
foreach ( $skin[$name] as $func_name => $data )
{
if ( preg_match( "/<!--\\|IBF\\|{$func_name}\\|START\\|-->/", $text ) )
{
++$start;
}
if ( preg_match( "/<!--\\|IBF\\|{$func_name}\\|END\\|-->/", $text ) )
{
++$end;
}
}
if ( $start != $end )
{
$errors[] = "某些模板文件开始和结束标签可能丢失了 {$filename}, 忽略文件 ...";
}
else if ( $start != $need )
{
$errors[] = "某些模板文件内容可能丢失了 {$filename}, 忽略文件 ...";
}
else
{
$text = $this->unconvert_tags( $text );
$final = "<?php\n\n"."class {$name} {\n\n";
foreach ( $skin[$name] as $func_name => $data )
{
$top = "\n\nfunction {$func_name}({$data}) {\n"."global \$ibforums;\n"."return <<<EOF\n";
$bum = "\nEOF;\n}\n";
$text = preg_replace( "/\\s*<!--\\|IBF\\|{$func_name}\\|START\\|-->\\s*\n/", "{$top}", $text );
$text = preg_replace( "/\\s*<!--\\|IBF\\|{$func_name}\\|END\\|-->\\s*\n/", "{$bum}", $text );
}
$end = "\n\n}\n?>";
$final .= $text.$end;
if ( $fh = fopen( $skins_dir."/".$name.".php", "w" ) )
{
fwrite( $fh, $final, strlen( $final ) );
fclose( $fh );
@chmod( $skins_dir."/".$name.".php", 511 );
}
else
{
$errors[] = "无法写入目录 '{$phpskin}',请检查目录属性(CHMOD 777)。";
}
$end = "";
$final = "";
$top = "";
}
}
}
}
}
closedir( $handle );
}
else
{
$errors[] = "无法打开论坛模板文件目录!";
}
return $errors;
}
function import_error( $error, $next_id )
{
global $IN;
global $INFO;
global $DB;
global $SKIN;
global $ADMIN;
global $std;
global $MEMBER;
global $GROUP;
$DB->query( "DELETE FROM ibf_macro_name WHERE set_id='{$next_id['macro']}'" );
$DB->query( "DELETE FROM ibf_macro WHERE macro_id='{$next_id['macro']}'" );
$DB->query( "DELETE FROM ibf_tmpl_names WHERE skid='{$next_id['templates']}'" );
$DB->query( "DELETE FROM ibf_css WHERE cssid='{$next_id['css']}'" );
$DB->query( "DELETE FROM ibf_templates WHERE tmid='{$next_id['wrap']}'" );
$DB->query( "DELETE FROM ibf_skin_templates WHERE set_id='{$next_id['templates']}'" );
@rmdir( $INFO['base_dir']."/style_images/".$next_id['images'] );
@rmdir( $INFO['base_dir']."/Skin/s".$next_id['templates'] );
$ADMIN->rm_dir( $this->work_path."/".$this->new_dir );
$ADMIN->error( $error );
}
}
ad_langs( );
$idx = new ad_langs( );
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -