You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

256 lines
7.5 KiB

<?php
/**
* ECSHOP 管理中心语言项编辑(前台语言项)
* ============================================================================
* * 版权所有 2005-2016 上海商创网络科技有限公司,并保留所有权利。
* 网站地址: http://www.ecmoban.com;
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
* 使用;不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* $Author: liubo $
* $Id: edit_languages.php 17217 2011-01-19 06:29:08Z liubo $
*/
define('IN_ECS', true);
require(dirname(__FILE__) . '/includes/init.php');
/* act操作项的初始化 */
if (empty($_REQUEST['act']))
{
$_REQUEST['act'] = 'list';
}
else
{
$_REQUEST['act'] = trim($_REQUEST['act']);
}
admin_priv('lang_edit');
/*------------------------------------------------------ */
//-- 列表编辑 ?act=list
/*------------------------------------------------------ */
if ($_REQUEST['act'] == 'list')
{
//从languages目录下获取语言项文件
$lang_arr = array();
$lang_path = '../languages/' .$_CFG['lang'];
$lang_dir = @opendir($lang_path);
while ($file = @readdir($lang_dir))
{
if (substr($file, -3) == "php")
{
$filename = substr($file, 0, -4);
$lang_arr[$filename] = $file. ' - ' .@$_LANG['language_files'][$filename];
}
}
ksort($lang_arr);
@closedir($lang_dir);
/* 获得需要操作的语言包文件 */
$lang_file = isset($_POST['lang_file']) ? trim($_POST['lang_file']) : '';
if ($lang_file == 'common')
{
$file_path = '../languages/'.$_CFG['lang'].'/common.php';
}
elseif ($lang_file == 'shopping_flow')
{
$file_path = '../languages/'.$_CFG['lang'].'/shopping_flow.php';
}
else
{
$file_path = '../languages/'.$_CFG['lang'].'/user.php';
}
$file_attr = '';
if (file_mode_info($file_path) < 7)
{
$file_attr = $lang_file .'.php:'. $_LANG['file_attribute'];
}
/* 搜索的关键字 */
$keyword = !empty($_POST['keyword']) ? trim(stripslashes($_POST['keyword'])) : '';
/* 调用函数 */
$language_arr = get_language_item_list($file_path, $keyword);
/* 模板赋值 */
$smarty->assign('ur_here', $_LANG['edit_languages']);
$smarty->assign('keyword', $keyword); //关键字
$smarty->assign('action_link', array());
$smarty->assign('file_attr', $file_attr);//文件权限
$smarty->assign('lang_arr', $lang_arr); //语言文件列表
$smarty->assign('file_path', $file_path);//语言文件
$smarty->assign('lang_file', $lang_file);//语言文件
$smarty->assign('language_arr', $language_arr); //需要编辑的语言项列表
assign_query_info();
$smarty->display('language_list.htm');
}
/*------------------------------------------------------ */
//-- 编辑语言项
/*------------------------------------------------------ */
elseif ($_REQUEST['act'] == 'edit')
{
/* 语言项的路径 */
$lang_file = isset($_POST['file_path']) ? trim($_POST['file_path']) : '';
/* 替换前的语言项 */
$src_items = !empty($_POST['item']) ? stripslashes_deep($_POST['item']) : '';
/* 修改过后的语言项 */
$dst_items = array();
$_POST['item_id'] = stripslashes_deep($_POST['item_id']);
for ($i = 0; $i < count($_POST['item_id']); $i++)
{
/* 语言项内容如果为空,不修改 */
if (trim($_POST['item_content'][$i]) == '')
{
unset($src_items[$i]);
}
else
{
$_POST['item_content'][$i] = str_replace('\\\\n', '\\n', $_POST['item_content'][$i]);
$dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";';
}
}
/* 调用函数编辑语言项 */
$result = set_language_items($lang_file, $src_items, $dst_items);
if ($result === false)
{
/* 修改失败提示信息 */
$link[] = array('text' => $_LANG['back_list'], 'href' => 'javascript:history.back(-1)');
sys_msg($_LANG['edit_languages_false'], 0, $link);
}
else
{
/* 记录管理员操作 */
admin_log('', 'edit', 'languages');
/* 清除缓存 */
clear_cache_files();
/* 成功提示信息 */
$link[] = array('text' => $_LANG['back_list'], 'href' => 'edit_languages.php?act=list');
sys_msg($_LANG['edit_languages_success'], 0, $link);
}
}
/*------------------------------------------------------ */
//-- 语言项的操作函数
/*------------------------------------------------------ */
/**
* 获得语言项列表
* @access public
* @exception 如果语言项中包含换行符,将发生异常。
* @param string $file_path 存放语言项列表的文件的绝对路径
* @param string $keyword 搜索时指定的关键字
* @return array 正确返回语言项列表,错误返回false
*/
function get_language_item_list($file_path, $keyword)
{
if (empty($keyword))
{
return array();
}
/* 获取文件内容 */
$line_array = file($file_path);
if (!$line_array)
{
return false;
}
else
{
/* 防止用户输入敏感字符造成正则引擎失败 */
$keyword = preg_quote($keyword, '/');
$matches = array();
$pattern = '/\\[[\'|"](.*?)'.$keyword.'(.*?)[\'|"]\\]\\s|=\\s?[\'|"](.*?)'.$keyword.'(.*?)[\'|"];/';
$regx = '/(?P<item>(?P<item_id>\\$_LANG\\[[\'|"].*[\'|"]\\])\\s*?=\\s*?[\'|"](?P<item_content>.*)[\'|"];)/';
foreach ($line_array AS $lang)
{
if (preg_match($pattern, $lang))
{
$out = array();
if (preg_match($regx, $lang, $out))
{
$matches[] = $out;
}
}
}
return $matches;
}
}
/**
* 设置语言项
* @access public
* @param string $file_path 存放语言项列表的文件的绝对路径
* @param array $src_items 替换前的语言项
* @param array $dst_items 替换后的语言项
* @return void 成功就把结果写入文件,失败返回false
*/
function set_language_items($file_path, $src_items, $dst_items)
{
/* 检查文件是否可写(修改) */
if (file_mode_info($file_path) < 2)
{
return false;
}
/* 获取文件内容 */
$line_array = file($file_path);
if (!$line_array)
{
return false;
}
else
{
$file_content = implode('', $line_array);
}
$snum = count($src_items);
$dnum = count($dst_items);
if ($snum != $dnum)
{
return false;
}
/* 对索引进行排序,防止错位替换 */
ksort($src_items);
ksort($dst_items);
for ($i = 0; $i < $snum; $i++)
{
$file_content = str_replace($src_items[$i], $dst_items[$i], $file_content);
}
/* 写入修改后的语言项 */
$f = fopen($file_path, 'wb');
if (!$f)
{
return false;
}
if (!fwrite($f, $file_content))
{
return false;
}
else
{
return true;
}
}
?>