* conver 2 unix.
This commit is contained in:
@@ -1,83 +1,83 @@
|
||||
<?php
|
||||
error_reporting(0);
|
||||
|
||||
$config->langs['cn'] = '中文简体';
|
||||
$config->langs['en'] = 'EN';
|
||||
|
||||
$lang->cn->title = '欢迎使用禅道集成运行环境!';
|
||||
$lang->cn->poweredBy = "由<a href='http://www.apachefriends.org/' target='_blank'>xampp</a>精简而来";
|
||||
|
||||
$lang->cn->links['zentao']['link'] = '/zentao/';
|
||||
$lang->cn->links['zentao']['text'] = '访问禅道';
|
||||
$lang->cn->links['zentao']['target'] = '_self';
|
||||
$lang->cn->links['official']['link'] = 'http://www.zentao.net/';
|
||||
$lang->cn->links['official']['text'] = '禅道官网';
|
||||
$lang->cn->links['official']['target'] = '_blank';
|
||||
$lang->cn->links['sqlbudyy']['link'] = '/sqlbuddy/';
|
||||
$lang->cn->links['sqlbudyy']['text'] = '数据库管理';
|
||||
$lang->cn->links['sqlbudyy']['target'] = '_blank';
|
||||
$lang->cn->links['phpinfo']['link'] = '?mode=phpinfo';
|
||||
$lang->cn->links['phpinfo']['text'] = 'PHP信息';
|
||||
$lang->cn->links['phpinfo']['target'] = '_blank';
|
||||
|
||||
$lang->en->title = 'Welcome to use zentao!';
|
||||
$lang->en->poweredBy = "reduced from <a href='http://www.apachefriends.org/' target='_blank'>xampp</a>";
|
||||
|
||||
$lang->en->links['zentao']['link'] = '/zentao/';
|
||||
$lang->en->links['zentao']['text'] = 'ZenTao';
|
||||
$lang->en->links['zentao']['target'] = '_self';
|
||||
$lang->en->links['official']['link'] = 'http://www.zentao.net/';
|
||||
$lang->en->links['official']['text'] = 'Community';
|
||||
$lang->en->links['official']['target'] = '_blank';
|
||||
$lang->en->links['sqlbudyy']['link'] = '/sqlbuddy/';
|
||||
$lang->en->links['sqlbudyy']['text'] = 'MySQL';
|
||||
$lang->en->links['sqlbudyy']['target'] = '_blank';
|
||||
$lang->en->links['phpinfo']['link'] = '?mode=phpinfo';
|
||||
$lang->en->links['phpinfo']['text'] = 'PHP';
|
||||
$lang->en->links['phpinfo']['target'] = '_blank';
|
||||
|
||||
if(is_file('./my.php')) include './my.php';
|
||||
|
||||
$acceptLang = stripos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'zh-CN') !== false ? 'cn' : 'en';
|
||||
$acceptLang = isset($_GET['lang']) ? $_GET['lang'] : $acceptLang;
|
||||
$clientLang = $lang->$acceptLang;
|
||||
?>
|
||||
<?php if(isset($_GET['mode']) and $_GET['mode'] == 'phpinfo') die(phpinfo());?>
|
||||
<html xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<head>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
|
||||
<meta http-equiv="refresh" content="5; url=/zentao/" />
|
||||
<title><?php echo $clientLang->title;?></title>
|
||||
<link href="/zentao/theme/default/style.css" rel="stylesheet" type="text/css">
|
||||
<link href="/zentao/theme/default/yui.css" rel="stylesheet" type="text/css">
|
||||
<style>
|
||||
html {background-color:#06294e;}
|
||||
table{margin-top:200px; background:white; border:none}
|
||||
tr, th, td{border:none}
|
||||
#welcome{font-size:20px}
|
||||
#logo{width:120px; border-right:1px solid #efefef}
|
||||
#links{padding-left:25px}
|
||||
#links a{display:block; width:100px; height:25px; line-height:25px; float:left; margin-right:5px; border:1px solid gray; background:#efefef; text-decoration:none; text-align:center}
|
||||
#links #zentao{background:green; color:#efefef}
|
||||
#power{background:#efefef}
|
||||
.button-c{width:100px}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table class='table-5' align='center'>
|
||||
<tr class='colhead'><th colspan='2' id='welcome'><?php echo $clientLang->title;?></th></tr>
|
||||
<tr>
|
||||
<td id='logo'><img src='/zentao/theme/default/images/main/logo2.png' /></td>
|
||||
<td id='links'><?php foreach($clientLang->links as $linkID => $link) echo "<a id='$linkID' href='$link[link]' target='$link[target]'>$link[text]</a>";?></td>
|
||||
</tr>
|
||||
<tr id='power'>
|
||||
<td class='a-right' colspan='2'>
|
||||
<?php
|
||||
echo $clientLang->poweredBy . ' ';
|
||||
foreach($config->langs as $langCode => $langName) echo "<a href='?lang=$langCode'>$langName</a>";
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
<?php
|
||||
error_reporting(0);
|
||||
|
||||
$config->langs['cn'] = '中文简体';
|
||||
$config->langs['en'] = 'EN';
|
||||
|
||||
$lang->cn->title = '欢迎使用禅道集成运行环境!';
|
||||
$lang->cn->poweredBy = "由<a href='http://www.apachefriends.org/' target='_blank'>xampp</a>精简而来";
|
||||
|
||||
$lang->cn->links['zentao']['link'] = '/zentao/';
|
||||
$lang->cn->links['zentao']['text'] = '访问禅道';
|
||||
$lang->cn->links['zentao']['target'] = '_self';
|
||||
$lang->cn->links['official']['link'] = 'http://www.zentao.net/';
|
||||
$lang->cn->links['official']['text'] = '禅道官网';
|
||||
$lang->cn->links['official']['target'] = '_blank';
|
||||
$lang->cn->links['sqlbudyy']['link'] = '/sqlbuddy/';
|
||||
$lang->cn->links['sqlbudyy']['text'] = '数据库管理';
|
||||
$lang->cn->links['sqlbudyy']['target'] = '_blank';
|
||||
$lang->cn->links['phpinfo']['link'] = '?mode=phpinfo';
|
||||
$lang->cn->links['phpinfo']['text'] = 'PHP信息';
|
||||
$lang->cn->links['phpinfo']['target'] = '_blank';
|
||||
|
||||
$lang->en->title = 'Welcome to use zentao!';
|
||||
$lang->en->poweredBy = "reduced from <a href='http://www.apachefriends.org/' target='_blank'>xampp</a>";
|
||||
|
||||
$lang->en->links['zentao']['link'] = '/zentao/';
|
||||
$lang->en->links['zentao']['text'] = 'ZenTao';
|
||||
$lang->en->links['zentao']['target'] = '_self';
|
||||
$lang->en->links['official']['link'] = 'http://www.zentao.net/';
|
||||
$lang->en->links['official']['text'] = 'Community';
|
||||
$lang->en->links['official']['target'] = '_blank';
|
||||
$lang->en->links['sqlbudyy']['link'] = '/sqlbuddy/';
|
||||
$lang->en->links['sqlbudyy']['text'] = 'MySQL';
|
||||
$lang->en->links['sqlbudyy']['target'] = '_blank';
|
||||
$lang->en->links['phpinfo']['link'] = '?mode=phpinfo';
|
||||
$lang->en->links['phpinfo']['text'] = 'PHP';
|
||||
$lang->en->links['phpinfo']['target'] = '_blank';
|
||||
|
||||
if(is_file('./my.php')) include './my.php';
|
||||
|
||||
$acceptLang = stripos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'zh-CN') !== false ? 'cn' : 'en';
|
||||
$acceptLang = isset($_GET['lang']) ? $_GET['lang'] : $acceptLang;
|
||||
$clientLang = $lang->$acceptLang;
|
||||
?>
|
||||
<?php if(isset($_GET['mode']) and $_GET['mode'] == 'phpinfo') die(phpinfo());?>
|
||||
<html xmlns='http://www.w3.org/1999/xhtml'>
|
||||
<head>
|
||||
<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
|
||||
<meta http-equiv="refresh" content="5; url=/zentao/" />
|
||||
<title><?php echo $clientLang->title;?></title>
|
||||
<link href="/zentao/theme/default/style.css" rel="stylesheet" type="text/css">
|
||||
<link href="/zentao/theme/default/yui.css" rel="stylesheet" type="text/css">
|
||||
<style>
|
||||
html {background-color:#06294e;}
|
||||
table{margin-top:200px; background:white; border:none}
|
||||
tr, th, td{border:none}
|
||||
#welcome{font-size:20px}
|
||||
#logo{width:120px; border-right:1px solid #efefef}
|
||||
#links{padding-left:25px}
|
||||
#links a{display:block; width:100px; height:25px; line-height:25px; float:left; margin-right:5px; border:1px solid gray; background:#efefef; text-decoration:none; text-align:center}
|
||||
#links #zentao{background:green; color:#efefef}
|
||||
#power{background:#efefef}
|
||||
.button-c{width:100px}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<table class='table-5' align='center'>
|
||||
<tr class='colhead'><th colspan='2' id='welcome'><?php echo $clientLang->title;?></th></tr>
|
||||
<tr>
|
||||
<td id='logo'><img src='/zentao/theme/default/images/main/logo2.png' /></td>
|
||||
<td id='links'><?php foreach($clientLang->links as $linkID => $link) echo "<a id='$linkID' href='$link[link]' target='$link[target]'>$link[text]</a>";?></td>
|
||||
</tr>
|
||||
<tr id='power'>
|
||||
<td class='a-right' colspan='2'>
|
||||
<?php
|
||||
echo $clientLang->poweredBy . ' ';
|
||||
foreach($config->langs as $langCode => $langName) echo "<a href='?lang=$langCode'>$langName</a>";
|
||||
?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,300 +1,300 @@
|
||||
<?php
|
||||
/**
|
||||
* The common simplified chinese file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->arrow = '<span class="icon-arrow"> </span>';
|
||||
$lang->colon = '::';
|
||||
$lang->comma = ',';
|
||||
$lang->dot = '。';
|
||||
$lang->at = ' 于 ';
|
||||
$lang->downArrow = '↓';
|
||||
|
||||
$lang->ZenTaoPMS = '禅道管理';
|
||||
$lang->welcome = "欢迎使用『%s』{$lang->colon} {$lang->ZenTaoPMS}";
|
||||
$lang->myControl = "我的地盘";
|
||||
$lang->currentPos = '当前位置:';
|
||||
$lang->logout = '退出';
|
||||
$lang->login = '登录';
|
||||
$lang->aboutZenTao = '关于';
|
||||
$lang->todayIs = '今天是%s,';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>时间: %s 毫秒, 内存: %s KB, 查询: %s. </div></div>";
|
||||
|
||||
$lang->reset = '重填';
|
||||
$lang->edit = '编辑';
|
||||
$lang->copy = '复制';
|
||||
$lang->delete = '删除';
|
||||
$lang->close = '关闭';
|
||||
$lang->link = '关联';
|
||||
$lang->unlink = '移除';
|
||||
$lang->import = '导入';
|
||||
$lang->export = '导出';
|
||||
$lang->setFileName = '文件名:';
|
||||
$lang->activate = '激活';
|
||||
$lang->submitting = '稍候...';
|
||||
$lang->save = '保存';
|
||||
$lang->confirm = '确认';
|
||||
$lang->preview = '查看';
|
||||
$lang->goback = '返回';
|
||||
$lang->go = 'GO';
|
||||
$lang->more = '更多';
|
||||
|
||||
$lang->actions = '操作';
|
||||
$lang->comment = '备注';
|
||||
$lang->history = '历史记录';
|
||||
$lang->attatch = '附件';
|
||||
$lang->reverse = '[切换顺序]';
|
||||
$lang->switchDisplay= '[切换显示]';
|
||||
$lang->switchHelp = '切换帮助';
|
||||
$lang->addFiles = '上传了附件 ';
|
||||
$lang->files = '附件 ';
|
||||
$lang->unfold = '+';
|
||||
$lang->fold = '-';
|
||||
|
||||
$lang->selectAll = '全选';
|
||||
$lang->notFound = '抱歉,您访问的对象并不存在!';
|
||||
$lang->showAll = '++ 全部显示 ++';
|
||||
$lang->hideClosed = '-- 隐藏已结束 --';
|
||||
|
||||
$lang->future = '未来';
|
||||
$lang->year = '年';
|
||||
$lang->workingHour = '工时';
|
||||
|
||||
$lang->idAB = 'ID';
|
||||
$lang->priAB = 'P';
|
||||
$lang->statusAB = '状态';
|
||||
$lang->openedByAB = '创建';
|
||||
$lang->assignedToAB = '指派';
|
||||
$lang->typeAB = '类型';
|
||||
|
||||
$lang->common->common = '公有模块';
|
||||
|
||||
/* 主导航菜单。*/
|
||||
$lang->menu->my = '<span id="mainbg"> </span>我的地盘|my|index';
|
||||
$lang->menu->product = '产品视图|product|index';
|
||||
$lang->menu->project = '项目视图|project|index';
|
||||
$lang->menu->qa = '测试视图|qa|index';
|
||||
$lang->menu->doc = '文档视图|doc|index';
|
||||
$lang->menu->company = '组织视图|company|index';
|
||||
$lang->menu->admin = '后台管理|admin|index';
|
||||
|
||||
/* 查询条中可以选择的对象列表。*/
|
||||
$lang->searchObjects['bug'] = 'B:Bug';
|
||||
$lang->searchObjects['story'] = 'S:需求';
|
||||
$lang->searchObjects['task'] = 'T:任务';
|
||||
$lang->searchObjects['testcase'] = 'C:用例';
|
||||
$lang->searchObjects['project'] = 'P:项目';
|
||||
$lang->searchObjects['product'] = 'P:产品';
|
||||
$lang->searchObjects['user'] = 'U:用户';
|
||||
$lang->searchObjects['build'] = 'B:Build';
|
||||
$lang->searchObjects['release'] = 'R:发布';
|
||||
$lang->searchObjects['productplan'] = 'P:产品计划';
|
||||
$lang->searchObjects['testtask'] = 'T:测试任务';
|
||||
$lang->searchObjects['doc'] = 'D:文档';
|
||||
$lang->searchTips = '输入编号';
|
||||
|
||||
/* 导出文件的类型列表。*/
|
||||
$lang->exportFileTypeList['csv'] = 'csv';
|
||||
$lang->exportFileTypeList['xml'] = 'xml';
|
||||
$lang->exportFileTypeList['html'] = 'html';
|
||||
|
||||
/* 风格列表。*/
|
||||
$lang->themes['default'] = '默认';
|
||||
$lang->themes['green'] = '绿色';
|
||||
$lang->themes['red'] = '红色';
|
||||
$lang->themes['classblue'] = '经典蓝';
|
||||
|
||||
/* 首页菜单设置。*/
|
||||
$lang->index->menu->product = '浏览产品|product|browse';
|
||||
$lang->index->menu->project = '浏览项目|project|browse';
|
||||
|
||||
/* 我的地盘菜单设置。*/
|
||||
$lang->my->menu->account = '<span id="mybg"> </span>%s' . $lang->arrow;
|
||||
$lang->my->menu->index = '首页|my|index';
|
||||
$lang->my->menu->todo = array('link' => '我的TODO|my|todo|', 'subModule' => 'todo');
|
||||
$lang->my->menu->task = '我的任务|my|task|';
|
||||
$lang->my->menu->bug = '我的Bug|my|bug|';
|
||||
$lang->my->menu->testtask = '我的测试|my|testtask|';
|
||||
$lang->my->menu->story = '我的需求|my|story|';
|
||||
$lang->my->menu->myProject = '我的项目|my|project|';
|
||||
$lang->my->menu->dynamic = '我的动态|my|dynamic|';
|
||||
$lang->my->menu->profile = array('link' => '我的档案|my|profile|', 'alias' => 'editprofile');
|
||||
$lang->todo->menu = $lang->my->menu;
|
||||
|
||||
/* 产品视图设置。*/
|
||||
$lang->product->menu->list = '%s';
|
||||
$lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
|
||||
$lang->product->menu->dynamic = '动态|product|dynamic|productID=%s';
|
||||
$lang->product->menu->plan = array('link' => '计划|productplan|browse|productID=%s', 'subModule' => 'productplan');
|
||||
$lang->product->menu->release = array('link' => '发布|release|browse|productID=%s', 'subModule' => 'release');
|
||||
$lang->product->menu->roadmap = '路线图|product|roadmap|productID=%s';
|
||||
$lang->product->menu->doc = array('link' => '文档|product|doc|productID=%s', 'subModule' => 'doc');
|
||||
$lang->product->menu->view = '概况|product|view|productID=%s';
|
||||
$lang->product->menu->edit = '编辑|product|edit|productID=%s';
|
||||
$lang->product->menu->delete = array('link' => '删除|product|delete|productID=%s', 'target' => 'hiddenwin');
|
||||
$lang->product->menu->module = '模块|tree|browse|productID=%s&view=story';
|
||||
$lang->product->menu->order = '排序|product|order|productID=%s';
|
||||
$lang->product->menu->create = array('link' => '<span class="icon-add1"> </span>新增产品|product|create', 'float' => 'right');
|
||||
$lang->product->menu->project = array('link' => '<span class="icon-title"> </span>项目列表|product|project|status=all&productID=%s', 'float' => 'right');
|
||||
$lang->product->menu->all = array('link' => '<span class="icon-all"> </span>所有产品|product|index|locate=false', 'float' => 'right');
|
||||
$lang->story->menu = $lang->product->menu;
|
||||
$lang->productplan->menu = $lang->product->menu;
|
||||
$lang->release->menu = $lang->product->menu;
|
||||
|
||||
/* 项目视图菜单设置。*/
|
||||
$lang->project->menu->list = '%s';
|
||||
$lang->project->menu->task = array('link' => '任务|project|task|projectID=%s', 'subModule' => 'task', 'alias' => 'grouptask,importtask');
|
||||
$lang->project->menu->story = array('link' => '需求|project|story|projectID=%s');
|
||||
$lang->project->menu->bug = 'Bug|project|bug|projectID=%s';
|
||||
$lang->project->menu->dynamic = '动态|project|dynamic|projectID=%s';
|
||||
$lang->project->menu->build = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'build');
|
||||
$lang->project->menu->testtask = '测试申请|project|testtask|projectID=%s';
|
||||
$lang->project->menu->burn = '燃尽图|project|burn|projectID=%s';
|
||||
$lang->project->menu->team = array('link' => '团队|project|team|projectID=%s', 'alias' => 'managemembers');
|
||||
$lang->project->menu->doc = array('link' => '文档|project|doc|porjectID=%s', 'subModule' => 'doc');
|
||||
$lang->project->menu->product = '产品|project|manageproducts|projectID=%s';
|
||||
$lang->project->menu->linkstory = array('link' => '关联需求|project|linkstory|projectID=%s');
|
||||
$lang->project->menu->view = '概况|project|view|projectID=%s';
|
||||
$lang->project->menu->edit = '编辑|project|edit|projectID=%s';
|
||||
$lang->project->menu->delete = array('link' => '删除|project|delete|projectID=%s', 'target' => 'hiddenwin');
|
||||
$lang->project->menu->order = '排序|project|order|projectID=%s';
|
||||
$lang->project->menu->create = array('link' => '<span class="icon-add1"> </span>新增项目|project|create', 'float' => 'right');
|
||||
$lang->project->menu->copy = array('link' => '<span class="icon-copy"> </span>复制项目|project|create|projectID=©ProjectID=%s', 'float' => 'right');
|
||||
$lang->project->menu->all = array('link' => '<span class="icon-all"> </span>所有项目|project|index|locate=false', 'float' => 'right');
|
||||
$lang->task->menu = $lang->project->menu;
|
||||
$lang->build->menu = $lang->project->menu;
|
||||
|
||||
/* QA视图菜单设置。*/
|
||||
$lang->bug->menu->product = '%s';
|
||||
$lang->bug->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s', 'alias' => 'view,create,edit,resolve,close,activate,report', 'subModule' => 'tree');
|
||||
$lang->bug->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,edit');
|
||||
$lang->bug->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s');
|
||||
|
||||
$lang->testcase->menu->product = '%s';
|
||||
$lang->testcase->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s');
|
||||
$lang->testcase->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit', 'subModule' => 'tree');
|
||||
$lang->testcase->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s');
|
||||
|
||||
$lang->testtask->menu->product = '%s';
|
||||
$lang->testtask->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s');
|
||||
$lang->testtask->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s');
|
||||
$lang->testtask->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases');
|
||||
|
||||
/* 文档视图菜单设置。*/
|
||||
$lang->doc->menu->list = '%s';
|
||||
$lang->doc->menu->browse = array('link' => '文档列表|doc|browse|libID=%s');
|
||||
$lang->doc->menu->edit = '编辑文档库|doc|editLib|libID=%s';
|
||||
$lang->doc->menu->module = '维护模块|tree|browse|libID=%s&viewType=doc';
|
||||
$lang->doc->menu->delete = array('link' => '删除文档库|doc|deleteLib|libID=%s', 'target' => 'hiddenwin');
|
||||
$lang->doc->menu->create = array('link' => '<span class="icon-add1"> </span>新增文档库|doc|createLib', 'float' => 'right');
|
||||
|
||||
/* 组织结构视图菜单设置。*/
|
||||
$lang->company->menu->name = '%s' . $lang->arrow;
|
||||
$lang->company->menu->browseUser = array('link' => '用户列表|company|browse', 'subModule' => 'user');
|
||||
$lang->company->menu->dept = array('link' => '部门维护|dept|browse', 'subModule' => 'dept');
|
||||
$lang->company->menu->browseGroup = array('link' => '权限分组|group|browse', 'subModule' => 'group');
|
||||
$lang->company->menu->edit = array('link' => '公司管理|company|edit');
|
||||
$lang->company->menu->dynamic = '组织动态|company|dynamic|';
|
||||
$lang->company->menu->addGroup = array('link' => '<span class="icon-add1"> </span>添加分组|group|create', 'float' => 'right');
|
||||
$lang->company->menu->addUser = array('link' => '<span class="icon-add1"> </span>添加用户|user|create|dept=%s', 'subModule' => 'user', 'float' => 'right');
|
||||
$lang->dept->menu = $lang->company->menu;
|
||||
$lang->group->menu = $lang->company->menu;
|
||||
|
||||
/* 用户信息菜单设置。*/
|
||||
$lang->user->menu->account = '%s' . $lang->arrow;
|
||||
$lang->user->menu->todo = array('link' => 'TODO列表|user|todo|account=%s', 'subModule' => 'todo');
|
||||
$lang->user->menu->task = '任务列表|user|task|account=%s';
|
||||
$lang->user->menu->bug = 'Bug列表|user|bug|account=%s';
|
||||
$lang->user->menu->dynamic = '用户动态|user|dynamic|type=today&account=%s';
|
||||
$lang->user->menu->projectList = '项目列表|user|project|account=%s';
|
||||
$lang->user->menu->profile = array('link' => '用户信息|user|profile|account=%s', 'alias' => 'edit');
|
||||
$lang->user->menu->browse = array('link' => '<span class="icon-title"> </span>用户管理|company|browse|', 'float' => 'right');
|
||||
|
||||
/* 后台管理菜单设置。*/
|
||||
$lang->admin->menu->index = array('link' => '首页|admin|index', 'subModule' => 'admin');
|
||||
$lang->admin->menu->extension = array('link' => '插件管理|extension|browse', 'subModule' => 'extension');
|
||||
$lang->admin->menu->editor = array('link' => '扩展编辑器|editor|index', 'subModule' => 'editor');
|
||||
$lang->admin->menu->mail = array('link' => 'Email配置|mail|set', 'subModule' => 'mail');
|
||||
$lang->admin->menu->convert = array('link' => '从其他系统导入|convert|index', 'subModule' => 'convert');
|
||||
$lang->admin->menu->trashes = array('link' => '回收站|action|trash', 'subModule' => 'action');
|
||||
$lang->convert->menu = $lang->admin->menu;
|
||||
$lang->upgrade->menu = $lang->admin->menu;
|
||||
$lang->action->menu = $lang->admin->menu;
|
||||
$lang->extension->menu = $lang->admin->menu;
|
||||
$lang->editor->menu = $lang->admin->menu;
|
||||
$lang->mail->menu = $lang->admin->menu;
|
||||
|
||||
/*菜单设置:分组设置。*/
|
||||
$lang->menugroup->release = 'product';
|
||||
$lang->menugroup->story = 'product';
|
||||
$lang->menugroup->productplan = 'product';
|
||||
$lang->menugroup->task = 'project';
|
||||
$lang->menugroup->build = 'project';
|
||||
$lang->menugroup->convert = 'admin';
|
||||
$lang->menugroup->upgrade = 'admin';
|
||||
$lang->menugroup->user = 'company';
|
||||
$lang->menugroup->group = 'company';
|
||||
$lang->menugroup->bug = 'qa';
|
||||
$lang->menugroup->testcase = 'qa';
|
||||
$lang->menugroup->testtask = 'qa';
|
||||
$lang->menugroup->people = 'company';
|
||||
$lang->menugroup->dept = 'company';
|
||||
$lang->menugroup->todo = 'my';
|
||||
$lang->menugroup->action = 'admin';
|
||||
$lang->menugroup->extension = 'admin';
|
||||
$lang->menugroup->editor = 'admin';
|
||||
$lang->menugroup->mail = 'admin';
|
||||
|
||||
/* 错误提示信息。*/
|
||||
$lang->error->companyNotFound = "您访问的域名 %s 没有对应的公司。";
|
||||
$lang->error->length = array("『%s』长度错误,应当为『%s』", "『%s』长度应当不超过『%s』,且不小于『%s』。");
|
||||
$lang->error->reg = "『%s』不符合格式,应当为:『%s』。";
|
||||
$lang->error->unique = "『%s』已经有『%s』这条记录了。";
|
||||
$lang->error->gt = "『%s』应当大于『%s』。";
|
||||
$lang->error->notempty = "『%s』不能为空。";
|
||||
$lang->error->empty = "『%s』必须为空。";
|
||||
$lang->error->equal = "『%s』必须为『%s』。";
|
||||
$lang->error->int = array("『%s』应当是数字。", "『%s』应当介于『%s-%s』之间。");
|
||||
$lang->error->float = "『%s』应当是数字,可以是小数。";
|
||||
$lang->error->email = "『%s』应当为合法的EMAIL。";
|
||||
$lang->error->date = "『%s』应当为合法的日期。";
|
||||
$lang->error->account = "『%s』应当为合法的用户名。";
|
||||
$lang->error->passwordsame = "两次密码应当相等。";
|
||||
$lang->error->passwordrule = "密码应该符合规则,长度至少为六位。";
|
||||
$lang->error->accessDenied = '您没有访问权限';
|
||||
|
||||
/* 分页信息。*/
|
||||
$lang->pager->noRecord = "暂时没有记录";
|
||||
$lang->pager->digest = "共<strong>%s</strong>条记录,每页 <strong>%s</strong>条,页面:<strong>%s/%s</strong> ";
|
||||
$lang->pager->first = "首页";
|
||||
$lang->pager->pre = "上页";
|
||||
$lang->pager->next = "下页";
|
||||
$lang->pager->last = "末页";
|
||||
$lang->pager->locate = "GO!";
|
||||
|
||||
$lang->zentaoSite = "官方网站";
|
||||
$lang->chinaScrum = "<a href='http://www.zentao.net/goto.php?item=chinascrum' target='_blank'>Scrum社区</a> ";
|
||||
$lang->agileTraining = "<a href='http://www.zentao.net/goto.php?item=agiletrain' target='_blank'>培训</a> ";
|
||||
$lang->donate = "<a href='http://www.zentao.net/goto.php?item=donate' target='_blank'>捐助禅道</a> ";
|
||||
$lang->zentaoKeywords = "开源项目管理软件,项目管理,项目管理软件,pmp,pms,php框架,国产php框架,scrum工具,scrum管理工具,scrum管理软件,敏捷项目管理,禅道";
|
||||
$lang->zentaoDESC = "禅道项目管理软件(ZenTaoPMS)是一款国产的,基于LGPL协议,开源免费的项目管理软件(工具、系统),同时也是一款scrum管理工具。
|
||||
它集产品管理、项目管理、测试管理于一体,同时还包含了事务管理、组织管理等诸多功能,是中小型企业项目管理的首选。禅道项目管理软件使用PHP + MySQL开发,
|
||||
基于自主的PHP开发框架──ZenTaoPHP而成。第三方开发者或者企业可以非常方便的开发插件或者进行定制。禅道在手,项目无忧!";
|
||||
|
||||
/* 时间格式设置。*/
|
||||
define('DT_DATETIME1', 'Y-m-d H:i:s');
|
||||
define('DT_DATETIME2', 'y-m-d H:i');
|
||||
define('DT_MONTHTIME1', 'n/d H:i');
|
||||
define('DT_MONTHTIME2', 'n月d日 H:i');
|
||||
define('DT_DATE1', 'Y-m-d');
|
||||
define('DT_DATE2', 'Ymd');
|
||||
define('DT_DATE3', 'Y年m月d日');
|
||||
define('DT_DATE4', 'n月j日');
|
||||
define('DT_TIME1', 'H:i:s');
|
||||
define('DT_TIME2', 'H:i');
|
||||
<?php
|
||||
/**
|
||||
* The common simplified chinese file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->arrow = '<span class="icon-arrow"> </span>';
|
||||
$lang->colon = '::';
|
||||
$lang->comma = ',';
|
||||
$lang->dot = '。';
|
||||
$lang->at = ' 于 ';
|
||||
$lang->downArrow = '↓';
|
||||
|
||||
$lang->ZenTaoPMS = '禅道管理';
|
||||
$lang->welcome = "欢迎使用『%s』{$lang->colon} {$lang->ZenTaoPMS}";
|
||||
$lang->myControl = "我的地盘";
|
||||
$lang->currentPos = '当前位置:';
|
||||
$lang->logout = '退出';
|
||||
$lang->login = '登录';
|
||||
$lang->aboutZenTao = '关于';
|
||||
$lang->todayIs = '今天是%s,';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>时间: %s 毫秒, 内存: %s KB, 查询: %s. </div></div>";
|
||||
|
||||
$lang->reset = '重填';
|
||||
$lang->edit = '编辑';
|
||||
$lang->copy = '复制';
|
||||
$lang->delete = '删除';
|
||||
$lang->close = '关闭';
|
||||
$lang->link = '关联';
|
||||
$lang->unlink = '移除';
|
||||
$lang->import = '导入';
|
||||
$lang->export = '导出';
|
||||
$lang->setFileName = '文件名:';
|
||||
$lang->activate = '激活';
|
||||
$lang->submitting = '稍候...';
|
||||
$lang->save = '保存';
|
||||
$lang->confirm = '确认';
|
||||
$lang->preview = '查看';
|
||||
$lang->goback = '返回';
|
||||
$lang->go = 'GO';
|
||||
$lang->more = '更多';
|
||||
|
||||
$lang->actions = '操作';
|
||||
$lang->comment = '备注';
|
||||
$lang->history = '历史记录';
|
||||
$lang->attatch = '附件';
|
||||
$lang->reverse = '[切换顺序]';
|
||||
$lang->switchDisplay= '[切换显示]';
|
||||
$lang->switchHelp = '切换帮助';
|
||||
$lang->addFiles = '上传了附件 ';
|
||||
$lang->files = '附件 ';
|
||||
$lang->unfold = '+';
|
||||
$lang->fold = '-';
|
||||
|
||||
$lang->selectAll = '全选';
|
||||
$lang->notFound = '抱歉,您访问的对象并不存在!';
|
||||
$lang->showAll = '++ 全部显示 ++';
|
||||
$lang->hideClosed = '-- 隐藏已结束 --';
|
||||
|
||||
$lang->future = '未来';
|
||||
$lang->year = '年';
|
||||
$lang->workingHour = '工时';
|
||||
|
||||
$lang->idAB = 'ID';
|
||||
$lang->priAB = 'P';
|
||||
$lang->statusAB = '状态';
|
||||
$lang->openedByAB = '创建';
|
||||
$lang->assignedToAB = '指派';
|
||||
$lang->typeAB = '类型';
|
||||
|
||||
$lang->common->common = '公有模块';
|
||||
|
||||
/* 主导航菜单。*/
|
||||
$lang->menu->my = '<span id="mainbg"> </span>我的地盘|my|index';
|
||||
$lang->menu->product = '产品视图|product|index';
|
||||
$lang->menu->project = '项目视图|project|index';
|
||||
$lang->menu->qa = '测试视图|qa|index';
|
||||
$lang->menu->doc = '文档视图|doc|index';
|
||||
$lang->menu->company = '组织视图|company|index';
|
||||
$lang->menu->admin = '后台管理|admin|index';
|
||||
|
||||
/* 查询条中可以选择的对象列表。*/
|
||||
$lang->searchObjects['bug'] = 'B:Bug';
|
||||
$lang->searchObjects['story'] = 'S:需求';
|
||||
$lang->searchObjects['task'] = 'T:任务';
|
||||
$lang->searchObjects['testcase'] = 'C:用例';
|
||||
$lang->searchObjects['project'] = 'P:项目';
|
||||
$lang->searchObjects['product'] = 'P:产品';
|
||||
$lang->searchObjects['user'] = 'U:用户';
|
||||
$lang->searchObjects['build'] = 'B:Build';
|
||||
$lang->searchObjects['release'] = 'R:发布';
|
||||
$lang->searchObjects['productplan'] = 'P:产品计划';
|
||||
$lang->searchObjects['testtask'] = 'T:测试任务';
|
||||
$lang->searchObjects['doc'] = 'D:文档';
|
||||
$lang->searchTips = '输入编号';
|
||||
|
||||
/* 导出文件的类型列表。*/
|
||||
$lang->exportFileTypeList['csv'] = 'csv';
|
||||
$lang->exportFileTypeList['xml'] = 'xml';
|
||||
$lang->exportFileTypeList['html'] = 'html';
|
||||
|
||||
/* 风格列表。*/
|
||||
$lang->themes['default'] = '默认';
|
||||
$lang->themes['green'] = '绿色';
|
||||
$lang->themes['red'] = '红色';
|
||||
$lang->themes['classblue'] = '经典蓝';
|
||||
|
||||
/* 首页菜单设置。*/
|
||||
$lang->index->menu->product = '浏览产品|product|browse';
|
||||
$lang->index->menu->project = '浏览项目|project|browse';
|
||||
|
||||
/* 我的地盘菜单设置。*/
|
||||
$lang->my->menu->account = '<span id="mybg"> </span>%s' . $lang->arrow;
|
||||
$lang->my->menu->index = '首页|my|index';
|
||||
$lang->my->menu->todo = array('link' => '我的TODO|my|todo|', 'subModule' => 'todo');
|
||||
$lang->my->menu->task = '我的任务|my|task|';
|
||||
$lang->my->menu->bug = '我的Bug|my|bug|';
|
||||
$lang->my->menu->testtask = '我的测试|my|testtask|';
|
||||
$lang->my->menu->story = '我的需求|my|story|';
|
||||
$lang->my->menu->myProject = '我的项目|my|project|';
|
||||
$lang->my->menu->dynamic = '我的动态|my|dynamic|';
|
||||
$lang->my->menu->profile = array('link' => '我的档案|my|profile|', 'alias' => 'editprofile');
|
||||
$lang->todo->menu = $lang->my->menu;
|
||||
|
||||
/* 产品视图设置。*/
|
||||
$lang->product->menu->list = '%s';
|
||||
$lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
|
||||
$lang->product->menu->dynamic = '动态|product|dynamic|productID=%s';
|
||||
$lang->product->menu->plan = array('link' => '计划|productplan|browse|productID=%s', 'subModule' => 'productplan');
|
||||
$lang->product->menu->release = array('link' => '发布|release|browse|productID=%s', 'subModule' => 'release');
|
||||
$lang->product->menu->roadmap = '路线图|product|roadmap|productID=%s';
|
||||
$lang->product->menu->doc = array('link' => '文档|product|doc|productID=%s', 'subModule' => 'doc');
|
||||
$lang->product->menu->view = '概况|product|view|productID=%s';
|
||||
$lang->product->menu->edit = '编辑|product|edit|productID=%s';
|
||||
$lang->product->menu->delete = array('link' => '删除|product|delete|productID=%s', 'target' => 'hiddenwin');
|
||||
$lang->product->menu->module = '模块|tree|browse|productID=%s&view=story';
|
||||
$lang->product->menu->order = '排序|product|order|productID=%s';
|
||||
$lang->product->menu->create = array('link' => '<span class="icon-add1"> </span>新增产品|product|create', 'float' => 'right');
|
||||
$lang->product->menu->project = array('link' => '<span class="icon-title"> </span>项目列表|product|project|status=all&productID=%s', 'float' => 'right');
|
||||
$lang->product->menu->all = array('link' => '<span class="icon-all"> </span>所有产品|product|index|locate=false', 'float' => 'right');
|
||||
$lang->story->menu = $lang->product->menu;
|
||||
$lang->productplan->menu = $lang->product->menu;
|
||||
$lang->release->menu = $lang->product->menu;
|
||||
|
||||
/* 项目视图菜单设置。*/
|
||||
$lang->project->menu->list = '%s';
|
||||
$lang->project->menu->task = array('link' => '任务|project|task|projectID=%s', 'subModule' => 'task', 'alias' => 'grouptask,importtask');
|
||||
$lang->project->menu->story = array('link' => '需求|project|story|projectID=%s');
|
||||
$lang->project->menu->bug = 'Bug|project|bug|projectID=%s';
|
||||
$lang->project->menu->dynamic = '动态|project|dynamic|projectID=%s';
|
||||
$lang->project->menu->build = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'build');
|
||||
$lang->project->menu->testtask = '测试申请|project|testtask|projectID=%s';
|
||||
$lang->project->menu->burn = '燃尽图|project|burn|projectID=%s';
|
||||
$lang->project->menu->team = array('link' => '团队|project|team|projectID=%s', 'alias' => 'managemembers');
|
||||
$lang->project->menu->doc = array('link' => '文档|project|doc|porjectID=%s', 'subModule' => 'doc');
|
||||
$lang->project->menu->product = '产品|project|manageproducts|projectID=%s';
|
||||
$lang->project->menu->linkstory = array('link' => '关联需求|project|linkstory|projectID=%s');
|
||||
$lang->project->menu->view = '概况|project|view|projectID=%s';
|
||||
$lang->project->menu->edit = '编辑|project|edit|projectID=%s';
|
||||
$lang->project->menu->delete = array('link' => '删除|project|delete|projectID=%s', 'target' => 'hiddenwin');
|
||||
$lang->project->menu->order = '排序|project|order|projectID=%s';
|
||||
$lang->project->menu->create = array('link' => '<span class="icon-add1"> </span>新增项目|project|create', 'float' => 'right');
|
||||
$lang->project->menu->copy = array('link' => '<span class="icon-copy"> </span>复制项目|project|create|projectID=©ProjectID=%s', 'float' => 'right');
|
||||
$lang->project->menu->all = array('link' => '<span class="icon-all"> </span>所有项目|project|index|locate=false', 'float' => 'right');
|
||||
$lang->task->menu = $lang->project->menu;
|
||||
$lang->build->menu = $lang->project->menu;
|
||||
|
||||
/* QA视图菜单设置。*/
|
||||
$lang->bug->menu->product = '%s';
|
||||
$lang->bug->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s', 'alias' => 'view,create,edit,resolve,close,activate,report', 'subModule' => 'tree');
|
||||
$lang->bug->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,edit');
|
||||
$lang->bug->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s');
|
||||
|
||||
$lang->testcase->menu->product = '%s';
|
||||
$lang->testcase->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s');
|
||||
$lang->testcase->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit', 'subModule' => 'tree');
|
||||
$lang->testcase->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s');
|
||||
|
||||
$lang->testtask->menu->product = '%s';
|
||||
$lang->testtask->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s');
|
||||
$lang->testtask->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s');
|
||||
$lang->testtask->menu->testtask = array('link' => '测试任务|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases');
|
||||
|
||||
/* 文档视图菜单设置。*/
|
||||
$lang->doc->menu->list = '%s';
|
||||
$lang->doc->menu->browse = array('link' => '文档列表|doc|browse|libID=%s');
|
||||
$lang->doc->menu->edit = '编辑文档库|doc|editLib|libID=%s';
|
||||
$lang->doc->menu->module = '维护模块|tree|browse|libID=%s&viewType=doc';
|
||||
$lang->doc->menu->delete = array('link' => '删除文档库|doc|deleteLib|libID=%s', 'target' => 'hiddenwin');
|
||||
$lang->doc->menu->create = array('link' => '<span class="icon-add1"> </span>新增文档库|doc|createLib', 'float' => 'right');
|
||||
|
||||
/* 组织结构视图菜单设置。*/
|
||||
$lang->company->menu->name = '%s' . $lang->arrow;
|
||||
$lang->company->menu->browseUser = array('link' => '用户列表|company|browse', 'subModule' => 'user');
|
||||
$lang->company->menu->dept = array('link' => '部门维护|dept|browse', 'subModule' => 'dept');
|
||||
$lang->company->menu->browseGroup = array('link' => '权限分组|group|browse', 'subModule' => 'group');
|
||||
$lang->company->menu->edit = array('link' => '公司管理|company|edit');
|
||||
$lang->company->menu->dynamic = '组织动态|company|dynamic|';
|
||||
$lang->company->menu->addGroup = array('link' => '<span class="icon-add1"> </span>添加分组|group|create', 'float' => 'right');
|
||||
$lang->company->menu->addUser = array('link' => '<span class="icon-add1"> </span>添加用户|user|create|dept=%s', 'subModule' => 'user', 'float' => 'right');
|
||||
$lang->dept->menu = $lang->company->menu;
|
||||
$lang->group->menu = $lang->company->menu;
|
||||
|
||||
/* 用户信息菜单设置。*/
|
||||
$lang->user->menu->account = '%s' . $lang->arrow;
|
||||
$lang->user->menu->todo = array('link' => 'TODO列表|user|todo|account=%s', 'subModule' => 'todo');
|
||||
$lang->user->menu->task = '任务列表|user|task|account=%s';
|
||||
$lang->user->menu->bug = 'Bug列表|user|bug|account=%s';
|
||||
$lang->user->menu->dynamic = '用户动态|user|dynamic|type=today&account=%s';
|
||||
$lang->user->menu->projectList = '项目列表|user|project|account=%s';
|
||||
$lang->user->menu->profile = array('link' => '用户信息|user|profile|account=%s', 'alias' => 'edit');
|
||||
$lang->user->menu->browse = array('link' => '<span class="icon-title"> </span>用户管理|company|browse|', 'float' => 'right');
|
||||
|
||||
/* 后台管理菜单设置。*/
|
||||
$lang->admin->menu->index = array('link' => '首页|admin|index', 'subModule' => 'admin');
|
||||
$lang->admin->menu->extension = array('link' => '插件管理|extension|browse', 'subModule' => 'extension');
|
||||
$lang->admin->menu->editor = array('link' => '扩展编辑器|editor|index', 'subModule' => 'editor');
|
||||
$lang->admin->menu->mail = array('link' => 'Email配置|mail|set', 'subModule' => 'mail');
|
||||
$lang->admin->menu->convert = array('link' => '从其他系统导入|convert|index', 'subModule' => 'convert');
|
||||
$lang->admin->menu->trashes = array('link' => '回收站|action|trash', 'subModule' => 'action');
|
||||
$lang->convert->menu = $lang->admin->menu;
|
||||
$lang->upgrade->menu = $lang->admin->menu;
|
||||
$lang->action->menu = $lang->admin->menu;
|
||||
$lang->extension->menu = $lang->admin->menu;
|
||||
$lang->editor->menu = $lang->admin->menu;
|
||||
$lang->mail->menu = $lang->admin->menu;
|
||||
|
||||
/*菜单设置:分组设置。*/
|
||||
$lang->menugroup->release = 'product';
|
||||
$lang->menugroup->story = 'product';
|
||||
$lang->menugroup->productplan = 'product';
|
||||
$lang->menugroup->task = 'project';
|
||||
$lang->menugroup->build = 'project';
|
||||
$lang->menugroup->convert = 'admin';
|
||||
$lang->menugroup->upgrade = 'admin';
|
||||
$lang->menugroup->user = 'company';
|
||||
$lang->menugroup->group = 'company';
|
||||
$lang->menugroup->bug = 'qa';
|
||||
$lang->menugroup->testcase = 'qa';
|
||||
$lang->menugroup->testtask = 'qa';
|
||||
$lang->menugroup->people = 'company';
|
||||
$lang->menugroup->dept = 'company';
|
||||
$lang->menugroup->todo = 'my';
|
||||
$lang->menugroup->action = 'admin';
|
||||
$lang->menugroup->extension = 'admin';
|
||||
$lang->menugroup->editor = 'admin';
|
||||
$lang->menugroup->mail = 'admin';
|
||||
|
||||
/* 错误提示信息。*/
|
||||
$lang->error->companyNotFound = "您访问的域名 %s 没有对应的公司。";
|
||||
$lang->error->length = array("『%s』长度错误,应当为『%s』", "『%s』长度应当不超过『%s』,且不小于『%s』。");
|
||||
$lang->error->reg = "『%s』不符合格式,应当为:『%s』。";
|
||||
$lang->error->unique = "『%s』已经有『%s』这条记录了。";
|
||||
$lang->error->gt = "『%s』应当大于『%s』。";
|
||||
$lang->error->notempty = "『%s』不能为空。";
|
||||
$lang->error->empty = "『%s』必须为空。";
|
||||
$lang->error->equal = "『%s』必须为『%s』。";
|
||||
$lang->error->int = array("『%s』应当是数字。", "『%s』应当介于『%s-%s』之间。");
|
||||
$lang->error->float = "『%s』应当是数字,可以是小数。";
|
||||
$lang->error->email = "『%s』应当为合法的EMAIL。";
|
||||
$lang->error->date = "『%s』应当为合法的日期。";
|
||||
$lang->error->account = "『%s』应当为合法的用户名。";
|
||||
$lang->error->passwordsame = "两次密码应当相等。";
|
||||
$lang->error->passwordrule = "密码应该符合规则,长度至少为六位。";
|
||||
$lang->error->accessDenied = '您没有访问权限';
|
||||
|
||||
/* 分页信息。*/
|
||||
$lang->pager->noRecord = "暂时没有记录";
|
||||
$lang->pager->digest = "共<strong>%s</strong>条记录,每页 <strong>%s</strong>条,页面:<strong>%s/%s</strong> ";
|
||||
$lang->pager->first = "首页";
|
||||
$lang->pager->pre = "上页";
|
||||
$lang->pager->next = "下页";
|
||||
$lang->pager->last = "末页";
|
||||
$lang->pager->locate = "GO!";
|
||||
|
||||
$lang->zentaoSite = "官方网站";
|
||||
$lang->chinaScrum = "<a href='http://www.zentao.net/goto.php?item=chinascrum' target='_blank'>Scrum社区</a> ";
|
||||
$lang->agileTraining = "<a href='http://www.zentao.net/goto.php?item=agiletrain' target='_blank'>培训</a> ";
|
||||
$lang->donate = "<a href='http://www.zentao.net/goto.php?item=donate' target='_blank'>捐助禅道</a> ";
|
||||
$lang->zentaoKeywords = "开源项目管理软件,项目管理,项目管理软件,pmp,pms,php框架,国产php框架,scrum工具,scrum管理工具,scrum管理软件,敏捷项目管理,禅道";
|
||||
$lang->zentaoDESC = "禅道项目管理软件(ZenTaoPMS)是一款国产的,基于LGPL协议,开源免费的项目管理软件(工具、系统),同时也是一款scrum管理工具。
|
||||
它集产品管理、项目管理、测试管理于一体,同时还包含了事务管理、组织管理等诸多功能,是中小型企业项目管理的首选。禅道项目管理软件使用PHP + MySQL开发,
|
||||
基于自主的PHP开发框架──ZenTaoPHP而成。第三方开发者或者企业可以非常方便的开发插件或者进行定制。禅道在手,项目无忧!";
|
||||
|
||||
/* 时间格式设置。*/
|
||||
define('DT_DATETIME1', 'Y-m-d H:i:s');
|
||||
define('DT_DATETIME2', 'y-m-d H:i');
|
||||
define('DT_MONTHTIME1', 'n/d H:i');
|
||||
define('DT_MONTHTIME2', 'n月d日 H:i');
|
||||
define('DT_DATE1', 'Y-m-d');
|
||||
define('DT_DATE2', 'Ymd');
|
||||
define('DT_DATE3', 'Y年m月d日');
|
||||
define('DT_DATE4', 'n月j日');
|
||||
define('DT_TIME1', 'H:i:s');
|
||||
define('DT_TIME2', 'H:i');
|
||||
|
||||
@@ -1,300 +1,300 @@
|
||||
<?php
|
||||
/**
|
||||
* The common simplified chinese file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青島易軟天創網絡科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id: zh-tw.php 2686 2012-03-02 05:45:14Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->arrow = '<span class="icon-arrow"> </span>';
|
||||
$lang->colon = '::';
|
||||
$lang->comma = ',';
|
||||
$lang->dot = '。';
|
||||
$lang->at = ' 于 ';
|
||||
$lang->downArrow = '↓';
|
||||
|
||||
$lang->ZenTaoPMS = '禪道管理';
|
||||
$lang->welcome = "歡迎使用『%s』{$lang->colon} {$lang->ZenTaoPMS}";
|
||||
$lang->myControl = "我的地盤";
|
||||
$lang->currentPos = '當前位置:';
|
||||
$lang->logout = '退出';
|
||||
$lang->login = '登錄';
|
||||
$lang->aboutZenTao = '關於';
|
||||
$lang->todayIs = '今天是%s,';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>時間: %s 毫秒, 內存: %s KB, 查詢: %s. </div></div>";
|
||||
|
||||
$lang->reset = '重填';
|
||||
$lang->edit = '編輯';
|
||||
$lang->copy = '複製';
|
||||
$lang->delete = '刪除';
|
||||
$lang->close = '關閉';
|
||||
$lang->link = '關聯';
|
||||
$lang->unlink = '移除';
|
||||
$lang->import = '導入';
|
||||
$lang->export = '導出';
|
||||
$lang->setFileName = '檔案名:';
|
||||
$lang->activate = '激活';
|
||||
$lang->submitting = '稍候...';
|
||||
$lang->save = '保存';
|
||||
$lang->confirm = '確認';
|
||||
$lang->preview = '查看';
|
||||
$lang->goback = '返回';
|
||||
$lang->go = 'GO';
|
||||
$lang->more = '更多';
|
||||
|
||||
$lang->actions = '操作';
|
||||
$lang->comment = '備註';
|
||||
$lang->history = '歷史記錄';
|
||||
$lang->attatch = '附件';
|
||||
$lang->reverse = '[切換順序]';
|
||||
$lang->switchDisplay= '[切換顯示]';
|
||||
$lang->switchHelp = '切換幫助';
|
||||
$lang->addFiles = '上傳了附件 ';
|
||||
$lang->files = '附件 ';
|
||||
$lang->unfold = '+';
|
||||
$lang->fold = '-';
|
||||
|
||||
$lang->selectAll = '全選';
|
||||
$lang->notFound = '抱歉,您訪問的對象並不存在!';
|
||||
$lang->showAll = '++ 全部顯示 ++';
|
||||
$lang->hideClosed = '-- 隱藏已結束 --';
|
||||
|
||||
$lang->future = '未來';
|
||||
$lang->year = '年';
|
||||
$lang->workingHour = '工時';
|
||||
|
||||
$lang->idAB = 'ID';
|
||||
$lang->priAB = 'P';
|
||||
$lang->statusAB = '狀態';
|
||||
$lang->openedByAB = '創建';
|
||||
$lang->assignedToAB = '指派';
|
||||
$lang->typeAB = '類型';
|
||||
|
||||
$lang->common->common = '公有模組';
|
||||
|
||||
/* 主導航菜單。*/
|
||||
$lang->menu->my = '<span id="mainbg"> </span>我的地盤|my|index';
|
||||
$lang->menu->product = '產品視圖|product|index';
|
||||
$lang->menu->project = '項目視圖|project|index';
|
||||
$lang->menu->qa = '測試視圖|qa|index';
|
||||
$lang->menu->doc = '文檔視圖|doc|index';
|
||||
$lang->menu->company = '組織視圖|company|index';
|
||||
$lang->menu->admin = '後台管理|admin|index';
|
||||
|
||||
/* 查詢條中可以選擇的對象列表。*/
|
||||
$lang->searchObjects['bug'] = 'B:Bug';
|
||||
$lang->searchObjects['story'] = 'S:需求';
|
||||
$lang->searchObjects['task'] = 'T:任務';
|
||||
$lang->searchObjects['testcase'] = 'C:用例';
|
||||
$lang->searchObjects['project'] = 'P:項目';
|
||||
$lang->searchObjects['product'] = 'P:產品';
|
||||
$lang->searchObjects['user'] = 'U:用戶';
|
||||
$lang->searchObjects['build'] = 'B:Build';
|
||||
$lang->searchObjects['release'] = 'R:發佈';
|
||||
$lang->searchObjects['productplan'] = 'P:產品計劃';
|
||||
$lang->searchObjects['testtask'] = 'T:測試任務';
|
||||
$lang->searchObjects['doc'] = 'D:文檔';
|
||||
$lang->searchTips = '輸入編號';
|
||||
|
||||
/* 導出檔案的類型列表。*/
|
||||
$lang->exportFileTypeList['csv'] = 'csv';
|
||||
$lang->exportFileTypeList['xml'] = 'xml';
|
||||
$lang->exportFileTypeList['html'] = 'html';
|
||||
|
||||
/* 風格列表。*/
|
||||
$lang->themes['default'] = '預設';
|
||||
$lang->themes['green'] = '綠色';
|
||||
$lang->themes['red'] = '紅色';
|
||||
$lang->themes['classblue'] = '經典藍';
|
||||
|
||||
/* 首頁菜單設置。*/
|
||||
$lang->index->menu->product = '瀏覽產品|product|browse';
|
||||
$lang->index->menu->project = '瀏覽項目|project|browse';
|
||||
|
||||
/* 我的地盤菜單設置。*/
|
||||
$lang->my->menu->account = '<span id="mybg"> </span>%s' . $lang->arrow;
|
||||
$lang->my->menu->index = '首頁|my|index';
|
||||
$lang->my->menu->todo = array('link' => '我的TODO|my|todo|', 'subModule' => 'todo');
|
||||
$lang->my->menu->task = '我的任務|my|task|';
|
||||
$lang->my->menu->bug = '我的Bug|my|bug|';
|
||||
$lang->my->menu->testtask = '我的測試|my|testtask|';
|
||||
$lang->my->menu->story = '我的需求|my|story|';
|
||||
$lang->my->menu->myProject = '我的項目|my|project|';
|
||||
$lang->my->menu->dynamic = '我的動態|my|dynamic|';
|
||||
$lang->my->menu->profile = array('link' => '我的檔案|my|profile|', 'alias' => 'editprofile');
|
||||
$lang->todo->menu = $lang->my->menu;
|
||||
|
||||
/* 產品視圖設置。*/
|
||||
$lang->product->menu->list = '%s';
|
||||
$lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
|
||||
$lang->product->menu->dynamic = '動態|product|dynamic|productID=%s';
|
||||
$lang->product->menu->plan = array('link' => '計劃|productplan|browse|productID=%s', 'subModule' => 'productplan');
|
||||
$lang->product->menu->release = array('link' => '發佈|release|browse|productID=%s', 'subModule' => 'release');
|
||||
$lang->product->menu->roadmap = '路線圖|product|roadmap|productID=%s';
|
||||
$lang->product->menu->doc = array('link' => '文檔|product|doc|productID=%s', 'subModule' => 'doc');
|
||||
$lang->product->menu->view = '概況|product|view|productID=%s';
|
||||
$lang->product->menu->edit = '編輯|product|edit|productID=%s';
|
||||
$lang->product->menu->delete = array('link' => '刪除|product|delete|productID=%s', 'target' => 'hiddenwin');
|
||||
$lang->product->menu->module = '模組|tree|browse|productID=%s&view=story';
|
||||
$lang->product->menu->order = '排序|product|order|productID=%s';
|
||||
$lang->product->menu->create = array('link' => '<span class="icon-add1"> </span>新增產品|product|create', 'float' => 'right');
|
||||
$lang->product->menu->project = array('link' => '<span class="icon-title"> </span>項目列表|product|project|status=all&productID=%s', 'float' => 'right');
|
||||
$lang->product->menu->all = array('link' => '<span class="icon-all"> </span>所有產品|product|index|locate=false', 'float' => 'right');
|
||||
$lang->story->menu = $lang->product->menu;
|
||||
$lang->productplan->menu = $lang->product->menu;
|
||||
$lang->release->menu = $lang->product->menu;
|
||||
|
||||
/* 項目視圖菜單設置。*/
|
||||
$lang->project->menu->list = '%s';
|
||||
$lang->project->menu->task = array('link' => '任務|project|task|projectID=%s', 'subModule' => 'task', 'alias' => 'grouptask,importtask');
|
||||
$lang->project->menu->story = array('link' => '需求|project|story|projectID=%s');
|
||||
$lang->project->menu->bug = 'Bug|project|bug|projectID=%s';
|
||||
$lang->project->menu->dynamic = '動態|project|dynamic|projectID=%s';
|
||||
$lang->project->menu->build = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'build');
|
||||
$lang->project->menu->testtask = '測試申請|project|testtask|projectID=%s';
|
||||
$lang->project->menu->burn = '燃盡圖|project|burn|projectID=%s';
|
||||
$lang->project->menu->team = array('link' => '團隊|project|team|projectID=%s', 'alias' => 'managemembers');
|
||||
$lang->project->menu->doc = array('link' => '文檔|project|doc|porjectID=%s', 'subModule' => 'doc');
|
||||
$lang->project->menu->product = '產品|project|manageproducts|projectID=%s';
|
||||
$lang->project->menu->linkstory = array('link' => '關聯需求|project|linkstory|projectID=%s');
|
||||
$lang->project->menu->view = '概況|project|view|projectID=%s';
|
||||
$lang->project->menu->edit = '編輯|project|edit|projectID=%s';
|
||||
$lang->project->menu->delete = array('link' => '刪除|project|delete|projectID=%s', 'target' => 'hiddenwin');
|
||||
$lang->project->menu->order = '排序|project|order|projectID=%s';
|
||||
$lang->project->menu->create = array('link' => '<span class="icon-add1"> </span>新增項目|project|create', 'float' => 'right');
|
||||
$lang->project->menu->copy = array('link' => '<span class="icon-copy"> </span>複製項目|project|create|projectID=©ProjectID=%s', 'float' => 'right');
|
||||
$lang->project->menu->all = array('link' => '<span class="icon-all"> </span>所有項目|project|index|locate=false', 'float' => 'right');
|
||||
$lang->task->menu = $lang->project->menu;
|
||||
$lang->build->menu = $lang->project->menu;
|
||||
|
||||
/* QA視圖菜單設置。*/
|
||||
$lang->bug->menu->product = '%s';
|
||||
$lang->bug->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s', 'alias' => 'view,create,edit,resolve,close,activate,report', 'subModule' => 'tree');
|
||||
$lang->bug->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,edit');
|
||||
$lang->bug->menu->testtask = array('link' => '測試任務|testtask|browse|productID=%s');
|
||||
|
||||
$lang->testcase->menu->product = '%s';
|
||||
$lang->testcase->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s');
|
||||
$lang->testcase->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit', 'subModule' => 'tree');
|
||||
$lang->testcase->menu->testtask = array('link' => '測試任務|testtask|browse|productID=%s');
|
||||
|
||||
$lang->testtask->menu->product = '%s';
|
||||
$lang->testtask->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s');
|
||||
$lang->testtask->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s');
|
||||
$lang->testtask->menu->testtask = array('link' => '測試任務|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases');
|
||||
|
||||
/* 文檔視圖菜單設置。*/
|
||||
$lang->doc->menu->list = '%s';
|
||||
$lang->doc->menu->browse = array('link' => '文檔列表|doc|browse|libID=%s');
|
||||
$lang->doc->menu->edit = '編輯文檔庫|doc|editLib|libID=%s';
|
||||
$lang->doc->menu->module = '維護模組|tree|browse|libID=%s&viewType=doc';
|
||||
$lang->doc->menu->delete = array('link' => '刪除文檔庫|doc|deleteLib|libID=%s', 'target' => 'hiddenwin');
|
||||
$lang->doc->menu->create = array('link' => '<span class="icon-add1"> </span>新增文檔庫|doc|createLib', 'float' => 'right');
|
||||
|
||||
/* 組織結構視圖菜單設置。*/
|
||||
$lang->company->menu->name = '%s' . $lang->arrow;
|
||||
$lang->company->menu->browseUser = array('link' => '用戶列表|company|browse', 'subModule' => 'user');
|
||||
$lang->company->menu->dept = array('link' => '部門維護|dept|browse', 'subModule' => 'dept');
|
||||
$lang->company->menu->browseGroup = array('link' => '權限分組|group|browse', 'subModule' => 'group');
|
||||
$lang->company->menu->edit = array('link' => '公司管理|company|edit');
|
||||
$lang->company->menu->dynamic = '組織動態|company|dynamic|';
|
||||
$lang->company->menu->addGroup = array('link' => '<span class="icon-add1"> </span>添加分組|group|create', 'float' => 'right');
|
||||
$lang->company->menu->addUser = array('link' => '<span class="icon-add1"> </span>添加用戶|user|create|dept=%s', 'subModule' => 'user', 'float' => 'right');
|
||||
$lang->dept->menu = $lang->company->menu;
|
||||
$lang->group->menu = $lang->company->menu;
|
||||
|
||||
/* 用戶信息菜單設置。*/
|
||||
$lang->user->menu->account = '%s' . $lang->arrow;
|
||||
$lang->user->menu->todo = array('link' => 'TODO列表|user|todo|account=%s', 'subModule' => 'todo');
|
||||
$lang->user->menu->task = '任務列表|user|task|account=%s';
|
||||
$lang->user->menu->bug = 'Bug列表|user|bug|account=%s';
|
||||
$lang->user->menu->dynamic = '用戶動態|user|dynamic|type=today&account=%s';
|
||||
$lang->user->menu->projectList = '項目列表|user|project|account=%s';
|
||||
$lang->user->menu->profile = array('link' => '用戶信息|user|profile|account=%s', 'alias' => 'edit');
|
||||
$lang->user->menu->browse = array('link' => '<span class="icon-title"> </span>用戶管理|company|browse|', 'float' => 'right');
|
||||
|
||||
/* 後台管理菜單設置。*/
|
||||
$lang->admin->menu->index = array('link' => '首頁|admin|index', 'subModule' => 'admin');
|
||||
$lang->admin->menu->extension = array('link' => '插件管理|extension|browse', 'subModule' => 'extension');
|
||||
$lang->admin->menu->editor = array('link' => '擴展編輯器|editor|index', 'subModule' => 'editor');
|
||||
$lang->admin->menu->mail = array('link' => 'Email配置|mail|set', 'subModule' => 'mail');
|
||||
$lang->admin->menu->convert = array('link' => '從其他系統導入|convert|index', 'subModule' => 'convert');
|
||||
$lang->admin->menu->trashes = array('link' => '資源回收筒|action|trash', 'subModule' => 'action');
|
||||
$lang->convert->menu = $lang->admin->menu;
|
||||
$lang->upgrade->menu = $lang->admin->menu;
|
||||
$lang->action->menu = $lang->admin->menu;
|
||||
$lang->extension->menu = $lang->admin->menu;
|
||||
$lang->editor->menu = $lang->admin->menu;
|
||||
$lang->mail->menu = $lang->admin->menu;
|
||||
|
||||
/*菜單設置:分組設置。*/
|
||||
$lang->menugroup->release = 'product';
|
||||
$lang->menugroup->story = 'product';
|
||||
$lang->menugroup->productplan = 'product';
|
||||
$lang->menugroup->task = 'project';
|
||||
$lang->menugroup->build = 'project';
|
||||
$lang->menugroup->convert = 'admin';
|
||||
$lang->menugroup->upgrade = 'admin';
|
||||
$lang->menugroup->user = 'company';
|
||||
$lang->menugroup->group = 'company';
|
||||
$lang->menugroup->bug = 'qa';
|
||||
$lang->menugroup->testcase = 'qa';
|
||||
$lang->menugroup->testtask = 'qa';
|
||||
$lang->menugroup->people = 'company';
|
||||
$lang->menugroup->dept = 'company';
|
||||
$lang->menugroup->todo = 'my';
|
||||
$lang->menugroup->action = 'admin';
|
||||
$lang->menugroup->extension = 'admin';
|
||||
$lang->menugroup->editor = 'admin';
|
||||
$lang->menugroup->mail = 'admin';
|
||||
|
||||
/* 錯誤提示信息。*/
|
||||
$lang->error->companyNotFound = "您訪問的域名 %s 沒有對應的公司。";
|
||||
$lang->error->length = array("『%s』長度錯誤,應當為『%s』", "『%s』長度應當不超過『%s』,且不小於『%s』。");
|
||||
$lang->error->reg = "『%s』不符合格式,應當為:『%s』。";
|
||||
$lang->error->unique = "『%s』已經有『%s』這條記錄了。";
|
||||
$lang->error->gt = "『%s』應當大於『%s』。";
|
||||
$lang->error->notempty = "『%s』不能為空。";
|
||||
$lang->error->empty = "『%s』必須為空。";
|
||||
$lang->error->equal = "『%s』必須為『%s』。";
|
||||
$lang->error->int = array("『%s』應當是數字。", "『%s』應當介於『%s-%s』之間。");
|
||||
$lang->error->float = "『%s』應當是數字,可以是小數。";
|
||||
$lang->error->email = "『%s』應當為合法的EMAIL。";
|
||||
$lang->error->date = "『%s』應當為合法的日期。";
|
||||
$lang->error->account = "『%s』應當為合法的用戶名。";
|
||||
$lang->error->passwordsame = "兩次密碼應當相等。";
|
||||
$lang->error->passwordrule = "密碼應該符合規則,長度至少為六位。";
|
||||
$lang->error->accessDenied = '您沒有訪問權限';
|
||||
|
||||
/* 分頁信息。*/
|
||||
$lang->pager->noRecord = "暫時沒有記錄";
|
||||
$lang->pager->digest = "共<strong>%s</strong>條記錄,每頁 <strong>%s</strong>條,頁面:<strong>%s/%s</strong> ";
|
||||
$lang->pager->first = "首頁";
|
||||
$lang->pager->pre = "上頁";
|
||||
$lang->pager->next = "下頁";
|
||||
$lang->pager->last = "末頁";
|
||||
$lang->pager->locate = "GO!";
|
||||
|
||||
$lang->zentaoSite = "官方網站";
|
||||
$lang->chinaScrum = "<a href='http://www.zentao.net/goto.php?item=chinascrum' target='_blank'>Scrum社區</a> ";
|
||||
$lang->agileTraining = "<a href='http://www.zentao.net/goto.php?item=agiletrain' target='_blank'>培訓</a> ";
|
||||
$lang->donate = "<a href='http://www.zentao.net/goto.php?item=donate' target='_blank'>捐助禪道</a> ";
|
||||
$lang->zentaoKeywords = "開源項目管理軟件,項目管理,項目管理軟件,pmp,pms,php框架,國產php框架,scrum工具,scrum管理工具,scrum管理軟件,敏捷項目管理,禪道";
|
||||
$lang->zentaoDESC = "禪道項目管理軟件(ZenTaoPMS)是一款國產的,基于LGPL協議,開源免費的項目管理軟件(工具、系統),同時也是一款scrum管理工具。
|
||||
它集產品管理、項目管理、測試管理於一體,同時還包含了事務管理、組織管理等諸多功能,是中小型企業項目管理的首選。禪道項目管理軟件使用PHP + MySQL開發,
|
||||
基于自主的PHP開發框架──ZenTaoPHP而成。第三方開發者或者企業可以非常方便的開發插件或者進行定製。禪道在手,項目無憂!";
|
||||
|
||||
/* 時間格式設置。*/
|
||||
define('DT_DATETIME1', 'Y-m-d H:i:s');
|
||||
define('DT_DATETIME2', 'y-m-d H:i');
|
||||
define('DT_MONTHTIME1', 'n/d H:i');
|
||||
define('DT_MONTHTIME2', 'n月d日 H:i');
|
||||
define('DT_DATE1', 'Y-m-d');
|
||||
define('DT_DATE2', 'Ymd');
|
||||
define('DT_DATE3', 'Y年m月d日');
|
||||
define('DT_DATE4', 'n月j日');
|
||||
define('DT_TIME1', 'H:i:s');
|
||||
define('DT_TIME2', 'H:i');
|
||||
<?php
|
||||
/**
|
||||
* The common simplified chinese file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青島易軟天創網絡科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package ZenTaoPMS
|
||||
* @version $Id: zh-tw.php 2686 2012-03-02 05:45:14Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->arrow = '<span class="icon-arrow"> </span>';
|
||||
$lang->colon = '::';
|
||||
$lang->comma = ',';
|
||||
$lang->dot = '。';
|
||||
$lang->at = ' 于 ';
|
||||
$lang->downArrow = '↓';
|
||||
|
||||
$lang->ZenTaoPMS = '禪道管理';
|
||||
$lang->welcome = "歡迎使用『%s』{$lang->colon} {$lang->ZenTaoPMS}";
|
||||
$lang->myControl = "我的地盤";
|
||||
$lang->currentPos = '當前位置:';
|
||||
$lang->logout = '退出';
|
||||
$lang->login = '登錄';
|
||||
$lang->aboutZenTao = '關於';
|
||||
$lang->todayIs = '今天是%s,';
|
||||
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>時間: %s 毫秒, 內存: %s KB, 查詢: %s. </div></div>";
|
||||
|
||||
$lang->reset = '重填';
|
||||
$lang->edit = '編輯';
|
||||
$lang->copy = '複製';
|
||||
$lang->delete = '刪除';
|
||||
$lang->close = '關閉';
|
||||
$lang->link = '關聯';
|
||||
$lang->unlink = '移除';
|
||||
$lang->import = '導入';
|
||||
$lang->export = '導出';
|
||||
$lang->setFileName = '檔案名:';
|
||||
$lang->activate = '激活';
|
||||
$lang->submitting = '稍候...';
|
||||
$lang->save = '保存';
|
||||
$lang->confirm = '確認';
|
||||
$lang->preview = '查看';
|
||||
$lang->goback = '返回';
|
||||
$lang->go = 'GO';
|
||||
$lang->more = '更多';
|
||||
|
||||
$lang->actions = '操作';
|
||||
$lang->comment = '備註';
|
||||
$lang->history = '歷史記錄';
|
||||
$lang->attatch = '附件';
|
||||
$lang->reverse = '[切換順序]';
|
||||
$lang->switchDisplay= '[切換顯示]';
|
||||
$lang->switchHelp = '切換幫助';
|
||||
$lang->addFiles = '上傳了附件 ';
|
||||
$lang->files = '附件 ';
|
||||
$lang->unfold = '+';
|
||||
$lang->fold = '-';
|
||||
|
||||
$lang->selectAll = '全選';
|
||||
$lang->notFound = '抱歉,您訪問的對象並不存在!';
|
||||
$lang->showAll = '++ 全部顯示 ++';
|
||||
$lang->hideClosed = '-- 隱藏已結束 --';
|
||||
|
||||
$lang->future = '未來';
|
||||
$lang->year = '年';
|
||||
$lang->workingHour = '工時';
|
||||
|
||||
$lang->idAB = 'ID';
|
||||
$lang->priAB = 'P';
|
||||
$lang->statusAB = '狀態';
|
||||
$lang->openedByAB = '創建';
|
||||
$lang->assignedToAB = '指派';
|
||||
$lang->typeAB = '類型';
|
||||
|
||||
$lang->common->common = '公有模組';
|
||||
|
||||
/* 主導航菜單。*/
|
||||
$lang->menu->my = '<span id="mainbg"> </span>我的地盤|my|index';
|
||||
$lang->menu->product = '產品視圖|product|index';
|
||||
$lang->menu->project = '項目視圖|project|index';
|
||||
$lang->menu->qa = '測試視圖|qa|index';
|
||||
$lang->menu->doc = '文檔視圖|doc|index';
|
||||
$lang->menu->company = '組織視圖|company|index';
|
||||
$lang->menu->admin = '後台管理|admin|index';
|
||||
|
||||
/* 查詢條中可以選擇的對象列表。*/
|
||||
$lang->searchObjects['bug'] = 'B:Bug';
|
||||
$lang->searchObjects['story'] = 'S:需求';
|
||||
$lang->searchObjects['task'] = 'T:任務';
|
||||
$lang->searchObjects['testcase'] = 'C:用例';
|
||||
$lang->searchObjects['project'] = 'P:項目';
|
||||
$lang->searchObjects['product'] = 'P:產品';
|
||||
$lang->searchObjects['user'] = 'U:用戶';
|
||||
$lang->searchObjects['build'] = 'B:Build';
|
||||
$lang->searchObjects['release'] = 'R:發佈';
|
||||
$lang->searchObjects['productplan'] = 'P:產品計劃';
|
||||
$lang->searchObjects['testtask'] = 'T:測試任務';
|
||||
$lang->searchObjects['doc'] = 'D:文檔';
|
||||
$lang->searchTips = '輸入編號';
|
||||
|
||||
/* 導出檔案的類型列表。*/
|
||||
$lang->exportFileTypeList['csv'] = 'csv';
|
||||
$lang->exportFileTypeList['xml'] = 'xml';
|
||||
$lang->exportFileTypeList['html'] = 'html';
|
||||
|
||||
/* 風格列表。*/
|
||||
$lang->themes['default'] = '預設';
|
||||
$lang->themes['green'] = '綠色';
|
||||
$lang->themes['red'] = '紅色';
|
||||
$lang->themes['classblue'] = '經典藍';
|
||||
|
||||
/* 首頁菜單設置。*/
|
||||
$lang->index->menu->product = '瀏覽產品|product|browse';
|
||||
$lang->index->menu->project = '瀏覽項目|project|browse';
|
||||
|
||||
/* 我的地盤菜單設置。*/
|
||||
$lang->my->menu->account = '<span id="mybg"> </span>%s' . $lang->arrow;
|
||||
$lang->my->menu->index = '首頁|my|index';
|
||||
$lang->my->menu->todo = array('link' => '我的TODO|my|todo|', 'subModule' => 'todo');
|
||||
$lang->my->menu->task = '我的任務|my|task|';
|
||||
$lang->my->menu->bug = '我的Bug|my|bug|';
|
||||
$lang->my->menu->testtask = '我的測試|my|testtask|';
|
||||
$lang->my->menu->story = '我的需求|my|story|';
|
||||
$lang->my->menu->myProject = '我的項目|my|project|';
|
||||
$lang->my->menu->dynamic = '我的動態|my|dynamic|';
|
||||
$lang->my->menu->profile = array('link' => '我的檔案|my|profile|', 'alias' => 'editprofile');
|
||||
$lang->todo->menu = $lang->my->menu;
|
||||
|
||||
/* 產品視圖設置。*/
|
||||
$lang->product->menu->list = '%s';
|
||||
$lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'subModule' => 'story');
|
||||
$lang->product->menu->dynamic = '動態|product|dynamic|productID=%s';
|
||||
$lang->product->menu->plan = array('link' => '計劃|productplan|browse|productID=%s', 'subModule' => 'productplan');
|
||||
$lang->product->menu->release = array('link' => '發佈|release|browse|productID=%s', 'subModule' => 'release');
|
||||
$lang->product->menu->roadmap = '路線圖|product|roadmap|productID=%s';
|
||||
$lang->product->menu->doc = array('link' => '文檔|product|doc|productID=%s', 'subModule' => 'doc');
|
||||
$lang->product->menu->view = '概況|product|view|productID=%s';
|
||||
$lang->product->menu->edit = '編輯|product|edit|productID=%s';
|
||||
$lang->product->menu->delete = array('link' => '刪除|product|delete|productID=%s', 'target' => 'hiddenwin');
|
||||
$lang->product->menu->module = '模組|tree|browse|productID=%s&view=story';
|
||||
$lang->product->menu->order = '排序|product|order|productID=%s';
|
||||
$lang->product->menu->create = array('link' => '<span class="icon-add1"> </span>新增產品|product|create', 'float' => 'right');
|
||||
$lang->product->menu->project = array('link' => '<span class="icon-title"> </span>項目列表|product|project|status=all&productID=%s', 'float' => 'right');
|
||||
$lang->product->menu->all = array('link' => '<span class="icon-all"> </span>所有產品|product|index|locate=false', 'float' => 'right');
|
||||
$lang->story->menu = $lang->product->menu;
|
||||
$lang->productplan->menu = $lang->product->menu;
|
||||
$lang->release->menu = $lang->product->menu;
|
||||
|
||||
/* 項目視圖菜單設置。*/
|
||||
$lang->project->menu->list = '%s';
|
||||
$lang->project->menu->task = array('link' => '任務|project|task|projectID=%s', 'subModule' => 'task', 'alias' => 'grouptask,importtask');
|
||||
$lang->project->menu->story = array('link' => '需求|project|story|projectID=%s');
|
||||
$lang->project->menu->bug = 'Bug|project|bug|projectID=%s';
|
||||
$lang->project->menu->dynamic = '動態|project|dynamic|projectID=%s';
|
||||
$lang->project->menu->build = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'build');
|
||||
$lang->project->menu->testtask = '測試申請|project|testtask|projectID=%s';
|
||||
$lang->project->menu->burn = '燃盡圖|project|burn|projectID=%s';
|
||||
$lang->project->menu->team = array('link' => '團隊|project|team|projectID=%s', 'alias' => 'managemembers');
|
||||
$lang->project->menu->doc = array('link' => '文檔|project|doc|porjectID=%s', 'subModule' => 'doc');
|
||||
$lang->project->menu->product = '產品|project|manageproducts|projectID=%s';
|
||||
$lang->project->menu->linkstory = array('link' => '關聯需求|project|linkstory|projectID=%s');
|
||||
$lang->project->menu->view = '概況|project|view|projectID=%s';
|
||||
$lang->project->menu->edit = '編輯|project|edit|projectID=%s';
|
||||
$lang->project->menu->delete = array('link' => '刪除|project|delete|projectID=%s', 'target' => 'hiddenwin');
|
||||
$lang->project->menu->order = '排序|project|order|projectID=%s';
|
||||
$lang->project->menu->create = array('link' => '<span class="icon-add1"> </span>新增項目|project|create', 'float' => 'right');
|
||||
$lang->project->menu->copy = array('link' => '<span class="icon-copy"> </span>複製項目|project|create|projectID=©ProjectID=%s', 'float' => 'right');
|
||||
$lang->project->menu->all = array('link' => '<span class="icon-all"> </span>所有項目|project|index|locate=false', 'float' => 'right');
|
||||
$lang->task->menu = $lang->project->menu;
|
||||
$lang->build->menu = $lang->project->menu;
|
||||
|
||||
/* QA視圖菜單設置。*/
|
||||
$lang->bug->menu->product = '%s';
|
||||
$lang->bug->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s', 'alias' => 'view,create,edit,resolve,close,activate,report', 'subModule' => 'tree');
|
||||
$lang->bug->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,edit');
|
||||
$lang->bug->menu->testtask = array('link' => '測試任務|testtask|browse|productID=%s');
|
||||
|
||||
$lang->testcase->menu->product = '%s';
|
||||
$lang->testcase->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s');
|
||||
$lang->testcase->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit', 'subModule' => 'tree');
|
||||
$lang->testcase->menu->testtask = array('link' => '測試任務|testtask|browse|productID=%s');
|
||||
|
||||
$lang->testtask->menu->product = '%s';
|
||||
$lang->testtask->menu->bug = array('link' => '缺陷管理|bug|browse|productID=%s');
|
||||
$lang->testtask->menu->testcase = array('link' => '用例管理|testcase|browse|productID=%s');
|
||||
$lang->testtask->menu->testtask = array('link' => '測試任務|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases');
|
||||
|
||||
/* 文檔視圖菜單設置。*/
|
||||
$lang->doc->menu->list = '%s';
|
||||
$lang->doc->menu->browse = array('link' => '文檔列表|doc|browse|libID=%s');
|
||||
$lang->doc->menu->edit = '編輯文檔庫|doc|editLib|libID=%s';
|
||||
$lang->doc->menu->module = '維護模組|tree|browse|libID=%s&viewType=doc';
|
||||
$lang->doc->menu->delete = array('link' => '刪除文檔庫|doc|deleteLib|libID=%s', 'target' => 'hiddenwin');
|
||||
$lang->doc->menu->create = array('link' => '<span class="icon-add1"> </span>新增文檔庫|doc|createLib', 'float' => 'right');
|
||||
|
||||
/* 組織結構視圖菜單設置。*/
|
||||
$lang->company->menu->name = '%s' . $lang->arrow;
|
||||
$lang->company->menu->browseUser = array('link' => '用戶列表|company|browse', 'subModule' => 'user');
|
||||
$lang->company->menu->dept = array('link' => '部門維護|dept|browse', 'subModule' => 'dept');
|
||||
$lang->company->menu->browseGroup = array('link' => '權限分組|group|browse', 'subModule' => 'group');
|
||||
$lang->company->menu->edit = array('link' => '公司管理|company|edit');
|
||||
$lang->company->menu->dynamic = '組織動態|company|dynamic|';
|
||||
$lang->company->menu->addGroup = array('link' => '<span class="icon-add1"> </span>添加分組|group|create', 'float' => 'right');
|
||||
$lang->company->menu->addUser = array('link' => '<span class="icon-add1"> </span>添加用戶|user|create|dept=%s', 'subModule' => 'user', 'float' => 'right');
|
||||
$lang->dept->menu = $lang->company->menu;
|
||||
$lang->group->menu = $lang->company->menu;
|
||||
|
||||
/* 用戶信息菜單設置。*/
|
||||
$lang->user->menu->account = '%s' . $lang->arrow;
|
||||
$lang->user->menu->todo = array('link' => 'TODO列表|user|todo|account=%s', 'subModule' => 'todo');
|
||||
$lang->user->menu->task = '任務列表|user|task|account=%s';
|
||||
$lang->user->menu->bug = 'Bug列表|user|bug|account=%s';
|
||||
$lang->user->menu->dynamic = '用戶動態|user|dynamic|type=today&account=%s';
|
||||
$lang->user->menu->projectList = '項目列表|user|project|account=%s';
|
||||
$lang->user->menu->profile = array('link' => '用戶信息|user|profile|account=%s', 'alias' => 'edit');
|
||||
$lang->user->menu->browse = array('link' => '<span class="icon-title"> </span>用戶管理|company|browse|', 'float' => 'right');
|
||||
|
||||
/* 後台管理菜單設置。*/
|
||||
$lang->admin->menu->index = array('link' => '首頁|admin|index', 'subModule' => 'admin');
|
||||
$lang->admin->menu->extension = array('link' => '插件管理|extension|browse', 'subModule' => 'extension');
|
||||
$lang->admin->menu->editor = array('link' => '擴展編輯器|editor|index', 'subModule' => 'editor');
|
||||
$lang->admin->menu->mail = array('link' => 'Email配置|mail|set', 'subModule' => 'mail');
|
||||
$lang->admin->menu->convert = array('link' => '從其他系統導入|convert|index', 'subModule' => 'convert');
|
||||
$lang->admin->menu->trashes = array('link' => '資源回收筒|action|trash', 'subModule' => 'action');
|
||||
$lang->convert->menu = $lang->admin->menu;
|
||||
$lang->upgrade->menu = $lang->admin->menu;
|
||||
$lang->action->menu = $lang->admin->menu;
|
||||
$lang->extension->menu = $lang->admin->menu;
|
||||
$lang->editor->menu = $lang->admin->menu;
|
||||
$lang->mail->menu = $lang->admin->menu;
|
||||
|
||||
/*菜單設置:分組設置。*/
|
||||
$lang->menugroup->release = 'product';
|
||||
$lang->menugroup->story = 'product';
|
||||
$lang->menugroup->productplan = 'product';
|
||||
$lang->menugroup->task = 'project';
|
||||
$lang->menugroup->build = 'project';
|
||||
$lang->menugroup->convert = 'admin';
|
||||
$lang->menugroup->upgrade = 'admin';
|
||||
$lang->menugroup->user = 'company';
|
||||
$lang->menugroup->group = 'company';
|
||||
$lang->menugroup->bug = 'qa';
|
||||
$lang->menugroup->testcase = 'qa';
|
||||
$lang->menugroup->testtask = 'qa';
|
||||
$lang->menugroup->people = 'company';
|
||||
$lang->menugroup->dept = 'company';
|
||||
$lang->menugroup->todo = 'my';
|
||||
$lang->menugroup->action = 'admin';
|
||||
$lang->menugroup->extension = 'admin';
|
||||
$lang->menugroup->editor = 'admin';
|
||||
$lang->menugroup->mail = 'admin';
|
||||
|
||||
/* 錯誤提示信息。*/
|
||||
$lang->error->companyNotFound = "您訪問的域名 %s 沒有對應的公司。";
|
||||
$lang->error->length = array("『%s』長度錯誤,應當為『%s』", "『%s』長度應當不超過『%s』,且不小於『%s』。");
|
||||
$lang->error->reg = "『%s』不符合格式,應當為:『%s』。";
|
||||
$lang->error->unique = "『%s』已經有『%s』這條記錄了。";
|
||||
$lang->error->gt = "『%s』應當大於『%s』。";
|
||||
$lang->error->notempty = "『%s』不能為空。";
|
||||
$lang->error->empty = "『%s』必須為空。";
|
||||
$lang->error->equal = "『%s』必須為『%s』。";
|
||||
$lang->error->int = array("『%s』應當是數字。", "『%s』應當介於『%s-%s』之間。");
|
||||
$lang->error->float = "『%s』應當是數字,可以是小數。";
|
||||
$lang->error->email = "『%s』應當為合法的EMAIL。";
|
||||
$lang->error->date = "『%s』應當為合法的日期。";
|
||||
$lang->error->account = "『%s』應當為合法的用戶名。";
|
||||
$lang->error->passwordsame = "兩次密碼應當相等。";
|
||||
$lang->error->passwordrule = "密碼應該符合規則,長度至少為六位。";
|
||||
$lang->error->accessDenied = '您沒有訪問權限';
|
||||
|
||||
/* 分頁信息。*/
|
||||
$lang->pager->noRecord = "暫時沒有記錄";
|
||||
$lang->pager->digest = "共<strong>%s</strong>條記錄,每頁 <strong>%s</strong>條,頁面:<strong>%s/%s</strong> ";
|
||||
$lang->pager->first = "首頁";
|
||||
$lang->pager->pre = "上頁";
|
||||
$lang->pager->next = "下頁";
|
||||
$lang->pager->last = "末頁";
|
||||
$lang->pager->locate = "GO!";
|
||||
|
||||
$lang->zentaoSite = "官方網站";
|
||||
$lang->chinaScrum = "<a href='http://www.zentao.net/goto.php?item=chinascrum' target='_blank'>Scrum社區</a> ";
|
||||
$lang->agileTraining = "<a href='http://www.zentao.net/goto.php?item=agiletrain' target='_blank'>培訓</a> ";
|
||||
$lang->donate = "<a href='http://www.zentao.net/goto.php?item=donate' target='_blank'>捐助禪道</a> ";
|
||||
$lang->zentaoKeywords = "開源項目管理軟件,項目管理,項目管理軟件,pmp,pms,php框架,國產php框架,scrum工具,scrum管理工具,scrum管理軟件,敏捷項目管理,禪道";
|
||||
$lang->zentaoDESC = "禪道項目管理軟件(ZenTaoPMS)是一款國產的,基于LGPL協議,開源免費的項目管理軟件(工具、系統),同時也是一款scrum管理工具。
|
||||
它集產品管理、項目管理、測試管理於一體,同時還包含了事務管理、組織管理等諸多功能,是中小型企業項目管理的首選。禪道項目管理軟件使用PHP + MySQL開發,
|
||||
基于自主的PHP開發框架──ZenTaoPHP而成。第三方開發者或者企業可以非常方便的開發插件或者進行定製。禪道在手,項目無憂!";
|
||||
|
||||
/* 時間格式設置。*/
|
||||
define('DT_DATETIME1', 'Y-m-d H:i:s');
|
||||
define('DT_DATETIME2', 'y-m-d H:i');
|
||||
define('DT_MONTHTIME1', 'n/d H:i');
|
||||
define('DT_MONTHTIME2', 'n月d日 H:i');
|
||||
define('DT_DATE1', 'Y-m-d');
|
||||
define('DT_DATE2', 'Ymd');
|
||||
define('DT_DATE3', 'Y年m月d日');
|
||||
define('DT_DATE4', 'n月j日');
|
||||
define('DT_TIME1', 'H:i:s');
|
||||
define('DT_TIME2', 'H:i');
|
||||
|
||||
@@ -1,367 +1,367 @@
|
||||
<?php
|
||||
/**
|
||||
* The model file of common module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package common
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class commonModel extends model
|
||||
{
|
||||
/**
|
||||
* Start the session.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function startSession()
|
||||
{
|
||||
session_name($this->config->sessionVar);
|
||||
if(isset($_GET[$this->config->sessionVar])) session_id($_GET[$this->config->sessionVar]);
|
||||
session_start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the header info.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function sendHeader()
|
||||
{
|
||||
header("Content-Type: text/html; Language={$this->config->encoding}");
|
||||
header("Cache-control: private");
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the commpany.
|
||||
*
|
||||
* First, search company by the http host. If not found, search by the default domain. Last, use the first as the default.
|
||||
* After get the company, save it to session.
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setCompany()
|
||||
{
|
||||
$httpHost = $this->server->http_host;
|
||||
if(strpos($httpHost, ":"))
|
||||
{
|
||||
$httpHost = explode(":", $httpHost);
|
||||
$httpHost = $httpHost[0];
|
||||
}
|
||||
|
||||
if($this->session->company and $this->session->company->pms == $httpHost)
|
||||
{
|
||||
$this->app->company = $this->session->company;
|
||||
}
|
||||
else
|
||||
{
|
||||
$company = $this->loadModel('company')->getByDomain();
|
||||
if(!$company and isset($this->config->default->domain)) $company = $this->company->getByDomain($this->config->default->domain);
|
||||
if(!$company) $company = $this->company->getFirst();
|
||||
if(!$company) $this->app->error(sprintf($this->lang->error->companyNotFound, $httpHost), __FILE__, __LINE__, $exit = true);
|
||||
$this->session->set('company', $company);
|
||||
$this->app->company = $company;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the user info.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setUser()
|
||||
{
|
||||
if($this->session->user)
|
||||
{
|
||||
$this->app->user = $this->session->user;
|
||||
}
|
||||
elseif($this->app->company->guest)
|
||||
{
|
||||
$user = new stdClass();
|
||||
$user->id = 0;
|
||||
$user->account = 'guest';
|
||||
$user->realname = 'guest';
|
||||
$user->rights = $this->loadModel('user')->authorize('guest');
|
||||
$this->session->set('user', $user);
|
||||
$this->app->user = $this->session->user;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Juage a method of one module is open or not?
|
||||
*
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function isOpenMethod($module, $method)
|
||||
{
|
||||
if($module == 'user' and strpos('login|logout|deny', $method) !== false) return true;
|
||||
if($module == 'api' and $method == 'getsessionid') return true;
|
||||
if($module == 'misc' and $method == 'about') return true;
|
||||
if($module == 'misc' and $method == 'checkupdate') return true;
|
||||
if($module == 'help' and $method == 'field') return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deny access.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function deny($module, $method)
|
||||
{
|
||||
$vars = "module=$module&method=$method";
|
||||
if(isset($this->server->http_referer))
|
||||
{
|
||||
$referer = helper::safe64Encode($this->server->http_referer);
|
||||
$vars .= "&referer=$referer";
|
||||
}
|
||||
$denyLink = helper::createLink('user', 'deny', $vars);
|
||||
|
||||
/* Fix the bug of IE: use js locate, can't get the referer. */
|
||||
if(strpos($this->server->http_user_agent, 'MSIE') !== false)
|
||||
{
|
||||
echo "<a href='$denyLink' id='denylink' style='display:none'>deny</a>";
|
||||
echo "<script language='javascript'>document.getElementById('denylink').click();</script>";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo js::locate($denyLink);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the run info.
|
||||
*
|
||||
* @param mixed $startTime the start time of this execution
|
||||
* @access public
|
||||
* @return array the run info array.
|
||||
*/
|
||||
public function getRunInfo($startTime)
|
||||
{
|
||||
$info['timeUsed'] = round(getTime() - $startTime, 4) * 1000;
|
||||
$info['memory'] = round(memory_get_peak_usage() / 1024, 1);
|
||||
$info['querys'] = count(dao::$querys);
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print top bar.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printTopBar()
|
||||
{
|
||||
global $lang, $app;
|
||||
|
||||
printf($lang->todayIs, date(DT_DATE3));
|
||||
if(isset($app->user)) echo $app->user->realname . ' ';
|
||||
if(isset($app->user) and $app->user->account != 'guest')
|
||||
{
|
||||
echo html::a(helper::createLink('my', 'index'), $lang->myControl);
|
||||
echo html::a(helper::createLink('user', 'logout'), $lang->logout);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo html::a(helper::createLink('user', 'login'), $lang->login);
|
||||
}
|
||||
echo html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about'");
|
||||
echo $lang->agileTraining;
|
||||
echo $lang->donate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the main menu.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printMainmenu($moduleName)
|
||||
{
|
||||
global $app, $lang;
|
||||
echo "<ul>\n";
|
||||
|
||||
/* Set the main main menu. */
|
||||
$mainMenu = $moduleName;
|
||||
if(isset($lang->menugroup->$moduleName)) $mainMenu = $lang->menugroup->$moduleName;
|
||||
|
||||
/* Print all main menus. */
|
||||
foreach($lang->menu as $menuKey => $menu)
|
||||
{
|
||||
$active = $menuKey == $mainMenu ? "class='active'" : '';
|
||||
list($menuLabel, $module, $method) = explode('|', $menu);
|
||||
|
||||
if(common::hasPriv($module, $method))
|
||||
{
|
||||
$link = helper::createLink($module, $method);
|
||||
echo "<li $active><nobr><a href='$link' id='menu$menuKey'>$menuLabel</a></nobr></li>\n";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the search box.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printSearchBox()
|
||||
{
|
||||
global $app, $lang;
|
||||
$moduleName = $app->getModuleName();
|
||||
$methodName = $app->getMethodName();
|
||||
$searchObject = $moduleName;
|
||||
|
||||
if($moduleName == 'product')
|
||||
{
|
||||
if($methodName == 'browse') $searchObject = 'story';
|
||||
}
|
||||
elseif($moduleName == 'project')
|
||||
{
|
||||
if(strpos('task|story|bug|build', $methodName) !== false) $searchObject = $methodName;
|
||||
}
|
||||
elseif($moduleName == 'my' or $moduleName == 'user')
|
||||
{
|
||||
$searchObject = $methodName;
|
||||
}
|
||||
|
||||
echo "<li id='searchbox'>";
|
||||
echo html::select('searchType', $lang->searchObjects, $searchObject);
|
||||
echo html::input('searchQuery', $lang->searchTips, "onclick=this.value='' onkeydown='if(event.keyCode==13) shortcut()' class='w-60px'");
|
||||
echo "<input type='button' id='objectSwitcher' onclick='shortcut()' />";
|
||||
echo "</li>";
|
||||
echo "</ul>\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the module menu.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printModuleMenu($moduleName)
|
||||
{
|
||||
global $lang, $app;
|
||||
|
||||
if(!isset($lang->$moduleName->menu)) {echo "<ul></ul>"; return;}
|
||||
|
||||
/* Get the sub menus of the module, and get current module and method. */
|
||||
$submenus = $lang->$moduleName->menu;
|
||||
$currentModule = $app->getModuleName();
|
||||
$currentMethod = $app->getMethodName();
|
||||
|
||||
/* The beginning of the menu. */
|
||||
echo "<ul>\n";
|
||||
|
||||
/* Cycling to print every sub menus. */
|
||||
foreach($submenus as $subMenuKey => $submenu)
|
||||
{
|
||||
/* Init the these vars. */
|
||||
$link = $submenu;
|
||||
$subModule = '';
|
||||
$alias = '';
|
||||
$float = '';
|
||||
$active = '';
|
||||
$target = '';
|
||||
|
||||
if(is_array($submenu)) extract($submenu); // If the sub menu is an array, extract it.
|
||||
|
||||
/* Print the menu. */
|
||||
if(strpos($link, '|') === false)
|
||||
{
|
||||
echo "<li>$link</li>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$link = explode('|', $link);
|
||||
list($label, $module, $method) = $link;
|
||||
$vars = isset($link[3]) ? $link[3] : '';
|
||||
if(common::hasPriv($module, $method))
|
||||
{
|
||||
/* Is the currentModule active? */
|
||||
if($currentModule == $subModule and $float != 'right') $active = 'active';
|
||||
if($module == $currentModule and ($method == $currentMethod or strpos($alias, $currentMethod) !== false) and $float != 'right') $active = 'active';
|
||||
echo "<li class='$float $active'>" . html::a(helper::createLink($module, $method, $vars), $label, $target, "id=submenu$subMenuKey") . "</li>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
echo "</ul>\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the bread menu.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $position
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printBreadMenu($moduleName, $position)
|
||||
{
|
||||
global $lang;
|
||||
$mainMenu = $moduleName;
|
||||
if(isset($lang->menugroup->$moduleName)) $mainMenu = $lang->menugroup->$moduleName;
|
||||
echo html::a(helper::createLink('my', 'index'), $lang->ZenTaoPMS) . $lang->arrow;
|
||||
if($moduleName != 'index')
|
||||
{
|
||||
list($menuLabel, $module, $method) = explode('|', $lang->menu->$mainMenu);
|
||||
echo html::a(helper::createLink($module, $method), $menuLabel);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $lang->index->common;
|
||||
}
|
||||
if(empty($position)) return;
|
||||
echo $lang->arrow;
|
||||
foreach($position as $key => $link)
|
||||
{
|
||||
echo $link;
|
||||
if(isset($position[$key + 1])) echo $lang->arrow;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Diff two string. (see phpt)
|
||||
*
|
||||
* @param string $text1
|
||||
* @param string $text2
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function diff($text1, $text2)
|
||||
{
|
||||
$text1 = str_replace(' ', '', trim($text1));
|
||||
$text2 = str_replace(' ', '', trim($text2));
|
||||
$w = explode("\n", $text1);
|
||||
$o = explode("\n", $text2);
|
||||
$w1 = array_diff_assoc($w,$o);
|
||||
$o1 = array_diff_assoc($o,$w);
|
||||
$w2 = array();
|
||||
$o2 = array();
|
||||
foreach($w1 as $idx => $val) $w2[sprintf("%03d<",$idx)] = sprintf("%03d- ", $idx+1) . "<del>" . trim($val) . "</del>";
|
||||
foreach($o1 as $idx => $val) $o2[sprintf("%03d>",$idx)] = sprintf("%03d+ ", $idx+1) . "<ins>" . trim($val) . "</ins>";
|
||||
$diff = array_merge($w2, $o2);
|
||||
ksort($diff);
|
||||
return implode("\n", $diff);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* The model file of common module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package common
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class commonModel extends model
|
||||
{
|
||||
/**
|
||||
* Start the session.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function startSession()
|
||||
{
|
||||
session_name($this->config->sessionVar);
|
||||
if(isset($_GET[$this->config->sessionVar])) session_id($_GET[$this->config->sessionVar]);
|
||||
session_start();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the header info.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function sendHeader()
|
||||
{
|
||||
header("Content-Type: text/html; Language={$this->config->encoding}");
|
||||
header("Cache-control: private");
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the commpany.
|
||||
*
|
||||
* First, search company by the http host. If not found, search by the default domain. Last, use the first as the default.
|
||||
* After get the company, save it to session.
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setCompany()
|
||||
{
|
||||
$httpHost = $this->server->http_host;
|
||||
if(strpos($httpHost, ":"))
|
||||
{
|
||||
$httpHost = explode(":", $httpHost);
|
||||
$httpHost = $httpHost[0];
|
||||
}
|
||||
|
||||
if($this->session->company and $this->session->company->pms == $httpHost)
|
||||
{
|
||||
$this->app->company = $this->session->company;
|
||||
}
|
||||
else
|
||||
{
|
||||
$company = $this->loadModel('company')->getByDomain();
|
||||
if(!$company and isset($this->config->default->domain)) $company = $this->company->getByDomain($this->config->default->domain);
|
||||
if(!$company) $company = $this->company->getFirst();
|
||||
if(!$company) $this->app->error(sprintf($this->lang->error->companyNotFound, $httpHost), __FILE__, __LINE__, $exit = true);
|
||||
$this->session->set('company', $company);
|
||||
$this->app->company = $company;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the user info.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setUser()
|
||||
{
|
||||
if($this->session->user)
|
||||
{
|
||||
$this->app->user = $this->session->user;
|
||||
}
|
||||
elseif($this->app->company->guest)
|
||||
{
|
||||
$user = new stdClass();
|
||||
$user->id = 0;
|
||||
$user->account = 'guest';
|
||||
$user->realname = 'guest';
|
||||
$user->rights = $this->loadModel('user')->authorize('guest');
|
||||
$this->session->set('user', $user);
|
||||
$this->app->user = $this->session->user;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Juage a method of one module is open or not?
|
||||
*
|
||||
* @param string $module
|
||||
* @param string $method
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
public function isOpenMethod($module, $method)
|
||||
{
|
||||
if($module == 'user' and strpos('login|logout|deny', $method) !== false) return true;
|
||||
if($module == 'api' and $method == 'getsessionid') return true;
|
||||
if($module == 'misc' and $method == 'about') return true;
|
||||
if($module == 'misc' and $method == 'checkupdate') return true;
|
||||
if($module == 'help' and $method == 'field') return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deny access.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function deny($module, $method)
|
||||
{
|
||||
$vars = "module=$module&method=$method";
|
||||
if(isset($this->server->http_referer))
|
||||
{
|
||||
$referer = helper::safe64Encode($this->server->http_referer);
|
||||
$vars .= "&referer=$referer";
|
||||
}
|
||||
$denyLink = helper::createLink('user', 'deny', $vars);
|
||||
|
||||
/* Fix the bug of IE: use js locate, can't get the referer. */
|
||||
if(strpos($this->server->http_user_agent, 'MSIE') !== false)
|
||||
{
|
||||
echo "<a href='$denyLink' id='denylink' style='display:none'>deny</a>";
|
||||
echo "<script language='javascript'>document.getElementById('denylink').click();</script>";
|
||||
}
|
||||
else
|
||||
{
|
||||
echo js::locate($denyLink);
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the run info.
|
||||
*
|
||||
* @param mixed $startTime the start time of this execution
|
||||
* @access public
|
||||
* @return array the run info array.
|
||||
*/
|
||||
public function getRunInfo($startTime)
|
||||
{
|
||||
$info['timeUsed'] = round(getTime() - $startTime, 4) * 1000;
|
||||
$info['memory'] = round(memory_get_peak_usage() / 1024, 1);
|
||||
$info['querys'] = count(dao::$querys);
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print top bar.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printTopBar()
|
||||
{
|
||||
global $lang, $app;
|
||||
|
||||
printf($lang->todayIs, date(DT_DATE3));
|
||||
if(isset($app->user)) echo $app->user->realname . ' ';
|
||||
if(isset($app->user) and $app->user->account != 'guest')
|
||||
{
|
||||
echo html::a(helper::createLink('my', 'index'), $lang->myControl);
|
||||
echo html::a(helper::createLink('user', 'logout'), $lang->logout);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo html::a(helper::createLink('user', 'login'), $lang->login);
|
||||
}
|
||||
echo html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about'");
|
||||
echo $lang->agileTraining;
|
||||
echo $lang->donate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the main menu.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printMainmenu($moduleName)
|
||||
{
|
||||
global $app, $lang;
|
||||
echo "<ul>\n";
|
||||
|
||||
/* Set the main main menu. */
|
||||
$mainMenu = $moduleName;
|
||||
if(isset($lang->menugroup->$moduleName)) $mainMenu = $lang->menugroup->$moduleName;
|
||||
|
||||
/* Print all main menus. */
|
||||
foreach($lang->menu as $menuKey => $menu)
|
||||
{
|
||||
$active = $menuKey == $mainMenu ? "class='active'" : '';
|
||||
list($menuLabel, $module, $method) = explode('|', $menu);
|
||||
|
||||
if(common::hasPriv($module, $method))
|
||||
{
|
||||
$link = helper::createLink($module, $method);
|
||||
echo "<li $active><nobr><a href='$link' id='menu$menuKey'>$menuLabel</a></nobr></li>\n";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the search box.
|
||||
*
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printSearchBox()
|
||||
{
|
||||
global $app, $lang;
|
||||
$moduleName = $app->getModuleName();
|
||||
$methodName = $app->getMethodName();
|
||||
$searchObject = $moduleName;
|
||||
|
||||
if($moduleName == 'product')
|
||||
{
|
||||
if($methodName == 'browse') $searchObject = 'story';
|
||||
}
|
||||
elseif($moduleName == 'project')
|
||||
{
|
||||
if(strpos('task|story|bug|build', $methodName) !== false) $searchObject = $methodName;
|
||||
}
|
||||
elseif($moduleName == 'my' or $moduleName == 'user')
|
||||
{
|
||||
$searchObject = $methodName;
|
||||
}
|
||||
|
||||
echo "<li id='searchbox'>";
|
||||
echo html::select('searchType', $lang->searchObjects, $searchObject);
|
||||
echo html::input('searchQuery', $lang->searchTips, "onclick=this.value='' onkeydown='if(event.keyCode==13) shortcut()' class='w-60px'");
|
||||
echo "<input type='button' id='objectSwitcher' onclick='shortcut()' />";
|
||||
echo "</li>";
|
||||
echo "</ul>\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the module menu.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printModuleMenu($moduleName)
|
||||
{
|
||||
global $lang, $app;
|
||||
|
||||
if(!isset($lang->$moduleName->menu)) {echo "<ul></ul>"; return;}
|
||||
|
||||
/* Get the sub menus of the module, and get current module and method. */
|
||||
$submenus = $lang->$moduleName->menu;
|
||||
$currentModule = $app->getModuleName();
|
||||
$currentMethod = $app->getMethodName();
|
||||
|
||||
/* The beginning of the menu. */
|
||||
echo "<ul>\n";
|
||||
|
||||
/* Cycling to print every sub menus. */
|
||||
foreach($submenus as $subMenuKey => $submenu)
|
||||
{
|
||||
/* Init the these vars. */
|
||||
$link = $submenu;
|
||||
$subModule = '';
|
||||
$alias = '';
|
||||
$float = '';
|
||||
$active = '';
|
||||
$target = '';
|
||||
|
||||
if(is_array($submenu)) extract($submenu); // If the sub menu is an array, extract it.
|
||||
|
||||
/* Print the menu. */
|
||||
if(strpos($link, '|') === false)
|
||||
{
|
||||
echo "<li>$link</li>\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$link = explode('|', $link);
|
||||
list($label, $module, $method) = $link;
|
||||
$vars = isset($link[3]) ? $link[3] : '';
|
||||
if(common::hasPriv($module, $method))
|
||||
{
|
||||
/* Is the currentModule active? */
|
||||
if($currentModule == $subModule and $float != 'right') $active = 'active';
|
||||
if($module == $currentModule and ($method == $currentMethod or strpos($alias, $currentMethod) !== false) and $float != 'right') $active = 'active';
|
||||
echo "<li class='$float $active'>" . html::a(helper::createLink($module, $method, $vars), $label, $target, "id=submenu$subMenuKey") . "</li>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
echo "</ul>\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Print the bread menu.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $position
|
||||
* @static
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public static function printBreadMenu($moduleName, $position)
|
||||
{
|
||||
global $lang;
|
||||
$mainMenu = $moduleName;
|
||||
if(isset($lang->menugroup->$moduleName)) $mainMenu = $lang->menugroup->$moduleName;
|
||||
echo html::a(helper::createLink('my', 'index'), $lang->ZenTaoPMS) . $lang->arrow;
|
||||
if($moduleName != 'index')
|
||||
{
|
||||
list($menuLabel, $module, $method) = explode('|', $lang->menu->$mainMenu);
|
||||
echo html::a(helper::createLink($module, $method), $menuLabel);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo $lang->index->common;
|
||||
}
|
||||
if(empty($position)) return;
|
||||
echo $lang->arrow;
|
||||
foreach($position as $key => $link)
|
||||
{
|
||||
echo $link;
|
||||
if(isset($position[$key + 1])) echo $lang->arrow;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Diff two string. (see phpt)
|
||||
*
|
||||
* @param string $text1
|
||||
* @param string $text2
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function diff($text1, $text2)
|
||||
{
|
||||
$text1 = str_replace(' ', '', trim($text1));
|
||||
$text2 = str_replace(' ', '', trim($text2));
|
||||
$w = explode("\n", $text1);
|
||||
$o = explode("\n", $text2);
|
||||
$w1 = array_diff_assoc($w,$o);
|
||||
$o1 = array_diff_assoc($o,$w);
|
||||
$w2 = array();
|
||||
$o2 = array();
|
||||
foreach($w1 as $idx => $val) $w2[sprintf("%03d<",$idx)] = sprintf("%03d- ", $idx+1) . "<del>" . trim($val) . "</del>";
|
||||
foreach($o1 as $idx => $val) $o2[sprintf("%03d>",$idx)] = sprintf("%03d+ ", $idx+1) . "<ins>" . trim($val) . "</ins>";
|
||||
$diff = array_merge($w2, $o2);
|
||||
ksort($diff);
|
||||
return implode("\n", $diff);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
</div>
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<div id='divider'></div>
|
||||
</div>
|
||||
<iframe frameborder='0' name='hiddenwin' id='hiddenwin' scrolling='no' class='<?php $config->debug ? print("debugwin") : print('hidden')?>'></iframe>
|
||||
<div id='footer'>
|
||||
<table class='cont' >
|
||||
<tr>
|
||||
<td class='w-p50 'id='crumbs'><?php commonModel::printBreadMenu($this->moduleName, isset($position) ? $position : ''); ?></td>
|
||||
<td class='a-right' id='poweredby'>
|
||||
<span>Powered by <a href='http://www.zentao.net' target='_blank'>ZenTaoPMS</a> (<?php echo $config->version;?>)</span>
|
||||
<?php echo $lang->donate;?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<script laguage='Javascript'>
|
||||
$().ready(function(){
|
||||
setDebugWin('white');
|
||||
setOuterBox();
|
||||
})
|
||||
<?php if(isset($pageJS)) echo $pageJS;?>
|
||||
</script>
|
||||
<?php
|
||||
$extPath = dirname(dirname(dirname(realpath($viewFile)))) . '/common/ext/view/';
|
||||
$extHookFile = $extPath . 'footer.*.hook.php';
|
||||
$files = glob($extHookFile);
|
||||
if($files) foreach($files as $file) include $file;
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
</div>
|
||||
<?php if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}?>
|
||||
<div id='divider'></div>
|
||||
</div>
|
||||
<iframe frameborder='0' name='hiddenwin' id='hiddenwin' scrolling='no' class='<?php $config->debug ? print("debugwin") : print('hidden')?>'></iframe>
|
||||
<div id='footer'>
|
||||
<table class='cont' >
|
||||
<tr>
|
||||
<td class='w-p50 'id='crumbs'><?php commonModel::printBreadMenu($this->moduleName, isset($position) ? $position : ''); ?></td>
|
||||
<td class='a-right' id='poweredby'>
|
||||
<span>Powered by <a href='http://www.zentao.net' target='_blank'>ZenTaoPMS</a> (<?php echo $config->version;?>)</span>
|
||||
<?php echo $lang->donate;?>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<script laguage='Javascript'>
|
||||
$().ready(function(){
|
||||
setDebugWin('white');
|
||||
setOuterBox();
|
||||
})
|
||||
<?php if(isset($pageJS)) echo $pageJS;?>
|
||||
</script>
|
||||
<?php
|
||||
$extPath = dirname(dirname(dirname(realpath($viewFile)))) . '/common/ext/view/';
|
||||
$extHookFile = $extPath . 'footer.*.hook.php';
|
||||
$files = glob($extHookFile);
|
||||
if($files) foreach($files as $file) include $file;
|
||||
?>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
<?php
|
||||
if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}
|
||||
include 'header.lite.html.php';
|
||||
include 'colorbox.html.php';
|
||||
?>
|
||||
<div id='header'>
|
||||
<table class='cont' id='topbar'>
|
||||
<tr>
|
||||
<td class='w-p50'>
|
||||
<?php
|
||||
echo $app->company->name . $lang->colon;
|
||||
if($app->company->website) echo html::a($app->company->website, $lang->company->website, '_blank');
|
||||
if($app->company->backyard) echo html::a($app->company->backyard, $lang->company->backyard, '_blank');
|
||||
echo html::a('#', $lang->switchHelp, '', "onclick='toggleHelpLink();'");
|
||||
echo html::select('', $app->config->langs, $this->cookie->lang, 'onchange="selectLang(this.value)"');
|
||||
echo html::select('', $app->lang->themes, $this->cookie->theme, 'onchange="selectTheme(this.value)"');
|
||||
?>
|
||||
</td>
|
||||
<td class='a-right'><?php commonModel::printTopBar();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class='cont' id='navbar'>
|
||||
<tr><td id='mainmenu'><?php commonModel::printMainmenu($this->moduleName); commonModel::printSearchBox();?></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class='cont' id='navbar'>
|
||||
<tr><td id='modulemenu'><?php commonModel::printModuleMenu($this->moduleName);?></td></tr>
|
||||
</table>
|
||||
<div id='wrap'>
|
||||
<div class='outer'>
|
||||
<?php
|
||||
if($extView = $this->getExtViewFile(__FILE__)){include $extView; return helper::cd();}
|
||||
include 'header.lite.html.php';
|
||||
include 'colorbox.html.php';
|
||||
?>
|
||||
<div id='header'>
|
||||
<table class='cont' id='topbar'>
|
||||
<tr>
|
||||
<td class='w-p50'>
|
||||
<?php
|
||||
echo $app->company->name . $lang->colon;
|
||||
if($app->company->website) echo html::a($app->company->website, $lang->company->website, '_blank');
|
||||
if($app->company->backyard) echo html::a($app->company->backyard, $lang->company->backyard, '_blank');
|
||||
echo html::a('#', $lang->switchHelp, '', "onclick='toggleHelpLink();'");
|
||||
echo html::select('', $app->config->langs, $this->cookie->lang, 'onchange="selectLang(this.value)"');
|
||||
echo html::select('', $app->lang->themes, $this->cookie->theme, 'onchange="selectTheme(this.value)"');
|
||||
?>
|
||||
</td>
|
||||
<td class='a-right'><?php commonModel::printTopBar();?></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class='cont' id='navbar'>
|
||||
<tr><td id='mainmenu'><?php commonModel::printMainmenu($this->moduleName); commonModel::printSearchBox();?></td></tr>
|
||||
</table>
|
||||
</div>
|
||||
<table class='cont' id='navbar'>
|
||||
<tr><td id='modulemenu'><?php commonModel::printModuleMenu($this->moduleName);?></td></tr>
|
||||
</table>
|
||||
<div id='wrap'>
|
||||
<div class='outer'>
|
||||
|
||||
@@ -1,98 +1,98 @@
|
||||
<?php
|
||||
/**
|
||||
* The control file of svn currentModule of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class svn extends control
|
||||
{
|
||||
/**
|
||||
* Sync svn.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$this->svn->run();
|
||||
}
|
||||
|
||||
/**
|
||||
* Diff a file.
|
||||
*
|
||||
* @param string $url
|
||||
* @param int $revision
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function diff($url, $revision)
|
||||
{
|
||||
$url = helper::safe64Decode($url);
|
||||
$this->view->url = $url;
|
||||
$this->view->revision = $revision;
|
||||
$this->view->diff = $this->svn->diff($url, $revision);
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cat a file.
|
||||
*
|
||||
* @param string $url
|
||||
* @param int $revision
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function cat($url, $revision)
|
||||
{
|
||||
$url = helper::safe64Decode($url);
|
||||
$this->view->url = $url;
|
||||
$this->view->revision = $revision;
|
||||
$this->view->code = $this->svn->cat($url, $revision);
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync from the syncer by api.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function apiSync()
|
||||
{
|
||||
if($this->post->logs)
|
||||
{
|
||||
$repoRoot = $this->post->repoRoot;
|
||||
$logs = stripslashes($this->post->logs);
|
||||
$logs = simplexml_load_string($logs);
|
||||
foreach($logs->logentry as $entry)
|
||||
{
|
||||
$parsedLogs[] = $this->svn->convertLog($entry);
|
||||
}
|
||||
$parsedObjects = array('stories' => array(), 'tasks' => array(), 'bugs' => array());
|
||||
foreach($parsedLogs as $log)
|
||||
{
|
||||
$objects = $this->svn->parseComment($log->msg);
|
||||
if($objects)
|
||||
{
|
||||
$this->svn->saveAction2PMS($objects, $log, $repoRoot);
|
||||
if($objects['stories']) $parsedObjects['stories'] = array_merge($parsedObjects['stories'], $objects['stories']);
|
||||
if($objects['tasks']) $parsedObjects['tasks' ] = array_merge($parsedObjects['tasks'], $objects['tasks']);
|
||||
if($objects['bugs']) $parsedObjects['bugs'] = array_merge($parsedObjects['bugs'], $objects['bugs']);
|
||||
}
|
||||
}
|
||||
$parsedObjects['stories'] = array_unique($parsedObjects['stories']);
|
||||
$parsedObjects['tasks'] = array_unique($parsedObjects['tasks']);
|
||||
$parsedObjects['bugs'] = array_unique($parsedObjects['bugs']);
|
||||
$this->view->parsedObjects = $parsedObjects;
|
||||
$this->display();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* The control file of svn currentModule of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
class svn extends control
|
||||
{
|
||||
/**
|
||||
* Sync svn.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
$this->svn->run();
|
||||
}
|
||||
|
||||
/**
|
||||
* Diff a file.
|
||||
*
|
||||
* @param string $url
|
||||
* @param int $revision
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function diff($url, $revision)
|
||||
{
|
||||
$url = helper::safe64Decode($url);
|
||||
$this->view->url = $url;
|
||||
$this->view->revision = $revision;
|
||||
$this->view->diff = $this->svn->diff($url, $revision);
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cat a file.
|
||||
*
|
||||
* @param string $url
|
||||
* @param int $revision
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function cat($url, $revision)
|
||||
{
|
||||
$url = helper::safe64Decode($url);
|
||||
$this->view->url = $url;
|
||||
$this->view->revision = $revision;
|
||||
$this->view->code = $this->svn->cat($url, $revision);
|
||||
|
||||
$this->display();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sync from the syncer by api.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function apiSync()
|
||||
{
|
||||
if($this->post->logs)
|
||||
{
|
||||
$repoRoot = $this->post->repoRoot;
|
||||
$logs = stripslashes($this->post->logs);
|
||||
$logs = simplexml_load_string($logs);
|
||||
foreach($logs->logentry as $entry)
|
||||
{
|
||||
$parsedLogs[] = $this->svn->convertLog($entry);
|
||||
}
|
||||
$parsedObjects = array('stories' => array(), 'tasks' => array(), 'bugs' => array());
|
||||
foreach($parsedLogs as $log)
|
||||
{
|
||||
$objects = $this->svn->parseComment($log->msg);
|
||||
if($objects)
|
||||
{
|
||||
$this->svn->saveAction2PMS($objects, $log, $repoRoot);
|
||||
if($objects['stories']) $parsedObjects['stories'] = array_merge($parsedObjects['stories'], $objects['stories']);
|
||||
if($objects['tasks']) $parsedObjects['tasks' ] = array_merge($parsedObjects['tasks'], $objects['tasks']);
|
||||
if($objects['bugs']) $parsedObjects['bugs'] = array_merge($parsedObjects['bugs'], $objects['bugs']);
|
||||
}
|
||||
}
|
||||
$parsedObjects['stories'] = array_unique($parsedObjects['stories']);
|
||||
$parsedObjects['tasks'] = array_unique($parsedObjects['tasks']);
|
||||
$parsedObjects['bugs'] = array_unique($parsedObjects['bugs']);
|
||||
$this->view->parsedObjects = $parsedObjects;
|
||||
$this->display();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* The svn module zh-cn file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* Methods. */
|
||||
$lang->svn->common = 'Subversion';
|
||||
$lang->svn->cat = 'View code';
|
||||
$lang->svn->diff = 'Diff code';
|
||||
$lang->svn->apiSync = 'API: sync svn log';
|
||||
<?php
|
||||
/**
|
||||
* The svn module zh-cn file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* Methods. */
|
||||
$lang->svn->common = 'Subversion';
|
||||
$lang->svn->cat = 'View code';
|
||||
$lang->svn->diff = 'Diff code';
|
||||
$lang->svn->apiSync = 'API: sync svn log';
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* The svn module zh-cn file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* 方法列表。*/
|
||||
$lang->svn->common = 'Subversion';
|
||||
$lang->svn->cat = '查看源代码';
|
||||
$lang->svn->diff = '比较源代码';
|
||||
$lang->svn->apiSync = '接口:同步svn日志';
|
||||
<?php
|
||||
/**
|
||||
* The svn module zh-cn file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* 方法列表。*/
|
||||
$lang->svn->common = 'Subversion';
|
||||
$lang->svn->cat = '查看源代码';
|
||||
$lang->svn->diff = '比较源代码';
|
||||
$lang->svn->apiSync = '接口:同步svn日志';
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* The svn module zh-tw file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青島易軟天創網絡科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* 方法列表。*/
|
||||
$lang->svn->common = 'Subversion';
|
||||
$lang->svn->cat = '查看原始碼';
|
||||
$lang->svn->diff = '比較原始碼';
|
||||
$lang->svn->apiSync = '介面:同步svn日誌';
|
||||
<?php
|
||||
/**
|
||||
* The svn module zh-tw file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青島易軟天創網絡科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
/* 方法列表。*/
|
||||
$lang->svn->common = 'Subversion';
|
||||
$lang->svn->cat = '查看原始碼';
|
||||
$lang->svn->diff = '比較原始碼';
|
||||
$lang->svn->apiSync = '介面:同步svn日誌';
|
||||
|
||||
1268
module/svn/model.php
1268
module/svn/model.php
File diff suppressed because it is too large
Load Diff
@@ -1,299 +1,299 @@
|
||||
<?php
|
||||
/**
|
||||
* The syncer of svn.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
error_reporting(E_ALL ^ E_STRICT ^ E_WARNING);
|
||||
|
||||
include './config.php';
|
||||
include './api.class.php';
|
||||
|
||||
$syncer = new syncer($config);
|
||||
$syncer->run();
|
||||
|
||||
class syncer
|
||||
{
|
||||
/**
|
||||
* The svn binary svnClient.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $svnClient;
|
||||
|
||||
/**
|
||||
* The zentao client.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $zentaoClient;
|
||||
|
||||
/**
|
||||
* Repos.
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
public $repos = array();
|
||||
|
||||
/**
|
||||
* The log root.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $logRoot = '';
|
||||
|
||||
/**
|
||||
* The construct function.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($config)
|
||||
{
|
||||
$this->setConfig($config);
|
||||
$this->setTimeZone();
|
||||
$this->setRepos();
|
||||
$this->setLogRoot();
|
||||
$this->loginZentao();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set config.
|
||||
*
|
||||
* @param object $config
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setConfig($config)
|
||||
{
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set timezone.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setTimeZone()
|
||||
{
|
||||
date_default_timezone_set($this->config->timezone);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the repos.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setRepos()
|
||||
{
|
||||
if(!$this->config->svn->repos) die("You must set one svn repo.\n");
|
||||
$this->repos = $this->config->svn->repos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the log root.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setLogRoot()
|
||||
{
|
||||
$this->logRoot = './log/';
|
||||
if(!is_dir($this->logRoot)) mkdir($this->logRoot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Login to zentao.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function loginZentao()
|
||||
{
|
||||
if(!$this->config->zentao->path or !$this->config->zentao->user) die("You must set the zentao path and user.\n");
|
||||
$zentaoConfig = $this->config->zentao;
|
||||
$this->zentaoClient = new ztclient($zentaoConfig->path, $zentaoConfig->user, $zentaoConfig->password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
foreach($this->repos as $name => $repo)
|
||||
{
|
||||
$this->printLog("begin repo $name");
|
||||
$repo = (object)$repo;
|
||||
$repo->name = $name;
|
||||
|
||||
$this->setRepo($repo);
|
||||
|
||||
$savedRevision = $this->getSavedRevision();
|
||||
$this->printLog("start from revision $savedRevision");
|
||||
$logs = $this->getRepoLogs($repo, $savedRevision);
|
||||
$revisions = $this->getRevisionsFromLogs($logs);
|
||||
if(!$revisions)
|
||||
{
|
||||
$this->printLog("no logs");
|
||||
continue;
|
||||
}
|
||||
$this->printLog('fetched ' . count($revisions) . ' logs');
|
||||
|
||||
$this->printLog('begin posting logs');
|
||||
$objects = $this->zentaoClient->post('svn', 'apiSync', array('logs' => $logs, 'repoRoot' => $this->repoRoot));
|
||||
$objects = $objects->parsedObjects;
|
||||
|
||||
$this->printLog('parsed objects:');
|
||||
echo 'story: ' . join(',', (array)$objects->stories) . "\n";
|
||||
echo 'task: ' . join(',', (array)$objects->tasks) . "\n";
|
||||
echo 'bugs: ' . join(',', (array)$objects->bugs) . "\n";
|
||||
|
||||
$this->saveLastRevision(max($revisions));
|
||||
echo "----------------------\n";
|
||||
}
|
||||
$this->printLog("sleeping {$this->config->sleep} seconds");
|
||||
sleep($this->config->sleep);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set repo.
|
||||
*
|
||||
* @param object $repo
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setRepo($repo)
|
||||
{
|
||||
$this->setClient($repo);
|
||||
$this->setLogFile($repo->name);
|
||||
$this->setRepoRoot($repo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the svn binary svnClient of a repo.
|
||||
*
|
||||
* @param object $repo
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setClient($repo)
|
||||
{
|
||||
if($this->config->svn->client == '') die("You must set the svn svnClient file.\n");
|
||||
$this->svnClient = $this->config->svn->client . " --non-interactive";
|
||||
if(isset($repo->username)) $this->svnClient .= " --username $repo->username --password $repo->password --no-auth-cache";
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the log file of a repo.
|
||||
*
|
||||
* @param string $repoName
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setLogFile($repoName)
|
||||
{
|
||||
$this->logFile = $this->logRoot . $repoName;
|
||||
}
|
||||
|
||||
/**
|
||||
* set the root path of a repo.
|
||||
*
|
||||
* @param object $repo
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setRepoRoot($repo)
|
||||
{
|
||||
$cmd = $this->svnClient . " info --xml $repo->path";
|
||||
$info = `$cmd`;
|
||||
$info = simplexml_load_string($info);
|
||||
$repoRoot = (string)$info->entry->repository->root;
|
||||
$this->repoRoot = $repoRoot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get repo logs.
|
||||
*
|
||||
* @param object $repo
|
||||
* @param int $fromRevision
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getRepoLogs($repo, $fromRevision)
|
||||
{
|
||||
$parsedLogs = array();
|
||||
|
||||
/* The svn log command. */
|
||||
$cmd = $this->svnClient . " log -r $fromRevision:HEAD -v --xml $repo->path";
|
||||
$logs = `$cmd`;
|
||||
|
||||
return $logs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the saved revision.
|
||||
*
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getSavedRevision()
|
||||
{
|
||||
if(!file_exists($this->logFile)) return 0;
|
||||
return (int)trim(file_get_contents($this->logFile));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get revisons from logs.
|
||||
*
|
||||
* @param string $logs
|
||||
* @access public
|
||||
* @return array|bool
|
||||
*/
|
||||
public function getRevisionsFromLogs($logs)
|
||||
{
|
||||
if(!preg_match_all('|revision="(.*)"|', $logs, $results)) return false;
|
||||
$revisions = $results[1];
|
||||
return $revisions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the last revision.
|
||||
*
|
||||
* @param int $revision
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function saveLastRevision($revision)
|
||||
{
|
||||
file_put_contents($this->logFile, $revision);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pring log.
|
||||
*
|
||||
* @param sting $log
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function printLog($log)
|
||||
{
|
||||
echo date('Y-m-d H:i:s') . " $log\n";
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* The syncer of svn.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package svn
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
error_reporting(E_ALL ^ E_STRICT ^ E_WARNING);
|
||||
|
||||
include './config.php';
|
||||
include './api.class.php';
|
||||
|
||||
$syncer = new syncer($config);
|
||||
$syncer->run();
|
||||
|
||||
class syncer
|
||||
{
|
||||
/**
|
||||
* The svn binary svnClient.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $svnClient;
|
||||
|
||||
/**
|
||||
* The zentao client.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $zentaoClient;
|
||||
|
||||
/**
|
||||
* Repos.
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
public $repos = array();
|
||||
|
||||
/**
|
||||
* The log root.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $logRoot = '';
|
||||
|
||||
/**
|
||||
* The construct function.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($config)
|
||||
{
|
||||
$this->setConfig($config);
|
||||
$this->setTimeZone();
|
||||
$this->setRepos();
|
||||
$this->setLogRoot();
|
||||
$this->loginZentao();
|
||||
}
|
||||
|
||||
/**
|
||||
* Set config.
|
||||
*
|
||||
* @param object $config
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setConfig($config)
|
||||
{
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set timezone.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setTimeZone()
|
||||
{
|
||||
date_default_timezone_set($this->config->timezone);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the repos.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setRepos()
|
||||
{
|
||||
if(!$this->config->svn->repos) die("You must set one svn repo.\n");
|
||||
$this->repos = $this->config->svn->repos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the log root.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setLogRoot()
|
||||
{
|
||||
$this->logRoot = './log/';
|
||||
if(!is_dir($this->logRoot)) mkdir($this->logRoot);
|
||||
}
|
||||
|
||||
/**
|
||||
* Login to zentao.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function loginZentao()
|
||||
{
|
||||
if(!$this->config->zentao->path or !$this->config->zentao->user) die("You must set the zentao path and user.\n");
|
||||
$zentaoConfig = $this->config->zentao;
|
||||
$this->zentaoClient = new ztclient($zentaoConfig->path, $zentaoConfig->user, $zentaoConfig->password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Run.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
while(true)
|
||||
{
|
||||
foreach($this->repos as $name => $repo)
|
||||
{
|
||||
$this->printLog("begin repo $name");
|
||||
$repo = (object)$repo;
|
||||
$repo->name = $name;
|
||||
|
||||
$this->setRepo($repo);
|
||||
|
||||
$savedRevision = $this->getSavedRevision();
|
||||
$this->printLog("start from revision $savedRevision");
|
||||
$logs = $this->getRepoLogs($repo, $savedRevision);
|
||||
$revisions = $this->getRevisionsFromLogs($logs);
|
||||
if(!$revisions)
|
||||
{
|
||||
$this->printLog("no logs");
|
||||
continue;
|
||||
}
|
||||
$this->printLog('fetched ' . count($revisions) . ' logs');
|
||||
|
||||
$this->printLog('begin posting logs');
|
||||
$objects = $this->zentaoClient->post('svn', 'apiSync', array('logs' => $logs, 'repoRoot' => $this->repoRoot));
|
||||
$objects = $objects->parsedObjects;
|
||||
|
||||
$this->printLog('parsed objects:');
|
||||
echo 'story: ' . join(',', (array)$objects->stories) . "\n";
|
||||
echo 'task: ' . join(',', (array)$objects->tasks) . "\n";
|
||||
echo 'bugs: ' . join(',', (array)$objects->bugs) . "\n";
|
||||
|
||||
$this->saveLastRevision(max($revisions));
|
||||
echo "----------------------\n";
|
||||
}
|
||||
$this->printLog("sleeping {$this->config->sleep} seconds");
|
||||
sleep($this->config->sleep);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set repo.
|
||||
*
|
||||
* @param object $repo
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setRepo($repo)
|
||||
{
|
||||
$this->setClient($repo);
|
||||
$this->setLogFile($repo->name);
|
||||
$this->setRepoRoot($repo);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the svn binary svnClient of a repo.
|
||||
*
|
||||
* @param object $repo
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setClient($repo)
|
||||
{
|
||||
if($this->config->svn->client == '') die("You must set the svn svnClient file.\n");
|
||||
$this->svnClient = $this->config->svn->client . " --non-interactive";
|
||||
if(isset($repo->username)) $this->svnClient .= " --username $repo->username --password $repo->password --no-auth-cache";
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the log file of a repo.
|
||||
*
|
||||
* @param string $repoName
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setLogFile($repoName)
|
||||
{
|
||||
$this->logFile = $this->logRoot . $repoName;
|
||||
}
|
||||
|
||||
/**
|
||||
* set the root path of a repo.
|
||||
*
|
||||
* @param object $repo
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setRepoRoot($repo)
|
||||
{
|
||||
$cmd = $this->svnClient . " info --xml $repo->path";
|
||||
$info = `$cmd`;
|
||||
$info = simplexml_load_string($info);
|
||||
$repoRoot = (string)$info->entry->repository->root;
|
||||
$this->repoRoot = $repoRoot;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get repo logs.
|
||||
*
|
||||
* @param object $repo
|
||||
* @param int $fromRevision
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getRepoLogs($repo, $fromRevision)
|
||||
{
|
||||
$parsedLogs = array();
|
||||
|
||||
/* The svn log command. */
|
||||
$cmd = $this->svnClient . " log -r $fromRevision:HEAD -v --xml $repo->path";
|
||||
$logs = `$cmd`;
|
||||
|
||||
return $logs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the saved revision.
|
||||
*
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getSavedRevision()
|
||||
{
|
||||
if(!file_exists($this->logFile)) return 0;
|
||||
return (int)trim(file_get_contents($this->logFile));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get revisons from logs.
|
||||
*
|
||||
* @param string $logs
|
||||
* @access public
|
||||
* @return array|bool
|
||||
*/
|
||||
public function getRevisionsFromLogs($logs)
|
||||
{
|
||||
if(!preg_match_all('|revision="(.*)"|', $logs, $results)) return false;
|
||||
$revisions = $results[1];
|
||||
return $revisions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the last revision.
|
||||
*
|
||||
* @param int $revision
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function saveLastRevision($revision)
|
||||
{
|
||||
file_put_contents($this->logFile, $revision);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pring log.
|
||||
*
|
||||
* @param sting $log
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function printLog($log)
|
||||
{
|
||||
echo date('Y-m-d H:i:s') . " $log\n";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
<?php
|
||||
/**
|
||||
* The export view file of file module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Congzhi Chen <congzhi@cnezsoft.com>
|
||||
* @package file
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div class='box-title'><?php echo "$url@$revision";?></div>
|
||||
<div class='box-content'><xmp><?php echo $code;?></xmp></div>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
<?php
|
||||
/**
|
||||
* The export view file of file module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Congzhi Chen <congzhi@cnezsoft.com>
|
||||
* @package file
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<div class='box-title'><?php echo "$url@$revision";?></div>
|
||||
<div class='box-content'><xmp><?php echo $code;?></xmp></div>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
<?php
|
||||
/**
|
||||
* The export view file of file module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Congzhi Chen <congzhi@cnezsoft.com>
|
||||
* @package file
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<?php $catLink = inlink('cat', 'url=' . helper::safe64Encode($url) . "&revision=$revision");?>
|
||||
<div class='box-title'><?php echo html::a($catLink, "$url@$revision");?></div>
|
||||
<div class='box-content'><xmp><?php echo $diff;?></xmp></div>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
<?php
|
||||
/**
|
||||
* The export view file of file module of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2012 青岛易软天创网络科技有限公司 (QingDao Nature Easy Soft Network Technology Co,LTD www.cnezsoft.com)
|
||||
* @license LGPL (http://www.gnu.org/licenses/lgpl.html)
|
||||
* @author Congzhi Chen <congzhi@cnezsoft.com>
|
||||
* @package file
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.lite.html.php';?>
|
||||
<?php $catLink = inlink('cat', 'url=' . helper::safe64Encode($url) . "&revision=$revision");?>
|
||||
<div class='box-title'><?php echo html::a($catLink, "$url@$revision");?></div>
|
||||
<div class='box-content'><xmp><?php echo $diff;?></xmp></div>
|
||||
<?php include '../../common/view/footer.lite.html.php';?>
|
||||
|
||||
Reference in New Issue
Block a user