Merge branch '15.6' into sprint/167_wangyidong

This commit is contained in:
王怡栋
2021-10-18 08:44:13 +08:00
241 changed files with 3408 additions and 1224 deletions
+1 -1
View File
@@ -12,7 +12,7 @@
$lang->action->common = 'Log';
$lang->action->product = $lang->productCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->executionCommon;
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = 'Object Type';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Objekt Name';
+18 -13
View File
@@ -11,19 +11,24 @@
*/
global $config;
$lang->action->common = 'Log';
$lang->action->product = $lang->productCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->executionCommon;
$lang->action->objectType = 'Object Type';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Object Name';
$lang->action->actor = 'User';
$lang->action->action = 'Action';
$lang->action->actionID = 'Action ID';
$lang->action->date = 'Date';
$lang->action->extra = 'Extra';
$lang->action->system = 'System';
$lang->action->common = 'Log';
$lang->action->id = 'ID';
$lang->action->product = $lang->productCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = 'Object Type';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Object Name';
$lang->action->actor = 'User';
$lang->action->action = 'Action';
$lang->action->actionID = 'Action ID';
$lang->action->date = 'Date';
$lang->action->extra = 'Extra';
$lang->action->system = 'System';
$lang->action->url = 'URL';
$lang->action->contentType = 'Content Type';
$lang->action->data = 'Data';
$lang->action->result = 'Result';
$lang->action->trash = 'Recycle';
$lang->action->undelete = 'Restore';
+2 -2
View File
@@ -11,8 +11,8 @@
*/
$lang->action->common = 'Log';
$lang->action->product = $lang->productCommon;
$lang->action->project = $lang->executionCommon;
$lang->action->execution = $lang->executionCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = "Type d'objet";
$lang->action->objectID = 'ID';
$lang->action->objectName = "Nom de l'object";
+1 -1
View File
@@ -12,7 +12,7 @@
$lang->action->common = 'Nhật ký';
$lang->action->product = $lang->productCommon;
$lang->action->project = 'Project';
$lang->action->execution = $lang->executionCommon;
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = 'Loại đối tượng';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Tên đối tượng';
+18 -13
View File
@@ -11,19 +11,24 @@
*/
global $config;
$lang->action->common = '系统日志';
$lang->action->product = $lang->productCommon;
$lang->action->project = '项目';
$lang->action->execution = $lang->executionCommon;
$lang->action->objectType = '对象类型';
$lang->action->objectID = '对象ID';
$lang->action->objectName = '对象名称';
$lang->action->actor = '操作者';
$lang->action->action = '动作';
$lang->action->actionID = '记录ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->system = '系统';
$lang->action->common = '系统日志';
$lang->action->id = '编号';
$lang->action->product = $lang->productCommon;
$lang->action->project = '项目';
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = '对象类型';
$lang->action->objectID = '对象ID';
$lang->action->objectName = '对象名称';
$lang->action->actor = '操作者';
$lang->action->action = '动作';
$lang->action->actionID = '记录ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->system = '系统';
$lang->action->url = '网址';
$lang->action->contentType = '内容类型';
$lang->action->data = '数据';
$lang->action->result = '结果';
$lang->action->trash = '回收站';
$lang->action->undelete = '还原';
+18 -13
View File
@@ -11,19 +11,24 @@
*/
global $config;
$lang->action->common = '系統日誌';
$lang->action->product = $lang->productCommon;
$lang->action->project = '項目';
$lang->action->execution = $lang->executionCommon;
$lang->action->objectType = '對象類型';
$lang->action->objectID = '對象ID';
$lang->action->objectName = '對象名稱';
$lang->action->actor = '操作者';
$lang->action->action = '動作';
$lang->action->actionID = '記錄ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->system = '系統';
$lang->action->common = '系統日誌';
$lang->action->id = '編號';
$lang->action->product = $lang->productCommon;
$lang->action->project = '項目';
$lang->action->execution = $lang->executionCommon;
$lang->action->objectType = '對象類型';
$lang->action->objectID = '對象ID';
$lang->action->objectName = '對象名稱';
$lang->action->actor = '操作者';
$lang->action->action = '動作';
$lang->action->actionID = '記錄ID';
$lang->action->date = '日期';
$lang->action->extra = '附加值';
$lang->action->system = '系統';
$lang->action->url = '網址';
$lang->action->contentType = '內容類型';
$lang->action->data = '數據';
$lang->action->result = '結果';
$lang->action->trash = '資源回收筒';
$lang->action->undelete = '還原';
+5 -5
View File
@@ -49,7 +49,7 @@ class actionModel extends model
$action->date = helper::now();
$action->extra = $extra;
if($objectType == 'story' and $actionType !== 'reviewed' and strpos(',reviewclosed,passreviewed,clarifyreviewed,', ",$actionType,") !== false) $action->actor = $this->lang->action->system;
if($objectType == 'story' and strpos(',reviewpassed,reviewrejected,reviewclarified,', ",$actionType,") !== false) $action->actor = $this->lang->action->system;
/* Use purifier to process comment. Fix bug #2683. */
$action->comment = fixer::stripDataTags($comment);
@@ -338,7 +338,7 @@ class actionModel extends model
elseif($actionName == 'moved')
{
$name = $this->dao->select('name')->from(TABLE_PROJECT)->where('id')->eq($action->extra)->fetch('name');
if($name) $action->extra = common::hasPriv('project', 'task') ? html::a(helper::createLink('project', 'task', "projectID=$action->extra"), "#$action->extra " . $name) : "#$action->extra " . $name;
if($name) $action->extra = common::hasPriv('execution', 'task') ? html::a(helper::createLink('execution', 'task', "executionID=$action->extra"), "#$action->extra " . $name) : "#$action->extra " . $name;
}
elseif($actionName == 'frombug' and common::hasPriv('bug', 'view'))
{
@@ -774,7 +774,7 @@ class actionModel extends model
/* If is project, select its related. */
$executions = array();
if(is_numeric($projectID)) $executions = $this->loadModel('execution')->getPairs($projectID);
if(is_numeric($projectID) and $executionID == 'all') $executions = $this->loadModel('execution')->getPairs($projectID);
$this->loadModel('doc');
$libs = $this->doc->getLibs('includeDeleted') + array('' => '');
@@ -864,8 +864,8 @@ class actionModel extends model
}
if($this->session->actionQuery == false) $this->session->set('actionQuery', ' 1 = 1');
$allProducts = "`product` = 'all'";
$allProjects = "`project` = 'all'";
$allProducts = "`product` = 'all'";
$allProjects = "`project` = 'all'";
$allExecutions = "`execution` = 'all'";
$actionQuery = $this->session->actionQuery;
-4
View File
@@ -76,10 +76,6 @@ $lang->block->selectProduct = 'Product selection';
$lang->block->of = ' von ';
$lang->block->remain = 'Left';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Name';
$lang->block->params->value = 'Wert';
$lang->block->createBlock = 'InfoBlock erstellen';
$lang->block->editBlock = 'Bearbeiten';
$lang->block->ordersSaved = 'Sortierung gespeichert.';
+2 -4
View File
@@ -12,6 +12,8 @@
global $config;
$lang->block = new stdclass();
$lang->block->common = 'Block';
$lang->block->id = 'ID';
$lang->block->params = 'Params';
$lang->block->name = 'Name';
$lang->block->style = 'Style';
$lang->block->grid = 'Position';
@@ -76,10 +78,6 @@ $lang->block->selectProduct = 'Product selection';
$lang->block->of = ' of ';
$lang->block->remain = 'Left';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Name';
$lang->block->params->value = 'Value';
$lang->block->createBlock = 'Add Block';
$lang->block->editBlock = 'Edit Block';
$lang->block->ordersSaved = 'The order is saved.';
-4
View File
@@ -76,10 +76,6 @@ $lang->block->selectProduct = 'Product selection';
$lang->block->of = ' di ';
$lang->block->remain = 'Left';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Nom';
$lang->block->params->value = 'Valeur';
$lang->block->createBlock = 'Ajouter Bloc';
$lang->block->editBlock = 'Editer Bloc';
$lang->block->ordersSaved = 'L´ordre a été sauvegardé.';
-4
View File
@@ -76,10 +76,6 @@ $lang->block->selectProduct = 'Product selection';
$lang->block->of = ' thực ';
$lang->block->remain = 'Left';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Tên';
$lang->block->params->value = 'Giá trị';
$lang->block->createBlock = 'Thêm Block';
$lang->block->editBlock = 'Sửa Block';
$lang->block->ordersSaved = 'Thứ tự đã được lưu';
+2 -4
View File
@@ -12,6 +12,8 @@
global $config;
$lang->block = new stdclass();
$lang->block->common = '区块';
$lang->block->id = '编号';
$lang->block->params = '参数';
$lang->block->name = '区块名称';
$lang->block->style = '外观';
$lang->block->grid = '位置';
@@ -76,10 +78,6 @@ $lang->block->selectProduct = '选择产品';
$lang->block->of = '的';
$lang->block->remain = '剩余工时';
$lang->block->params = new stdclass();
$lang->block->params->name = '参数名称';
$lang->block->params->value = '参数值';
$lang->block->createBlock = '添加区块';
$lang->block->editBlock = '编辑区块';
$lang->block->ordersSaved = '排序已保存';
+3 -5
View File
@@ -12,6 +12,8 @@
global $config;
$lang->block = new stdclass();
$lang->block->common = '區塊';
$lang->block->id = '編號';
$lang->block->params = '參數';
$lang->block->name = '區塊名稱';
$lang->block->style = '外觀';
$lang->block->grid = '位置';
@@ -76,10 +78,6 @@ $lang->block->selectProduct = '選擇產品';
$lang->block->of = '的';
$lang->block->remain = '剩餘工時';
$lang->block->params = new stdclass();
$lang->block->params->name = '參數名稱';
$lang->block->params->value = '參數值';
$lang->block->createBlock = '添加區塊';
$lang->block->editBlock = '編輯區塊';
$lang->block->ordersSaved = '排序已保存';
@@ -538,7 +536,7 @@ $lang->block->typeList->testtask['done'] = '已測版本';
$lang->block->typeList->testtask['all'] = '全部';
$lang->block->modules['project']->moreLinkList = new stdclass();
$lang->block->modules['project']->moreLinkList->recentproject = 'project|browse|';
$lang->block->modules['project']->moreLinkList->recentproject = $config->systemMode == 'new' ? 'project|browse|' : 'execution|all|';
$lang->block->modules['project']->moreLinkList->statistic = 'project|browse|';
$lang->block->modules['project']->moreLinkList->project = 'project|browse|';
$lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|';
+1 -1
View File
@@ -17,7 +17,7 @@
.table .c-burn {width: 150px;}
</style>
<?php if(empty($executionStats)): ?>
<div class='empty-tip'><?php common::printLink('execution', 'create', '', "<i class='icon-plus'></i> " . $lang->execution->create, '', "class='btn btn-primary'")?></div>
<div class='empty-tip'><?php common::printLink('execution', 'create', '', "<i class='icon-plus'></i> " . $lang->execution->create, '', "class='btn btn-primary' data-app='execution'")?></div>
<?php else:?>
<div class="panel-body has-table scrollbar-hover">
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-projects tablesorter'>
@@ -17,7 +17,7 @@
#cards .project-infos > span {display: inline-block; line-height: 12px;}
#cards .project-infos > span > .icon {font-size: 12px; display: inline-block; position: relative; top: -1px}
#cards .project-infos > span + span {margin-left: 10px;}
#cards .project-detail {position: absolute; bottom: 16px; left: 16px; right: 16px; font-size: 12px;}
#cards .project-detail {position: absolute; bottom: 16px; left: 16px; right: 16px; font-size: 12px; padding-left: 10px;}
#cards .project-detail > p {margin-bottom: 8px;}
#cards .project-detail .progress {height: 4px;}
#cards .project-detail .progress-text-left .progress-text {width: 50px; left: -50px;}
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
?>
<?php $this->app->loadLang('story');?>
<?php if(empty($stories)): ?>
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
<?php else:?>
+1 -1
View File
@@ -26,7 +26,7 @@ $config->bug->list->allFields = 'id, module, execution, story, task,
$config->bug->list->defaultFields = 'id,severity,pri,title,openedBy,assignedTo,resolvedBy,resolution';
$config->bug->list->exportFields = 'id, product, branch, module, execution, story, task,
$config->bug->list->exportFields = 'id, product, branch, module, project, execution, story, task,
title, keywords, severity, pri, type, os, browser,
steps, status, deadline, activatedCount, confirmed, mailto,
openedBy, openedDate, openedBuild,
+6 -4
View File
@@ -574,12 +574,12 @@ class bug extends control
/* Set custom. */
foreach(explode(',', $this->config->bug->list->customCreateFields) as $field) $customFields[$field] = $this->lang->bug->$field;
$title = isset($this->products[$productID]) ? $this->products[$productID] . $this->lang->colon . $this->lang->bug->create : $this->lang->bug->create;
$this->view->title = $title;
$this->view->title = isset($this->products[$productID]) ? $this->products[$productID] . $this->lang->colon . $this->lang->bug->create : $this->lang->bug->create;
$this->view->customFields = $customFields;
$this->view->showFields = $this->config->bug->custom->createFields;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('bug', 'browse', "productID=$productID") : '';
$this->view->products = $products;
$this->view->productID = $productID;
$this->view->productName = isset($this->products[$productID]) ? $this->products[$productID] : '';
@@ -724,7 +724,7 @@ class bug extends control
/* Judge bug exits or not. */
$bugID = (int)$bugID;
$bug = $this->bug->getById($bugID, true);
if(!$bug) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$bug) die(js::error($this->lang->notFound) . js::locate($this->createLink('qa', 'index')));
$this->session->set('storyList', '', 'product');
$this->session->set('projectList', $this->app->getURI(true) . "#app={$this->app->tab}", 'project');
@@ -1719,6 +1719,7 @@ class bug extends control
/* Get users, products and executions. */
$users = $this->loadModel('user')->getPairs('noletter');
$products = $this->loadModel('product')->getPairs();
$projects = $this->loadModel('project')->getPairsByProgram();
$executions = $this->loadModel('execution')->getPairs($this->projectID, 'all', 'all');
/* Get related objects id lists. */
@@ -1777,6 +1778,7 @@ class bug extends control
/* fill some field with useful value. */
$bug->product = !isset($products[$bug->product]) ? '' : $products[$bug->product] . "(#$bug->product)";
$bug->project = !isset($projects[$bug->project]) ? '' : $projects[$bug->project] . "(#$bug->project)";
$bug->execution = !isset($executions[$bug->execution]) ? '' : $executions[$bug->execution] . "(#$bug->execution)";
$bug->story = !isset($relatedStories[$bug->story]) ? '' : $relatedStories[$bug->story] . "(#$bug->story)";
$bug->task = !isset($relatedTasks[$bug->task]) ? '' : $relatedTasks[$bug->task] . "($bug->task)";
@@ -1802,7 +1804,7 @@ class bug extends control
if(isset($users[$bug->lastEditedBy])) $bug->lastEditedBy = $users[$bug->lastEditedBy];
if(isset($users[$bug->closedBy])) $bug->closedBy = $users[$bug->closedBy];
$bug->title = htmlspecialchars_decode($bug->title,ENT_QUOTES);
$bug->title = htmlspecialchars_decode($bug->title,ENT_QUOTES);
if($bug->linkBug)
{
+1
View File
@@ -44,3 +44,4 @@ html[lang='en'] #deadlineTd .input-group-addon {padding: 5px 18px;}
#typeBox .required:after {right: 1px;}
#osBox .required:after {right: 1px;}
#osBox {width: 190px;}
#projectBox .required:after {right: 1px;}
+7
View File
@@ -1,4 +1,11 @@
$(function()
{
if($('#bugList thead th.c-title').width() < 150) $('#bugList thead th.c-title').width(150);
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
+7
View File
@@ -30,6 +30,13 @@ $lang->bug->pri = 'Priority';
$lang->bug->type = 'Type';
$lang->bug->os = 'OS';
$lang->bug->browser = 'Browser';
$lang->bug->hardware = 'Hardware';
$lang->bug->result = 'Result';
$lang->bug->repo = 'Repo';
$lang->bug->lines = 'Lines';
$lang->bug->v1 = 'Version A';
$lang->bug->v2 = 'Version B';
$lang->bug->repoType = 'Repo Type';
$lang->bug->steps = 'Repro Steps';
$lang->bug->status = 'Status';
$lang->bug->statusAB = 'Status';
+7
View File
@@ -30,6 +30,13 @@ $lang->bug->pri = '优先级';
$lang->bug->type = 'Bug类型';
$lang->bug->os = '操作系统';
$lang->bug->browser = '浏览器';
$lang->bug->hardware = '硬件';
$lang->bug->result = '结果';
$lang->bug->repo = '所属版本库';
$lang->bug->lines = '代码行';
$lang->bug->v1 = '版本1';
$lang->bug->v2 = '版本2';
$lang->bug->repoType = '版本库类型';
$lang->bug->steps = '重现步骤';
$lang->bug->status = 'Bug状态';
$lang->bug->statusAB = '状态';
+7
View File
@@ -30,6 +30,13 @@ $lang->bug->pri = '優先順序';
$lang->bug->type = 'Bug類型';
$lang->bug->os = '操作系統';
$lang->bug->browser = '瀏覽器';
$lang->bug->hardware = '硬件';
$lang->bug->result = '結果';
$lang->bug->repo = '所屬版本庫';
$lang->bug->lines = '代碼行';
$lang->bug->v1 = '版本1';
$lang->bug->v2 = '版本2';
$lang->bug->repoType = '版本庫類型';
$lang->bug->steps = '重現步驟';
$lang->bug->status = 'Bug狀態';
$lang->bug->statusAB = '狀態';
+1 -1
View File
@@ -202,7 +202,7 @@ class bugModel extends model
foreach(explode(',', $this->config->bug->create->requiredFields) as $field)
{
$field = trim($field);
if($field and empty($bug->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->$field)));
if($field and isset($bug->$field) and empty($bug->$field)) die(js::alert(sprintf($this->lang->error->notempty, $this->lang->bug->$field)));
}
$bugs[$i] = $bug;
+2 -1
View File
@@ -328,7 +328,8 @@ js::set('moduleID', $moduleID);
<?php $browseLink = $this->session->bugList ? $this->session->bugList : $this->inlink('browse', "productID=$productID");?>
<?php echo html::submitButton();?>
<?php if($caseID) echo html::a($browseLink, $lang->goback, '', 'class="btn btn-wide"');?>
<?php if(!$caseID) echo html::backButton();?>
<?php if(!$caseID and $gobackLink) echo html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"');?>
<?php if(!$caseID and !$gobackLink) echo html::backButton();?>
<?php echo html::hidden('case', (int)$caseID) . html::hidden('caseVersion', (int)$version);?>
<?php echo html::hidden('result', (int)$runID) . html::hidden('testtask', empty($testtask) ? 0 : $testtask->id);?>
</td>
+4 -4
View File
@@ -46,7 +46,7 @@ class build extends control
if($this->app->tab == 'project')
{
$this->loadModel('project')->setMenu($projectID);
$executions = $this->execution->getPairs($projectID);
$executions = $this->execution->getPairs($projectID, 'all', 'stagefilter');
$executionID = empty($executionID) ? key($executions) : $executionID;
$this->session->set('project', $projectID);
}
@@ -136,7 +136,7 @@ class build extends control
$execution->name = '';
}
$executions = $this->product->getExecutionPairsByProduct($build->product, $build->branch, 'id_desc', $this->session->project);
$executions = $this->product->getExecutionPairsByProduct($build->product, $build->branch, 'id_desc', $this->session->project, 'stagefilter');
if(!isset($executions[$build->execution])) $executions[$build->execution] = $execution->name;
$productGroups = $this->execution->getProducts($build->execution);
@@ -188,7 +188,7 @@ class build extends control
if(!$build)
{
if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'fail', 'code' => 404, 'message' => '404 Not found'));
die(js::error($this->lang->notFound) . js::locate('back'));
die(js::error($this->lang->notFound) . js::locate($this->createLink('execution', 'all')));
}
$this->session->project = $build->project;
@@ -565,7 +565,7 @@ class build extends control
/* Set menu. */
$build = $this->build->getByID($buildID);
$product = $this->loadModel('product')->getByID($build->product);
$this->loadModel('execution')->setMenu($this->execution->getPairs($build->project), $build->execution);
$this->loadModel('execution')->setMenu($build->execution);
/* Load pager. */
$this->app->loadClass('pager', $static = true);
+2
View File
@@ -29,6 +29,7 @@ $lang->build->basicInfo = 'Basic Info';
$lang->build->id = 'ID';
$lang->build->product = $lang->productCommon;
$lang->build->project = 'Project';
$lang->build->branch = 'Platform/Branch';
$lang->build->execution = $lang->executionCommon;
$lang->build->name = 'Name';
@@ -37,6 +38,7 @@ $lang->build->builder = 'Builder';
$lang->build->scmPath = 'SCM Path';
$lang->build->filePath = 'File Path';
$lang->build->desc = 'Description';
$lang->build->mailto = 'Mailto';
$lang->build->files = 'Files';
$lang->build->last = 'Last Build';
$lang->build->packageType = 'Package Type';
+2
View File
@@ -29,6 +29,7 @@ $lang->build->basicInfo = '基本信息';
$lang->build->id = 'ID';
$lang->build->product = $lang->productCommon;
$lang->build->project = '所属项目';
$lang->build->branch = '平台/分支';
$lang->build->execution = '所属' . $lang->executionCommon;
$lang->build->name = '名称编号';
@@ -37,6 +38,7 @@ $lang->build->builder = '构建者';
$lang->build->scmPath = '源代码地址';
$lang->build->filePath = '下载地址';
$lang->build->desc = '描述';
$lang->build->mailto = 'Mailto';
$lang->build->files = '上传发行包';
$lang->build->last = '上个版本';
$lang->build->packageType = '包类型';
+2
View File
@@ -29,6 +29,7 @@ $lang->build->basicInfo = '基本信息';
$lang->build->id = 'ID';
$lang->build->product = $lang->productCommon;
$lang->build->project = '所屬項目';
$lang->build->branch = '平台/分支';
$lang->build->execution = '所屬' . $lang->executionCommon;
$lang->build->name = '名稱編號';
@@ -37,6 +38,7 @@ $lang->build->builder = '構建者';
$lang->build->scmPath = '原始碼地址';
$lang->build->filePath = '下載地址';
$lang->build->desc = '描述';
$lang->build->mailto = 'Mailto';
$lang->build->files = '上傳發行包';
$lang->build->last = '上個版本';
$lang->build->packageType = '包類型';
+1 -1
View File
@@ -377,7 +377,7 @@ class caselib extends control
{
$libID = (int)$libID;
$lib = $this->caselib->getById($libID, true);
if(!isset($lib->id)) die(js::error($this->lang->notFound) . js::locate('back'));
if(!isset($lib->id)) die(js::error($this->lang->notFound) . js::locate($this->createLink('qa', 'index')));
/* Set lib menu. */
$libraries = $this->caselib->getLibraries();
+10
View File
@@ -20,3 +20,13 @@ function confirmBatchDelete(actionLink)
if(confirm(batchDelete)) setFormAction(actionLink);
return false;
}
$(function()
{
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
+65 -26
View File
@@ -119,6 +119,8 @@ class commonModel extends model
$user->id = 0;
$user->account = 'guest';
$user->realname = 'guest';
$user->dept = 0;
$user->avatar = '';
$user->role = 'guest';
$user->admin = false;
$user->rights = $this->loadModel('user')->authorize('guest');
@@ -223,6 +225,7 @@ class commonModel extends model
$user = $this->app->user;
$user->rights = $this->loadModel('user')->authorize($user->account);
$user->groups = $this->user->getGroups($user->account);
$user->admin = strpos($this->app->company->admins, ",{$user->account},") !== false;
$this->session->set('user', $user);
$this->app->user = $this->session->user;
if(commonModel::hasPriv($module, $method)) return true;
@@ -358,9 +361,21 @@ class commonModel extends model
$html .= "<i class='icon icon-plus-solid-circle text-secondary'></i>";
$html .= "</a><ul class='dropdown-menu pull-right create-list'>";
/* Initialize the default values. */
$showCreateList = $needPrintDivider = false;
$productID = isset($_SESSION['product']) ? $_SESSION['product'] : 0;
if(!$productID and $app->user->view->products) $productID = current(explode(',', $app->user->view->products));
/* Get default product id. */
$deletedProducts = $app->dbh->query("SELECT id FROM " . TABLE_PRODUCT . " WHERE `deleted` = '1'")->fetchAll();
$deletedProductIds = array();
foreach($deletedProducts as $product) $deletedProductIds[] = $product->id;
$productID = (isset($_SESSION['product']) and !in_array($_SESSION['product'], $deletedProductIds)) ? $_SESSION['product'] : 0;
if(!$productID and $app->user->view->products)
{
$viewProducts = explode(',', $app->user->view->products);
$viewProducts = array_diff($viewProducts, $deletedProductIds);
$productID = current($viewProducts);
}
/* Check whether the creation permission is available, and print create buttons. */
foreach($lang->createIcons as $objectType => $objectIcon)
@@ -392,13 +407,21 @@ class commonModel extends model
$attr = $objectType == 'doc' ? "class='iframe' data-width='650px'" : '';
$params = '';
if(strpos('bug|testcase|story', $objectType) !== false) $params = "productID=$productID";
if($objectType == 'doc')
{
$params = "objectType=&objectID=0&libID=0";
$createMethod = 'selectLibType';
}
if($objectType == 'bug') $params = "productID=$productID&branch=&extras=from=global";
if($objectType == 'story') $params = "productID=$productID&branch=0&moduleID=0&storyID=0&objectID=0&bugID=0&planID=0&todoID=0&extra=from=global";
if($objectType == 'task') $params = "executionID=0&storyID=0&moduleID=0&taskID=0&todoID=0&extra=from=global";
if($objectType == 'testcase') $params = "productID=$productID&branch=&moduleID=0&from=&param=0&storyID=0&extras=from=global";
if($objectType == 'execution') $params = "projectID=&executionID=0&copyExecutionID=0&planID=0&confirm=no&productID=0&extra=from=global";
if($objectType == 'project') $params = "model=scrum&programID=0&copyProjectID=0&extra=from=global";
if($objectType == 'product') $params = "programID=&extra=from=global";
if($objectType == 'program') $params = "parentProgramID=0&extra=from=global";
$html .= '<li>' . html::a(helper::createLink($objectType, $createMethod, $params, '', $isOnlyBody), "<i class='icon icon-$objectIcon'></i> " . $lang->createObjects[$objectType], '', $isOnlyBody ? $attr : '') . '</li>';
}
}
@@ -671,6 +694,23 @@ class commonModel extends model
}
}
/* Check whether other methods under the module have permissions. If yes, point to other methods. */
if($display == false and isset($lang->$currentModule->menu))
{
foreach($lang->$currentModule->menu as $menu)
{
$linkPart = explode('|', $menu['link']);
if(!isset($linkPart[2])) continue;
$method = $linkPart[2];
if(common::hasPriv($currentModule, $method))
{
$display = true;
$currentMethod = $method;
if(!isset($menu['target'])) break; // Try to jump to the method without opening a new window.
}
}
}
if(!$display) continue;
/* Assign vars. */
@@ -688,7 +728,7 @@ class commonModel extends model
}
/* Fix bug 14574. */
if(array_slice($items, -1)[0] == 'divider') array_pop($items);
if(end($items) == 'divider') array_pop($items);
return $items;
}
@@ -1277,7 +1317,7 @@ EOD;
if(strtolower($module) == 'story' and strtolower($method) == 'createcase') ($module = 'testcase') and ($method = 'create');
if(strtolower($module) == 'bug' and strtolower($method) == 'tostory') ($module = 'story') and ($method = 'create');
if(strtolower($module) == 'bug' and strtolower($method) == 'createcase') ($module = 'testcase') and ($method = 'create');
if($config->systemMode == 'classic' and strtolower($module) == 'project') $method = substr(strtolower($method), 3);
if($config->systemMode == 'classic' and strtolower($module) == 'project') $module = 'execution';
if(!commonModel::hasPriv($module, $method, $object)) return false;
$link = helper::createLink($module, $method, $vars, '', $onlyBody, $programID);
@@ -1914,18 +1954,6 @@ EOD;
if(isset($this->app->user))
{
$this->app->user = $this->session->user;
$inProject = (isset($this->lang->navGroup->$module) && $this->lang->navGroup->$module == 'project');
if(!defined('IN_UPGRADE') and $inProject)
{
/* Check program priv. */
$viewProjects = trim($this->app->user->view->projects, ',');
$accessDenied = ($this->session->project and $viewProjects and strpos(",{$viewProjects},", ",{$this->session->project},") === false);
if($accessDenied and !$this->app->user->admin) $this->loadModel('project')->accessDenied();
$this->resetProgramPriv($module, $method);
if(!commonModel::hasPriv($module, $method)) $this->deny($module, $method, false);
}
if(!commonModel::hasPriv($module, $method)) $this->deny($module, $method);
}
else
@@ -1994,20 +2022,19 @@ EOD;
}
/**
* Reset program priv.
* Reset project priv.
*
* @param string $module
* @param string $method
* @static
* @param int $projectID
* @access public
* @return void
*/
public function resetProgramPriv($module, $method)
public function resetProjectPriv($projectID = 0)
{
/* Get user program priv. */
if(!$this->app->session->project) return;
if(empty($projectID) and $this->session->project) $projectID = $this->session->project;
if(empty($projectID)) return;
$program = $this->dao->findByID($this->app->session->project)->from(TABLE_PROJECT)->fetch();
$program = $this->dao->findByID($projectID)->from(TABLE_PROJECT)->fetch();
if(empty($program)) return;
$programRights = $this->dao->select('t3.module, t3.method')->from(TABLE_GROUP)->alias('t1')
@@ -2023,18 +2050,30 @@ EOD;
foreach($programRights as $programRight) $programRightGroup[$programRight->module][$programRight->method] = 1;
/* Reset priv by program privway. */
$this->app->user->rights = $this->loadModel('user')->authorize($this->app->user->account);
$rights = $this->app->user->rights['rights'];
$this->app->user = clone $_SESSION['user'];
if($program->auth == 'extend') $this->app->user->rights['rights'] = array_merge_recursive($programRightGroup, $rights);
if($program->auth == 'reset')
{
$recomputedRights = $this->loadModel('user')->authorize($this->app->user->account);
$recomputedRights = $recomputedRights['rights'];
/* If priv way is reset, unset common program priv, and cover by program priv. */
foreach($rights as $moduleKey => $methods)
{
if(in_array($moduleKey, $this->config->programPriv->waterfall)) unset($rights[$moduleKey]);
}
$this->app->user->rights['rights'] = array_merge($rights, $programRightGroup);
$recomputedRights = array_merge($rights, $programRightGroup);
/* Set base priv for project. */
$projectRights = zget($this->app->user->rights['rights'], 'project', array());
if(isset($projectRights['browse']) and !isset($recomputedRights['project']['browse'])) $recomputedRights['project']['browse'] = 1;
if(isset($projectRights['kanban']) and !isset($recomputedRights['project']['kanban'])) $recomputedRights['project']['kanban'] = 1;
if(isset($projectRights['index']) and !isset($recomputedRights['project']['index'])) $recomputedRights['project']['index'] = 1;
$this->app->user->rights['rights'] = $recomputedRights;
}
}
+1 -1
View File
@@ -47,7 +47,7 @@
#kanbanList .kanban-col[data-type="unclosedProduct"] .kanban-item:hover {box-shadow: none;}
#kanbanList .kanban-col[data-type="unclosedProduct"] .kanban-item > .title {white-space: normal;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title {display: flex; flex-direction: row; flex-wrap: nowrap; align-items: center; height: 38px;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: block; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: block; white-space: nowrap; text-overflow: clip; overflow: hidden;}
#kanbanList .kanban-col[data-type="normalRelease"] .kanban-item > .title.has-icon > .text {margin-right: 5px; max-width: calc(100% - 20px);}
#kanbanList .no-flex .kanban-col[data-type="normalRelease"] .kanban-item > .title {display: block; height: 38px;}
#kanbanList .no-flex .kanban-col[data-type="normalRelease"] .kanban-item > .title > .text {display: inline-block;}
+1
View File
@@ -25,6 +25,7 @@
function submitForm(type)
{
$('.modal-body #insert').val(type == 'insert' ? 1 : 0);
$('#importNoticeModal .form-actions .btn').addClass('disabled');
$("button[data-target='#importNoticeModal']").closest('form').submit();
}
</script>
+25 -24
View File
@@ -163,10 +163,14 @@ class company extends control
* @param int $recTotal
* @param string $date
* @param string $direction next|pre
* @param int $userID
* @param int $productID
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
public function dynamic($browseType = 'today', $param = '', $recTotal = 0, $date = '', $direction = 'next')
public function dynamic($browseType = 'today', $param = '', $recTotal = 0, $date = '', $direction = 'next', $userID = '', $productID = 0, $projectID = 0, $executionID = 0)
{
$this->company->setMenu();
$this->app->loadLang('user');
@@ -202,20 +206,8 @@ class company extends control
$orderBy = $direction == 'next' ? 'date_desc' : 'date_asc';
$sort = $this->loadModel('common')->appendOrder($orderBy);
/* Set the user and type. */
$account = 'all';
$user = '';
if($browseType == 'account')
{
$user = $this->loadModel('user')->getById((int)$param, 'id');
if($user) $account = $user->account;
}
$product = $browseType == 'product' ? $param : 'all';
$project = $browseType == 'project' ? $param : 'all';
$execution = $browseType == 'execution' ? $param : 'all';
$period = in_array($browseType, array('account', 'product', 'project', 'execution')) ? 'all' : $browseType;
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$date = empty($date) ? '' : date('Y-m-d', $date);
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$date = empty($date) ? '' : date('Y-m-d', $date);
/* Get products' list.*/
$products = $this->loadModel('product')->getPairs('nocode');
@@ -224,15 +216,17 @@ class company extends control
/* Get projects' list.*/
$projects = $this->loadModel('project')->getPairsByProgram(0);
$projects = array($this->lang->company->project) + $projects;
$this->view->projects = $projects;
$this->view->projects = array($this->lang->company->project) + $projects;;
/* Get executions' list.*/
$executions = $this->loadModel('execution')->getPairs(0, 'all', 'nocode');
$executions = array($this->lang->company->execution) + $executions;
$executions = array($this->lang->execution->common) + $executions;
$this->view->executions = $executions;
/* Get users.*/
/* Set account and get users.*/
$user = $userID ? $this->loadModel('user')->getById($userID, 'id') : '';
$account = $user ? $user->account : 'all';
$userIdPairs = $this->loadModel('user')->getPairs('noclosed|nodeleted|noletter|useid');
$userIdPairs[''] = $this->lang->company->user;
$this->view->userIdPairs = $userIdPairs;
@@ -247,7 +241,10 @@ class company extends control
/* Get actions. */
if($browseType != 'bysearch')
{
$actions = $this->action->getDynamic($account, $period, $sort, $pager, $product, $project, $execution, $date, $direction);
if(!$productID) $productID = 'all';
if(!$projectID) $projectID = 'all';
if(!$executionID) $executionID = 'all';
$actions = $this->action->getDynamic($account, $browseType, $sort, $pager, $productID, $projectID, $executionID, $date, $direction);
}
else
{
@@ -257,10 +254,13 @@ class company extends control
/* Build search form. */
$executions[0] = '';
$products[0] = '';
$projects[0] = '';
ksort($executions);
ksort($products);
ksort($projects);
$executions['all'] = $this->lang->execution->allExecutions;
$products['all'] = $this->lang->product->allProduct;
$projects['all'] = $this->lang->project->all;
foreach($this->lang->action->search->label as $action => $name)
{
@@ -280,14 +280,15 @@ class company extends control
$this->view->browseType = $browseType;
$this->view->account = $account;
$this->view->accountPairs = $accountPairs;
$this->view->product = $product;
$this->view->project = $project;
$this->view->execution = $execution;
$this->view->productID = $productID;
$this->view->projectID = $projectID;
$this->view->executionID = $executionID;
$this->view->queryID = $queryID;
$this->view->orderBy = $orderBy;
$this->view->pager = $pager;
$this->view->user = $user;
$this->view->userID = $userID;
$this->view->param = $param;
$this->view->browseType = $browseType;
$this->view->dateGroups = $this->action->buildDateGroup($actions, $direction, $browseType);
$this->view->direction = $direction;
$this->display();
+8 -27
View File
@@ -1,30 +1,11 @@
function changeUser(account)
$('#account, #product, #project, #execution').change(function()
{
if(account == '')
{
link = createLink('company', 'dynamic', 'type=all');
}
else
{
link = createLink('company', 'dynamic', 'type=account&param=' + account);
}
location.href = link;
}
var userID = $('#account').val();
var productID = $('#product').val();
var projectID = systemMode == 'new' ? $('#project').val() : 0;
var executionID = $('#execution').val();
function changeProduct(product)
{
link = createLink('company', 'dynamic', 'type=product&param=' + product);
browseType = browseType == 'bysearch' ? 'all' : browseType;
link = createLink('company', 'dynamic', 'browseType=' + browseType + '&param=&recTotal=0&date=&direction=next&userID=' + userID + '&productID=' + productID + '&projectID=' + projectID + '&executionID=' + executionID);
location.href = link;
}
function changeProject(project)
{
link = createLink('company', 'dynamic', 'type=project&param=' + project);
location.href = link;
}
function changeExecution(execution)
{
link = createLink('company', 'dynamic', 'type=execution&param=' + execution);
location.href = link;
}
})
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Administratoren';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Benutzer';
$lang->company->guestOptions[0] = 'Verweigern';
+3 -1
View File
@@ -18,6 +18,7 @@ $lang->company->browse = "User List";
$lang->company->dynamic = "Dynamics";
$lang->company->orgView = 'View';
$lang->company->id = 'ID';
$lang->company->name = 'Company Name';
$lang->company->phone = 'Phone';
$lang->company->fax = 'Fax';
@@ -27,10 +28,11 @@ $lang->company->website = 'Website';
$lang->company->backyard = 'Intranet';
$lang->company->guest = 'Guest Login';
$lang->company->admins = 'Administrator';
$lang->company->deleted = 'Deleted';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'User';
$lang->company->guestOptions[0] = 'Deny';
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Administrateur';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Utilisateurs';
$lang->company->guestOptions[0] = 'Refusée';
+1 -1
View File
@@ -30,7 +30,7 @@ $lang->company->admins = 'Quản trị viên';
$lang->company->product = $lang->productCommon;
$lang->company->project = 'Project';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = 'Execution';
$lang->company->user = 'Người dùng';
$lang->company->guestOptions[0] = 'Từ chối';
+3 -1
View File
@@ -18,6 +18,7 @@ $lang->company->browse = "用户列表";
$lang->company->dynamic = "组织动态";
$lang->company->orgView = '组织视图';
$lang->company->id = '编号';
$lang->company->name = '公司名称';
$lang->company->phone = '联系电话';
$lang->company->fax = '传真';
@@ -27,10 +28,11 @@ $lang->company->website = '官网';
$lang->company->backyard = '内网';
$lang->company->guest = '匿名登录';
$lang->company->admins = '管理员';
$lang->company->deleted = '已删除';
$lang->company->product = $lang->productCommon;
$lang->company->project = '项目';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = '执行';
$lang->company->user = '用户';
$lang->company->guestOptions[0] = '不允许';
+3 -1
View File
@@ -18,6 +18,7 @@ $lang->company->browse = "用戶列表";
$lang->company->dynamic = "組織動態";
$lang->company->orgView = '組織視圖';
$lang->company->id = '編號';
$lang->company->name = '公司名稱';
$lang->company->phone = '聯繫電話';
$lang->company->fax = '傳真';
@@ -27,10 +28,11 @@ $lang->company->website = '官網';
$lang->company->backyard = '內網';
$lang->company->guest = '匿名登錄';
$lang->company->admins = '管理員';
$lang->company->deleted = '已刪除';
$lang->company->product = $lang->productCommon;
$lang->company->project = '項目';
$lang->company->execution = $lang->executionCommon;
$lang->company->execution = '執行';
$lang->company->user = '用戶';
$lang->company->guestOptions[0] = '不允許';
+7 -5
View File
@@ -11,6 +11,8 @@
*/
?>
<?php include '../../common/view/header.html.php';?>
<?php js::set('browseType', $browseType);?>
<?php js::set('systemMode', $config->systemMode);?>
<div id="mainMenu" class="clearfix">
<div class="btn-toolbar pull-left">
<?php foreach($lang->action->periods as $period => $label):?>
@@ -22,15 +24,15 @@
$active = 'btn-active-text';
$label .= " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
}
echo html::a(inlink('dynamic', "browseType=$period"), $label, '', "class='btn btn-link $active' id='{$period}'")
echo html::a(inlink('dynamic', "browseType=$period&param=&recTotal=0&date=&direction=next&userID=$userID&productID=$productID&projectID=$projectID&executionID=$executionID"), $label, '', "class='btn btn-link $active' id='{$period}'")
?>
<?php endforeach;?>
<div class="input-control space c-user"><?php echo html::select('account', $userIdPairs, $user ? $user->id : '', 'onchange=changeUser(this.value) class="form-control chosen" data-max_drop_width="215"');?></div>
<div class="input-control space c-product"><?php echo html::select('product', $products, $product, 'onchange=changeProduct(this.value) class="form-control chosen" data-max_drop_width="215"');?></div>
<div class="input-control space c-user"><?php echo html::select('account', $userIdPairs, $userID, 'class="form-control chosen" data-max_drop_width="215"');?></div>
<div class="input-control space c-product"><?php echo html::select('product', $products, $productID, 'class="form-control chosen" data-max_drop_width="215"');?></div>
<?php if($config->systemMode == 'new'):?>
<div class="input-control space c-project"><?php echo html::select('project', $projects, $project, 'onchange=changeProject(this.value) class="form-control chosen" data-max_drop_width="215"');?></div>
<div class="input-control space c-project"><?php echo html::select('project', $projects, $projectID, 'class="form-control chosen" data-max_drop_width="215"');?></div>
<?php endif;?>
<div class="input-control space c-execution"><?php echo html::select('execution', $executions, $execution, 'onchange=changeExecution(this.value) class="form-control chosen" data-max_drop_width="215"'); ?></div>
<div class="input-control space c-execution"><?php echo html::select('execution', $executions, $executionID, 'class="form-control chosen" data-max_drop_width="215"'); ?></div>
<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> <?php echo $lang->action->dynamic->search;?></a>
</div>
</div>
+17 -7
View File
@@ -3,13 +3,23 @@ $lang->compile->common = 'Compile';
$lang->compile->browse = 'History';
$lang->compile->logs = 'Log';
$lang->compile->id = 'ID';
$lang->compile->name = 'Name';
$lang->compile->buildType = 'Engine';
$lang->compile->status = 'Status';
$lang->compile->time = 'Time';
$lang->compile->result = 'Result';
$lang->compile->refresh = 'Refresh';
$lang->compile->id = 'ID';
$lang->compile->name = 'Name';
$lang->compile->buildType = 'Engine';
$lang->compile->status = 'Status';
$lang->compile->time = 'Time';
$lang->compile->result = 'Result';
$lang->compile->refresh = 'Refresh';
$lang->compile->job = 'Job';
$lang->compile->queue = 'Queue';
$lang->compile->atTime = 'Execution Time';
$lang->compile->testtask = 'Testtask';
$lang->compile->tag = 'Tag';
$lang->compile->times = 'Times';
$lang->compile->createdBy = 'Created By';
$lang->compile->createdDate = 'Created Date';
$lang->compile->updateDate = 'Update Date';
$lang->compile->deleted = 'Deleted';
$lang->compile->statusList['success'] = 'Done';
$lang->compile->statusList['failure'] = 'Failed';
+17 -7
View File
@@ -3,13 +3,23 @@ $lang->compile->common = '构建';
$lang->compile->browse = '构建历史';
$lang->compile->logs = '构建日志';
$lang->compile->id = 'ID';
$lang->compile->name = '构建名称';
$lang->compile->buildType = '构建引擎';
$lang->compile->status = '构建状态';
$lang->compile->time = '构建时间';
$lang->compile->result = '构建结果';
$lang->compile->refresh = '刷新';
$lang->compile->id = 'ID';
$lang->compile->name = '构建名称';
$lang->compile->buildType = '构建引擎';
$lang->compile->status = '构建状态';
$lang->compile->time = '构建时间';
$lang->compile->result = '构建结果';
$lang->compile->refresh = '刷新';
$lang->compile->job = '构建任务';
$lang->compile->queue = '队列';
$lang->compile->atTime = '执行时间';
$lang->compile->testtask = '测试单';
$lang->compile->tag = '标签';
$lang->compile->times = '次数';
$lang->compile->createdBy = '由谁创建';
$lang->compile->createdDate = '创建日期';
$lang->compile->updateDate = '编辑日期';
$lang->compile->deleted = '已删除';
$lang->compile->statusList['success'] = '成功';
$lang->compile->statusList['failure'] = '失败';
+17 -7
View File
@@ -3,13 +3,23 @@ $lang->compile->common = '構建';
$lang->compile->browse = '構建歷史';
$lang->compile->logs = '構建日誌';
$lang->compile->id = 'ID';
$lang->compile->name = '構建名稱';
$lang->compile->buildType = '構建引擎';
$lang->compile->status = '構建狀態';
$lang->compile->time = '構建時間';
$lang->compile->result = '構建結果';
$lang->compile->refresh = '刷新';
$lang->compile->id = 'ID';
$lang->compile->name = '構建名稱';
$lang->compile->buildType = '構建引擎';
$lang->compile->status = '構建狀態';
$lang->compile->time = '構建時間';
$lang->compile->result = '構建結果';
$lang->compile->refresh = '刷新';
$lang->compile->job = '構建任務';
$lang->compile->queue = '隊列';
$lang->compile->atTime = '執行時間';
$lang->compile->testtask = '測試單';
$lang->compile->tag = '標籤';
$lang->compile->times = '次數';
$lang->compile->createdBy = '由誰創建';
$lang->compile->createdDate = '創建日期';
$lang->compile->updateDate = '編輯日期';
$lang->compile->deleted = '已刪除';
$lang->compile->statusList['success'] = '成功';
$lang->compile->statusList['failure'] = '失敗';
+3 -2
View File
@@ -144,8 +144,9 @@ class compileModel extends model
$this->dao->update(TABLE_COMPILE)->set('tag')->eq($lastTag)->where('id')->eq($compile->id)->exec();
}
if($job->engine == 'gitlab') $compile = $this->loadModel('job')->execGitlabPipeline($job, $compileID);
if($job->engine == 'jenkins') $compile = $this->job->execJenkinsPipeline($job, $repo, $compile->id);
$this->loadModel('job');
if($job->engine == 'gitlab') $compile = $this->job->execGitlabPipeline($job, $compileID);
if($job->engine == 'jenkins') $compile = $this->job->execJenkinsPipeline($job, $repo, $compileID);
$this->dao->update(TABLE_COMPILE)->data($compile)->where('id')->eq($compileID)->exec();
$this->dao->update(TABLE_JOB)
+2
View File
@@ -1,5 +1,7 @@
<?php
$lang->cron->common = 'Cron';
$lang->cron->id = 'ID';
$lang->cron->buildin = 'Build In';
$lang->cron->index = 'Cron Home';
$lang->cron->list = 'Task';
$lang->cron->create = 'Add';
+2
View File
@@ -1,5 +1,7 @@
<?php
$lang->cron->common = '定时任务';
$lang->cron->id = '编号';
$lang->cron->buildin = '内置';
$lang->cron->index = '首页';
$lang->cron->list = '任务列表';
$lang->cron->create = '添加';
+2
View File
@@ -1,5 +1,7 @@
<?php
$lang->cron->common = '定時任務';
$lang->cron->id = '編號';
$lang->cron->buildin = '內置';
$lang->cron->index = '首頁';
$lang->cron->list = '任務列表';
$lang->cron->create = '添加';
+1 -1
View File
@@ -53,7 +53,7 @@ $config->custom->fieldList['task']['edit'] = 'pri,estimate,estStarted,
$config->custom->fieldList['task']['finish'] = 'comment';
$config->custom->fieldList['task']['activate'] = 'assignedTo,comment';
$config->custom->fieldList['build'] = 'scmPath,filePath,desc';
$config->custom->fieldList['bug']['create'] = 'module,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['create'] = 'module,project,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['edit'] = 'plan,assignedTo,deadline,type,os,browser,severity,pri,steps,keywords';
$config->custom->fieldList['bug']['resolve'] = 'resolvedBuild,resolvedDate,assignedTo,comment';
$config->custom->fieldList['testcase']['create'] = 'stage,story,pri,precondition,keywords';
+1
View File
@@ -2,6 +2,7 @@
global $config;
$lang->custom->common = 'Custom';
$lang->custom->id = 'ID';
$lang->custom->index = 'Home';
$lang->custom->set = 'Customize';
$lang->custom->restore = 'Reset';
+1
View File
@@ -2,6 +2,7 @@
global $config;
$lang->custom->common = '自定义';
$lang->custom->id = '编号';
$lang->custom->index = '首页';
$lang->custom->set = '自定义配置';
$lang->custom->restore = '恢复默认';
+1
View File
@@ -2,6 +2,7 @@
global $config;
$lang->custom->common = '自定義';
$lang->custom->id = '編號';
$lang->custom->index = '首頁';
$lang->custom->set = '自定義配置';
$lang->custom->restore = '恢復預設';
+3
View File
@@ -10,6 +10,9 @@
* @link http://www.zentao.net
*/
$lang->dept->common = 'Department';
$lang->dept->id = 'ID';
$lang->dept->path = 'Path';
$lang->dept->position = 'Position';
$lang->dept->manageChild = "Child Department";
$lang->dept->edit = "Edit Department";
$lang->dept->delete = "Delete Department";
+3
View File
@@ -10,6 +10,9 @@
* @link http://www.zentao.net
*/
$lang->dept->common = '部门结构';
$lang->dept->id = '编号';
$lang->dept->path = '路径';
$lang->dept->position = '职位';
$lang->dept->manageChild = "下级部门";
$lang->dept->edit = "编辑部门";
$lang->dept->delete = "删除部门";
+3
View File
@@ -10,6 +10,9 @@
* @link http://www.zentao.net
*/
$lang->dept->common = '部門結構';
$lang->dept->id = '編號';
$lang->dept->path = '路徑';
$lang->dept->position = '職位';
$lang->dept->manageChild = "下級部門";
$lang->dept->edit = "編輯部門";
$lang->dept->delete = "刪除部門";
+4
View File
@@ -104,6 +104,7 @@ $config->dev->tableMap['doclib'] = 'doc';
$config->dev->tableMap['grouppriv'] = 'group';
$config->dev->tableMap['usercontact'] = 'user-contacts';
$config->dev->tableMap['usergroup'] = 'user';
$config->dev->tableMap['userview'] = 'user';
$config->dev->tableMap['userquery'] = 'search';
$config->dev->tableMap['usertpl'] = 'user-tpl';
$config->dev->tableMap['history'] = 'action-history';
@@ -114,7 +115,10 @@ $config->dev->tableMap['suitecase'] = 'testcase';
$config->dev->tableMap['repofiles'] = 'repo';
$config->dev->tableMap['repohistory'] = 'repo';
$config->dev->tableMap['repobranch'] = 'repo';
$config->dev->tableMap['log'] = 'action';
$config->dev->tableMap['searchindex'] = 'search';
$config->dev->tableMap['searchdict'] = 'search';
$config->dev->tableMap['testtask'] = 'testreport';
$config->dev->postParams['story']['create']['product'] = 'int';
$config->dev->postParams['story']['create']['title'] = 'string';
+3 -2
View File
@@ -39,11 +39,12 @@ class devModel extends model
{
$module = substr($table, strpos($table, '_') + 1);
$aliasModule = $subLang = '';
$this->app->loadLang($module);
try
{
if(isset($this->config->dev->tableMap[$module])) $aliasModule = $this->config->dev->tableMap[$module];
if(strpos($aliasModule, '-') !== false) list($aliasModule, $subLang) = explode('-', $aliasModule);
if(empty($aliasModule) and strpos($module, 'im_') === false) $this->app->loadLang($aliasModule ? $aliasModule : $module);
if(!empty($aliasModule) and strpos($module, 'im_') === false) $this->app->loadLang($aliasModule);
}
catch(PDOException $e)
{
@@ -69,7 +70,7 @@ class devModel extends model
$type = str_replace(array('big', 'small', 'medium', 'tiny'), '', $type);
$field = array();
$field['name'] = isset($this->lang->$module->{$rawField->field}) ? $this->lang->$module->{$rawField->field} : '';
if(empty($field['name']) and $aliasModule) $field['name'] = isset($this->lang->$aliasModule->{$rawField->field}) ? $this->lang->$aliasModule->{$rawField->field} : '';
if((empty($field['name']) or !is_string($field['name'])) and $aliasModule) $field['name'] = isset($this->lang->$aliasModule->{$rawField->field}) ? $this->lang->$aliasModule->{$rawField->field} : '';
if($subLang) $field['name'] = isset($this->lang->$aliasModule->$subLang->{$rawField->field}) ? $this->lang->$aliasModule->$subLang->{$rawField->field} : $field['name'];
if(!is_string($field['name'])) $field['name'] = '';
$field['null'] = $rawField->null;
+2 -2
View File
@@ -475,7 +475,7 @@ class doc extends control
/* Get doc. */
$docID = (int)$docID;
$doc = $this->doc->getById($docID, $version, true);
if(!$doc) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$doc) die(js::error($this->lang->notFound) . js::locate($this->createLink('doc', 'index')));
/* The global search opens in the document library. */
if(!isonlybody())
@@ -914,7 +914,7 @@ class doc extends control
if($docID)
{
$doc = $this->doc->getById($docID, $version, true);
if(!$doc) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$doc) die(js::error($this->lang->notFound));
if($doc->keywords)
{
+1 -1
View File
@@ -6,7 +6,7 @@ $(function()
{
$('#content').html(draft);
editor = KindEditor.instances[0];
editor.html(draft);
editor.html('' + draft);
$('.kindeditor-ph').remove();
}
}, 100)
+6
View File
@@ -53,6 +53,12 @@ $lang->doc->searchResult = 'Search Result';
$lang->doc->mailto = 'Mailto';
$lang->doc->noModule = 'No document in this lib, please create it';
$lang->doc->noChapter = 'No chapters or articles in this book. Please add chapters and articles.';
$lang->doc->views = 'Views';
$lang->doc->draft = 'Draft';
$lang->doc->collector = 'Collector';
$lang->doc->main = 'Main Document Library';
$lang->doc->order = 'Order';
$lang->doc->doc = 'Document';
$lang->doc->moduleDoc = 'By Module';
$lang->doc->searchDoc = 'Search';
+6
View File
@@ -53,6 +53,12 @@ $lang->doc->searchResult = '搜索结果';
$lang->doc->mailto = '抄送给';
$lang->doc->noModule = '文档库下没有目录和文档,请维护目录或者创建文档';
$lang->doc->noChapter = '手册下没有章节和文章,请维护手册';
$lang->doc->views = '浏览次数';
$lang->doc->draft = '草稿';
$lang->doc->collector = '收藏者';
$lang->doc->main = '文档主库';
$lang->doc->order = '排序';
$lang->doc->doc = '文档';
$lang->doc->moduleDoc = '按模块浏览';
$lang->doc->searchDoc = '搜索';
+6
View File
@@ -53,6 +53,12 @@ $lang->doc->searchResult = '搜索結果';
$lang->doc->mailto = '抄送給';
$lang->doc->noModule = '文檔庫下沒有目錄和文檔,請維護目錄或者創建文檔';
$lang->doc->noChapter = '手冊下沒有章節和文章,請維護手冊';
$lang->doc->views = '瀏覽次數';
$lang->doc->draft = '草稿';
$lang->doc->collector = '收藏者';
$lang->doc->main = '文檔主庫';
$lang->doc->order = '排序';
$lang->doc->doc = '文檔';
$lang->doc->moduleDoc = '按模組瀏覽';
$lang->doc->searchDoc = '搜索';
+9
View File
@@ -148,6 +148,13 @@ class docModel extends model
}
if($lib->acl == 'private') $lib->users = $this->app->user->account;
if($lib->acl == 'custom')
{
$trimedUsers = ',' . trim($lib->users, ',') . ',';
if(strpos($trimedUsers, ',' . $this->app->user->account . ',') === false) $lib->users .= ',' . $this->app->user->account;
}
$lib->name = trim($lib->name); //Temporary treatment: Code for bug #15528.
$this->dao->insert(TABLE_DOCLIB)->data($lib)->autoCheck()
->batchCheck($this->config->doc->createlib->requiredFields, 'notempty')
->exec();
@@ -177,6 +184,8 @@ class docModel extends model
$libCreatedBy = $this->dao->select('*')->from(TABLE_ACTION)->where('objectType')->eq('doclib')->andWhere('objectID')->eq($libID)->andWhere('action')->eq('created')->fetch('actor');
$lib->users = $libCreatedBy ? $libCreatedBy : $this->app->user->account;
}
$lib->name = trim($lib->name); //Temporary treatment: Code for bug #15528.
$this->dao->update(TABLE_DOCLIB)->data($lib)->autoCheck()
->batchCheck($this->config->doc->editlib->requiredFields, 'notempty')
->where('id')->eq($libID)
+1 -1
View File
@@ -25,7 +25,7 @@
<?php echo $lib->type != 'book' ? $lang->doc->editLib : $lang->doc->editBook;?>
</h2>
</div>
<form method='post' class='form-ajax'>
<form method='post' target="hiddenwin">
<table class='table table-form'>
<?php if(!empty($lib->product)):?>
<tr>
+3
View File
@@ -26,6 +26,9 @@ $lang->entry->editedby = 'EditedBy';
$lang->entry->editedDate = 'EditedDate';
$lang->entry->date = 'Requesting Time';
$lang->entry->url = 'Requesting URL';
$lang->entry->calledTime = 'Called Time';
$lang->entry->editedBy = 'Edited By';
$lang->entry->deleted = 'Deleted';
$lang->entry->confirmDelete = 'Do you want to delete this entry?';
$lang->entry->help = 'Help';
+3
View File
@@ -26,6 +26,9 @@ $lang->entry->editedby = '最后编辑';
$lang->entry->editedDate = '编辑时间';
$lang->entry->date = '请求时间';
$lang->entry->url = '请求地址';
$lang->entry->calledTime = '调用时间';
$lang->entry->editedBy = '由谁编辑';
$lang->entry->deleted = '已删除';
$lang->entry->confirmDelete = '您确认要删除该应用吗?';
$lang->entry->help = '使用说明';
+3
View File
@@ -26,6 +26,9 @@ $lang->entry->editedby = '最後編輯';
$lang->entry->editedDate = '編輯時間';
$lang->entry->date = '請求時間';
$lang->entry->url = '請求地址';
$lang->entry->calledTime = '調用時間';
$lang->entry->editedBy = '由誰編輯';
$lang->entry->deleted = '已刪除';
$lang->entry->confirmDelete = '您確認要刪除該應用嗎?';
$lang->entry->help = '使用說明';
+11 -2
View File
@@ -140,6 +140,8 @@ class execution extends control
if(common::hasPriv('execution', 'create')) $this->lang->TRActions = html::a($this->createLink('execution', 'create'), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->execution->create, '', "class='btn btn-primary'");
if(!isset($_SESSION['limitedExecutions'])) $this->execution->getLimitedExecution();
/* Set browse type. */
$browseType = strtolower($status);
@@ -1206,11 +1208,12 @@ class execution extends control
* @param int $planID
* @param string $confirm
* @param string $productID
* @param string $extra
*
* @access public
* @return void
*/
public function create($projectID = '', $executionID = '', $copyExecutionID = '', $planID = 0, $confirm = 'no', $productID = 0)
public function create($projectID = '', $executionID = '', $copyExecutionID = '', $planID = 0, $confirm = 'no', $productID = 0, $extra = '')
{
/* Set menu. */
if($this->app->tab == 'project')
@@ -1231,6 +1234,9 @@ class execution extends control
unset($this->lang->doc->menu->execution['subMenu']);
}
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
parse_str($extra, $output);
$this->app->loadLang('program');
$this->app->loadLang('stage');
$this->app->loadLang('programplan');
@@ -1338,6 +1344,7 @@ class execution extends control
$this->view->title = (($this->app->tab == 'execution') and ($this->config->systemMode == 'new')) ? $this->lang->execution->createExec : $this->lang->execution->create;
$this->view->position[] = $this->view->title;
$this->view->gobackLink = (isset($output['from']) and $output['from'] == 'global') ? $this->createLink('execution', 'all') : '';
$this->view->executions = array('' => '') + $this->execution->getList($projectID);
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->allProducts = array(0 => '') + $this->loadModel('product')->getProductPairsByProject($projectID, 'noclosed');
@@ -2982,6 +2989,9 @@ class execution extends control
$executionLang = $this->lang->execution;
$executionConfig = $this->config->execution;
$projectID = $from == 'project' ? $this->session->project : 0;
if($projectID) $this->project->setMenu($projectID);
/* Create field lists. */
$fields = $this->post->exportFields ? $this->post->exportFields : explode(',', $executionConfig->list->exportFields);
foreach($fields as $key => $fieldName)
@@ -2991,7 +3001,6 @@ class execution extends control
unset($fields[$key]);
}
$projectID = $from == 'project' ? $this->session->project : 0;
$executionStats = $this->project->getStats($projectID, $status == 'byproduct' ? 'all' : $status, $productID, 0, 30, 'id_asc');
$users = $this->loadModel('user')->getPairs('noletter');
foreach($executionStats as $i => $execution)
+30 -6
View File
@@ -52,15 +52,12 @@ $(function()
{
if(index == 0)
{
var maxWidth = $('.chosen-container .chosen-drop.chosen-auto-max-width.in').width() - 70;
$('#teams_chosen ul .label').remove();
$(this).after(' <label class="label">' + projectCommon + '</label>');
$(this).attr('style', 'display: inline-block; vertical-align: middle; max-width: ' + maxWidth + 'px');
var projectName = subString($(this).text(), 56);
$(this).text(projectName);
$(this).append(' <label class="label">' + projectCommon + '</label>');
}
else
{
$(this).html($(this).html().replace('&nbsp;&nbsp;&nbsp;', ''));
$(this).prepend('&nbsp;&nbsp;&nbsp;');
}
})
@@ -107,3 +104,30 @@ function refreshPage(projectID)
{
location.href = createLink('execution', 'create', 'projectID=' + projectID);
}
/**
* Cut a string of letters and characters with the same length.
*
* @param string $title
* @param int $stringLength
* @access public
* @return string
*/
function subString(title, stringLength)
{
if(title.replace(/[\u4e00-\u9fa5]/g, "**").length > stringLength)
{
var length = 0;
for(var i = 0; i < title.length; i ++)
{
length += title.charCodeAt(i) > 255 ? 2 : 1;
if(length > stringLength)
{
title = title.substring(0, i) + '...';
break;
}
}
}
return title;
}
+7
View File
@@ -14,6 +14,13 @@ $(function()
adjustTableFooter();
$('body').on('click', '#toggleFold', adjustTableFooter);
$('body').on('click', '.icon.icon-angle-double-right', adjustTableFooter);
/* The display of the adjusting sidebarHeader is synchronized with the sidebar. */
$(".sidebar-toggle").click(function()
{
$("#sidebarHeader").toggle("fast");
});
if($("main").is(".hide-sidebar")) $("#sidebarHeader").hide();
});
$('#module' + moduleID).closest('li').addClass('active');
+23 -23
View File
@@ -311,31 +311,31 @@ $lang->execution->linkPRJStoryTip = "(Link {$lang->SRCommon} comes from {$la
$lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been linked under the project, and can be directly linked with {$lang->SRCommon} of the product linked with the sprint/stage)";
/* 交互提示。*/
$lang->execution->confirmDelete = "Möchten Sie {$lang->executionCommon}[%s] löschen?";
$lang->execution->confirmUnlinkMember = "Möchten Sie den Benutzer vom {$lang->executionCommon} entfernen?";
$lang->execution->confirmUnlinkStory = "Möchten Sie die Story vom {$lang->executionCommon} entfernen?";
$lang->execution->confirmDelete = "Möchten Sie {$lang->executionCommon}[%s] löschen?";
$lang->execution->confirmUnlinkMember = "Möchten Sie den Benutzer vom {$lang->executionCommon} entfernen?";
$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?;"
$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?";
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Kein verknüpftes {$lang->productCommon} in {$lang->executionCommon} gefunden. Sie werden auf die {$lang->productCommon} Seite geleitet.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} Kann nicht mit mehreren identischen {$lang->productCommon} verknüpft werden";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!";
$lang->execution->tips = 'Hinweis';
$lang->execution->afterInfo = "{$lang->executionCommon} wurde erstellt. Als nächstes können Sie ";
$lang->execution->setTeam = 'Team setzen';
$lang->execution->linkStory = 'Storys verküpfen';
$lang->execution->createTask = 'Aufgaben erstellen';
$lang->execution->goback = "Zurückkehren";
$lang->execution->noweekend = 'Ohne Wochenende';
$lang->execution->withweekend = 'Mit Wochenende';
$lang->execution->interval = 'Intervale ';
$lang->execution->fixFirstWithLeft = 'Modify the left';
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Kein verknüpftes {$lang->productCommon} in {$lang->executionCommon} gefunden. Sie werden auf die {$lang->productCommon} Seite geleitet.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} Kann nicht mit mehreren identischen {$lang->productCommon} verknüpft werden";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Zugriff zu {$lang->executionCommon} verweigert!";
$lang->execution->tips = 'Hinweis';
$lang->execution->afterInfo = "{$lang->executionCommon} wurde erstellt. Als nächstes können Sie ";
$lang->execution->setTeam = 'Team setzen';
$lang->execution->linkStory = 'Storys verküpfen';
$lang->execution->createTask = 'Aufgaben erstellen';
$lang->execution->goback = "Zurückkehren";
$lang->execution->noweekend = 'Ohne Wochenende';
$lang->execution->withweekend = 'Mit Wochenende';
$lang->execution->interval = 'Intervale ';
$lang->execution->fixFirstWithLeft = 'Modify the left';
$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has ";
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
/* 统计。*/
$lang->execution->charts = new stdclass();
+31 -25
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
/* Fields. */
$lang->execution->allExecutions = 'All ' . $lang->executionCommon . 's';
$lang->execution->allExecutions = 'All ' . $lang->execution->common . 's';
$lang->execution->allExecutionAB = 'Execution List';
$lang->execution->id = $lang->executionCommon . ' ID';
$lang->execution->type = $lang->executionCommon . 'Type';
@@ -102,6 +102,12 @@ $lang->execution->noTeam = 'No team members at the moment';
$lang->execution->or = ' or ';
$lang->execution->selectProject = 'Please select project';
/* Fields of zt_team. */
$lang->execution->root = 'Root';
$lang->execution->estimate = 'estimate';
$lang->execution->consumed = 'consumed';
$lang->execution->left = 'Left';
if($this->config->systemMode == 'new') $lang->execution->copyTeamTip = "select Project/{$lang->execution->common} to copy its members";
if($this->config->systemMode == 'classic') $lang->execution->copyTeamTip = "select Project/{$lang->executionCommon} to copy its members";
@@ -313,32 +319,32 @@ if($config->systemMode == 'classic') $lang->execution->copyTeamTitle = "Choose a
if($config->systemMode == 'new') $lang->execution->copyTeamTitle = "Choose a {$lang->project->common} or {$lang->execution->common} Team to copy.";
/* Interactive prompts. */
$lang->execution->confirmDelete = "Do you want to delete the {$lang->executionCommon}[%s]?";
$lang->execution->confirmUnlinkMember = "Do you want to unlink this User from {$lang->executionCommon}?";
$lang->execution->confirmUnlinkStory = "Do you want to unlink this Story from {$lang->executionCommon}?";
$lang->execution->confirmSyncStories = "After modifying the project, synchronize the execution related {$lang->SRCommon} to the new project?";
$lang->execution->confirmDelete = "Do you want to delete the {$lang->executionCommon}[%s]?";
$lang->execution->confirmUnlinkMember = "Do you want to unlink this User from {$lang->executionCommon}?";
$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?";
$lang->execution->confirmSyncStories = "After modifying the project, synchronize the execution related {$lang->SRCommon} to the new project?";
$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the execution?";
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the execution. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "No {$lang->productCommon} is linked to {$lang->executionCommon}. You will be directed to {$lang->productCommon} page to link one.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} cannot be linked to the same {$lang->productCommon} twice.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can ";
$lang->execution->setTeam = 'Set Team';
$lang->execution->linkStory = 'Link Story';
$lang->execution->createTask = 'Create Task';
$lang->execution->goback = "Go Back";
$lang->execution->noweekend = 'Exclude Weekend';
$lang->execution->withweekend = 'Include Weekend';
$lang->execution->interval = 'Intervals ';
$lang->execution->fixFirstWithLeft = 'Update hours left too';
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the execution. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "No {$lang->productCommon} is linked to {$lang->executionCommon}. You will be directed to {$lang->productCommon} page to link one.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} cannot be linked to the same {$lang->productCommon} twice.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Your access to {$lang->executionCommon} is denied!";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "{$lang->executionCommon} is created. Next you can ";
$lang->execution->setTeam = 'Set Team';
$lang->execution->linkStory = 'Link Story';
$lang->execution->createTask = 'Create Task';
$lang->execution->goback = "Go Back";
$lang->execution->noweekend = 'Exclude Weekend';
$lang->execution->withweekend = 'Include Weekend';
$lang->execution->interval = 'Intervals ';
$lang->execution->fixFirstWithLeft = 'Update hours left too';
$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has ";
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
/* Statistics. */
$lang->execution->charts = new stdclass();
+24 -24
View File
@@ -10,7 +10,7 @@
* @link https://www.zentao.pm
*/
/* Fields. */
$lang->execution->allExecutions = 'Tous les ' . $lang->executionCommon . 's';
$lang->execution->allExecutions = 'Tous les ' . $lang->execution->common . 's';
$lang->execution->allExecutionAB = 'Execution List';
$lang->execution->id = $lang->executionCommon . ' ID';
$lang->execution->type = $lang->executionCommon . 'Type';
@@ -311,31 +311,31 @@ $lang->execution->linkPRJStoryTip = "(Link {$lang->SRCommon} comes from {$la
$lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been linked under the project, and can be directly linked with {$lang->SRCommon} of the product linked with the sprint/stage)";
/* 交互提示。*/
$lang->execution->confirmDelete = "Voulez-vous réellement supprimer le {$lang->executionCommon}[%s] ?";
$lang->execution->confirmUnlinkMember = "Voulez-vous retirer cet utilisateur du {$lang->executionCommon} ?";
$lang->execution->confirmUnlinkStory = "Voulez-vous retirer cette Story du {$lang->executionCommon} ?";
$lang->execution->confirmDelete = "Voulez-vous réellement supprimer le {$lang->executionCommon}[%s] ?";
$lang->execution->confirmUnlinkMember = "Voulez-vous retirer cet utilisateur du {$lang->executionCommon} ?";
$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?";
$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?";
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Aucun {$lang->productCommon} n'est associé à ce {$lang->executionCommon}. Vous allez être redirigé vers la page {$lang->productCommon} pour en associer un.";
$lang->execution->errorSameProducts = "Ce {$lang->executionCommon} ne peut pas être associé deux fois au même {$lang->productCommon}. Imaginez un peu les résultats !";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé.";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "Le {$lang->executionCommon} a été créé avec succès ! Ensuite vous pouvez ";
$lang->execution->setTeam = "Composer l'Equipe";
$lang->execution->linkStory = 'Associer Story';
$lang->execution->createTask = 'Créer des Tâches';
$lang->execution->goback = "Revenir en arrière";
$lang->execution->noweekend = 'Exclure les Weekends';
$lang->execution->withweekend = 'Inclure les Weekends';
$lang->execution->interval = 'Intervalles';
$lang->execution->fixFirstWithLeft = 'Mettre à jour les heures également';
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Aucun {$lang->productCommon} n'est associé à ce {$lang->executionCommon}. Vous allez être redirigé vers la page {$lang->productCommon} pour en associer un.";
$lang->execution->errorSameProducts = "Ce {$lang->executionCommon} ne peut pas être associé deux fois au même {$lang->productCommon}. Imaginez un peu les résultats !";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Votre accès au {$lang->executionCommon} est refusé ! Désolé.";
$lang->execution->tips = 'Note';
$lang->execution->afterInfo = "Le {$lang->executionCommon} a été créé avec succès ! Ensuite vous pouvez ";
$lang->execution->setTeam = "Composer l'Equipe";
$lang->execution->linkStory = 'Associer Story';
$lang->execution->createTask = 'Créer des Tâches';
$lang->execution->goback = "Revenir en arrière";
$lang->execution->noweekend = 'Exclure les Weekends';
$lang->execution->withweekend = 'Inclure les Weekends';
$lang->execution->interval = 'Intervalles';
$lang->execution->fixFirstWithLeft = 'Mettre à jour les heures également';
$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has ";
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
/* 统计。*/
$lang->execution->charts = new stdclass();
+24 -24
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
/* Fields. */
$lang->execution->allExecutions = 'Tất cả ' . $lang->executionCommon;
$lang->execution->allExecutions = 'Tất cả ' . $lang->execution->common;
$lang->execution->allExecutionAB = 'Execution List';
$lang->execution->id = 'ID '.$lang->executionCommon;
$lang->execution->type = 'Loại';
@@ -312,31 +312,31 @@ $lang->execution->linkPRJStoryTip = "(Link {$lang->SRCommon} comes from {$la
$lang->execution->linkAllStoryTip = "({$lang->SRCommon} has never been linked under the project, and can be directly linked with {$lang->SRCommon} of the product linked with the sprint/stage)";
/* Interactive prompts. */
$lang->execution->confirmDelete = "Bạn có muốn xóa {$lang->executionCommon}[%s] này?";
$lang->execution->confirmUnlinkMember = "Bạn có muốn hủy liên kết người dùng này từ {$lang->executionCommon}?";
$lang->execution->confirmUnlinkStory = "Bạn có muốn hủy liên kết câu chuyện này từ {$lang->executionCommon}?";
$lang->execution->confirmDelete = "Bạn có muốn xóa {$lang->executionCommon}[%s] này?";
$lang->execution->confirmUnlinkMember = "Bạn có muốn hủy liên kết người dùng này từ {$lang->executionCommon}?";
$lang->execution->confirmUnlinkStory = "After {$lang->SRCommon} is removed, cased linked to {$lang->SRCommon} will be reomoved and tasks linked to {$lang->SRCommon} will be cancelled. Do you want to continue?;"
$lang->execution->confirmUnlinkExecutionStory = "Do you want to unlink this Story from the project?";
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Không có {$lang->productCommon} liên kết tới {$lang->executionCommon}. Bạn sẽ được chuyển tới trang {$lang->productCommon} để liên kết.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} không thể liên kết tới {$lang->productCommon} giống nhau 2 lần.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Truy cập của bạn tới {$lang->executionCommon} bị từ chối!";
$lang->execution->tips = 'Ghi chú';
$lang->execution->afterInfo = "{$lang->executionCommon} được tạo. Tiếp theo bạn có thể ";
$lang->execution->setTeam = 'Thiết lập đội nhóm';
$lang->execution->linkStory = 'Liên kết câu chuyện';
$lang->execution->createTask = 'Tạo nhiệm vụ';
$lang->execution->goback = "Trở lại";
$lang->execution->noweekend = 'Không gồm cuối tuần';
$lang->execution->withweekend = 'Bao gồm cuối tuần';
$lang->execution->interval = 'Intervals ';
$lang->execution->fixFirstWithLeft = 'Cập nhật cả giờ còn lại';
$lang->execution->notAllowedUnlinkStory = "This {$lang->SRCommon} is linked to the {$lang->executionCommon} of the project. Remove it from the {$lang->executionCommon}, then try again.";
$lang->execution->notAllowRemoveProducts = "The story of this product is linked with the {$lang->executionCommon}. Unlink it before doing any action.";
$lang->execution->errorNoLinkedProducts = "Không có {$lang->productCommon} liên kết tới {$lang->executionCommon}. Bạn sẽ được chuyển tới trang {$lang->productCommon} để liên kết.";
$lang->execution->errorSameProducts = "{$lang->executionCommon} không thể liên kết tới {$lang->productCommon} giống nhau 2 lần.";
$lang->execution->errorBegin = "The start time of {$lang->executionCommon} cannot be less than the start time of the project %s.";
$lang->execution->errorEnd = "The end time of {$lang->executionCommon} cannot be greater than the end time %s of the project.";
$lang->execution->accessDenied = "Truy cập của bạn tới {$lang->executionCommon} bị từ chối!";
$lang->execution->tips = 'Ghi chú';
$lang->execution->afterInfo = "{$lang->executionCommon} được tạo. Tiếp theo bạn có thể ";
$lang->execution->setTeam = 'Thiết lập đội nhóm';
$lang->execution->linkStory = 'Liên kết câu chuyện';
$lang->execution->createTask = 'Tạo nhiệm vụ';
$lang->execution->goback = "Trở lại";
$lang->execution->noweekend = 'Không gồm cuối tuần';
$lang->execution->withweekend = 'Bao gồm cuối tuần';
$lang->execution->interval = 'Intervals ';
$lang->execution->fixFirstWithLeft = 'Cập nhật cả giờ còn lại';
$lang->execution->unfinishedExecution = "This {$lang->executionCommon} has ";
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
$lang->execution->unfinishedTask = "[%s] unfinished tasks. ";
$lang->execution->unresolvedBug = "[%s] unresolved bugs. ";
$lang->execution->projectNotEmpty = 'Project cannot be empty.';
/* Statistics. */
$lang->execution->charts = new stdclass();
+31 -25
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
/* 字段列表。*/
$lang->execution->allExecutions = '所有' . $lang->executionCommon;
$lang->execution->allExecutions = '所有' . $lang->execution->common;
$lang->execution->allExecutionAB = "{$lang->execution->common}列表";
$lang->execution->id = $lang->executionCommon . '编号';
$lang->execution->type = $lang->executionCommon . '类型';
@@ -102,6 +102,12 @@ $lang->execution->noTeam = '暂时没有团队成员';
$lang->execution->or = '或';
$lang->execution->selectProject = '请选择项目';
/* Fields of zt_team. */
$lang->execution->root = '源ID';
$lang->execution->estimate = '预计';
$lang->execution->consumed = '消耗';
$lang->execution->left = '剩余';
if($this->config->systemMode == 'new') $lang->execution->copyTeamTip = "可以选择复制项目或{$lang->execution->common}团队的成员";
if($this->config->systemMode == 'classic') $lang->execution->copyTeamTip = "可以选择复制{$lang->executionCommon}团队的成员";
@@ -313,32 +319,32 @@ if($config->systemMode == 'classic') $lang->execution->copyTeamTitle = "选择
if($config->systemMode == 'new') $lang->execution->copyTeamTitle = "选择一个{$lang->project->common}或{$lang->execution->common}团队来复制";
/* 交互提示。*/
$lang->execution->confirmDelete = "您确定删除{$lang->executionCommon}[%s]吗?";
$lang->execution->confirmUnlinkMember = "您确定从该{$lang->executionCommon}中移除该用户吗?";
$lang->execution->confirmUnlinkStory = "您确定从该{$lang->executionCommon}中移除该{$lang->SRCommon}吗?";
$lang->execution->confirmSyncStories = "修改所属项目后,执行关联的{$lang->SRCommon}是否同步到新项目中?";
$lang->execution->confirmDelete = "您确定删除{$lang->executionCommon}[%s]吗?";
$lang->execution->confirmUnlinkMember = "您确定从该{$lang->executionCommon}中移除该用户吗?";
$lang->execution->confirmUnlinkStory = "移除该{$lang->SRCommon}后,该{$lang->SRCommon}关联的用例将被移除,该{$lang->SRCommon}关联的任务将被取消,请确认。";
$lang->execution->confirmSyncStories = "修改所属项目后,执行关联的{$lang->SRCommon}是否同步到新项目中?";
$lang->execution->confirmUnlinkExecutionStory = "您确定从该项目中移除该{$lang->SRCommon}吗?";
$lang->execution->notAllowedUnlinkStory = "该{$lang->SRCommon}已经与项目下{$lang->executionCommon}相关联,请从{$lang->executionCommon}中移除后再操作。";
$lang->execution->notAllowRemoveProducts = "该{$lang->productCommon}中的{$lang->SRCommon}已与该{$lang->executionCommon}进行了关联,请取消关联后再操作。";
$lang->execution->errorNoLinkedProducts = "该{$lang->executionCommon}没有关联的{$lang->productCommon},系统将转到{$lang->productCommon}关联页面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能关联多个相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的开始时间不能小于所属项目的开始时间%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的截止时间不能大于所属项目的结束时间%s。";
$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:";
$lang->execution->setTeam = '设置团队';
$lang->execution->linkStory = "关联{$lang->SRCommon}";
$lang->execution->createTask = '创建任务';
$lang->execution->goback = "返回任务列表";
$lang->execution->noweekend = '去除周末';
$lang->execution->withweekend = '显示周末';
$lang->execution->interval = '间隔';
$lang->execution->fixFirstWithLeft = '修改剩余工时';
$lang->execution->notAllowedUnlinkStory = "该{$lang->SRCommon}已经与项目下{$lang->executionCommon}相关联,请从{$lang->executionCommon}中移除后再操作。";
$lang->execution->notAllowRemoveProducts = "该{$lang->productCommon}中的{$lang->SRCommon}已与该{$lang->executionCommon}进行了关联,请取消关联后再操作。";
$lang->execution->errorNoLinkedProducts = "该{$lang->executionCommon}没有关联的{$lang->productCommon},系统将转到{$lang->productCommon}关联页面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能关联多个相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的开始时间不能小于所属项目的开始时间%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的截止时间不能大于所属项目的结束时间%s。";
$lang->execution->accessDenied = "您无权访问该{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您现在可以进行以下操作:";
$lang->execution->setTeam = '设置团队';
$lang->execution->linkStory = "关联{$lang->SRCommon}";
$lang->execution->createTask = '创建任务';
$lang->execution->goback = "返回任务列表";
$lang->execution->noweekend = '去除周末';
$lang->execution->withweekend = '显示周末';
$lang->execution->interval = '间隔';
$lang->execution->fixFirstWithLeft = '修改剩余工时';
$lang->execution->unfinishedExecution = "该{$lang->executionCommon}下还有";
$lang->execution->unfinishedTask = "[%s]个未完成的任务,";
$lang->execution->unresolvedBug = "[%s]个未解决的bug,";
$lang->execution->projectNotEmpty = '所属项目不能为空。';
$lang->execution->unfinishedTask = "[%s]个未完成的任务,";
$lang->execution->unresolvedBug = "[%s]个未解决的bug,";
$lang->execution->projectNotEmpty = '所属项目不能为空。';
/* 统计。*/
$lang->execution->charts = new stdclass();
+30 -24
View File
@@ -102,6 +102,12 @@ $lang->execution->noTeam = '暫時沒有團隊成員';
$lang->execution->or = '或';
$lang->execution->selectProject = '請選擇項目';
/* Fields of zt_team. */
$lang->execution->root = '源ID';
$lang->execution->estimate = '預計';
$lang->execution->consumed = '消耗';
$lang->execution->left = '剩餘';
if($this->config->systemMode == 'new') $lang->execution->copyTeamTip = "可以選擇複製項目或{$lang->execution->common}團隊的成員";
if($this->config->systemMode == 'classic') $lang->execution->copyTeamTip = "可以選擇複製{$lang->executionCommon}團隊的成員";
@@ -313,32 +319,32 @@ if($config->systemMode == 'classic') $lang->execution->copyTeamTitle = "選擇
if($config->systemMode == 'new') $lang->execution->copyTeamTitle = "選擇一個{$lang->project->common}或{$lang->execution->common}團隊來複制";
/* 交互提示。*/
$lang->execution->confirmDelete = "您確定刪除{$lang->executionCommon}[%s]嗎?";
$lang->execution->confirmUnlinkMember = "您確定從該{$lang->executionCommon}中移除該用戶嗎?";
$lang->execution->confirmUnlinkStory = "您確定從該{$lang->executionCommon}中移除該{$lang->SRCommon}嗎?";
$lang->execution->confirmSyncStories = "修改所屬項目後,執行關聯的{$lang->SRCommon}是否同步到新項目中?";
$lang->execution->confirmDelete = "您確定刪除{$lang->executionCommon}[%s]嗎?";
$lang->execution->confirmUnlinkMember = "您確定從該{$lang->executionCommon}中移除該用戶嗎?";
$lang->execution->confirmUnlinkStory = "移除該{$lang->SRCommon}後,該{$lang->SRCommon}關聯的用例將被移除,該{$lang->SRCommon}關聯的任務將被取消,請確認。";
$lang->execution->confirmSyncStories = "修改所屬項目後,執行關聯的{$lang->SRCommon}是否同步到新項目中?";
$lang->execution->confirmUnlinkExecutionStory = "您確定從該項目中移除該{$lang->SRCommon}嗎?";
$lang->execution->notAllowedUnlinkStory = "該{$lang->SRCommon}已經與項目下{$lang->executionCommon}相關聯,請從{$lang->executionCommon}中移除後再操作。";
$lang->execution->notAllowRemoveProducts = "該{$lang->productCommon}中的{$lang->SRCommon}已與該{$lang->executionCommon}進行了關聯,請取消關聯後再操作。";
$lang->execution->errorNoLinkedProducts = "該{$lang->executionCommon}沒有關聯的{$lang->productCommon},系統將轉到{$lang->productCommon}關聯頁面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能關聯多個相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的開始時間不能小於所屬項目的開始時間%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的截止時間不能大於所屬項目的結束時間%s。";
$lang->execution->accessDenied = "您無權訪問該{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您現在可以進行以下操作:";
$lang->execution->setTeam = '設置團隊';
$lang->execution->linkStory = "關聯{$lang->SRCommon}";
$lang->execution->createTask = '創建任務';
$lang->execution->goback = "返回任務列表";
$lang->execution->noweekend = '去除周末';
$lang->execution->withweekend = '顯示周末';
$lang->execution->interval = '間隔';
$lang->execution->fixFirstWithLeft = '修改剩餘工時';
$lang->execution->notAllowedUnlinkStory = "該{$lang->SRCommon}已經與項目下{$lang->executionCommon}相關聯,請從{$lang->executionCommon}中移除後再操作。";
$lang->execution->notAllowRemoveProducts = "該{$lang->productCommon}中的{$lang->SRCommon}已與該{$lang->executionCommon}進行了關聯,請取消關聯後再操作。";
$lang->execution->errorNoLinkedProducts = "該{$lang->executionCommon}沒有關聯的{$lang->productCommon},系統將轉到{$lang->productCommon}關聯頁面";
$lang->execution->errorSameProducts = "{$lang->executionCommon}不能關聯多個相同的{$lang->productCommon}。";
$lang->execution->errorBegin = "{$lang->executionCommon}的開始時間不能小於所屬項目的開始時間%s。";
$lang->execution->errorEnd = "{$lang->executionCommon}的截止時間不能大於所屬項目的結束時間%s。";
$lang->execution->accessDenied = "您無權訪問該{$lang->executionCommon}!";
$lang->execution->tips = '提示';
$lang->execution->afterInfo = "{$lang->executionCommon}添加成功,您現在可以進行以下操作:";
$lang->execution->setTeam = '設置團隊';
$lang->execution->linkStory = "關聯{$lang->SRCommon}";
$lang->execution->createTask = '創建任務';
$lang->execution->goback = "返回任務列表";
$lang->execution->noweekend = '去除周末';
$lang->execution->withweekend = '顯示周末';
$lang->execution->interval = '間隔';
$lang->execution->fixFirstWithLeft = '修改剩餘工時';
$lang->execution->unfinishedExecution = "該{$lang->executionCommon}下還有";
$lang->execution->unfinishedTask = "[%s]個未完成的任務,";
$lang->execution->unresolvedBug = "[%s]個未解決的bug,";
$lang->execution->projectNotEmpty = '所屬項目不能為空。';
$lang->execution->unfinishedTask = "[%s]個未完成的任務,";
$lang->execution->unresolvedBug = "[%s]個未解決的bug,";
$lang->execution->projectNotEmpty = '所屬項目不能為空。';
/* 統計。*/
$lang->execution->charts = new stdclass();
+29 -12
View File
@@ -49,7 +49,7 @@ class executionModel extends model
$loginLink = $this->config->requestType == 'GET' ? "?{$this->config->moduleVar}=user&{$this->config->methodVar}=login" : "user{$this->config->requestFix}login";
if(strpos($this->server->http_referer, $loginLink) !== false) die(js::locate(helper::createLink('execution', 'index')));
die(js::locate('back'));
die(js::locate(helper::createLink('execution', 'all')));
}
/**
@@ -239,24 +239,24 @@ class executionModel extends model
/* When the cookie and session do not exist, get it from the database. */
if(empty($executionID) and isset($this->config->execution->lastExecution) and isset($executions[$this->config->execution->lastExecution]))
{
$this->session->set('execution', $this->config->execution->lastExecution);
$this->session->set('execution', $this->config->execution->lastExecution, $this->app->tab);
$this->setProjectSession($this->session->execution);
return $this->session->execution;
}
if($executionID > 0) $this->session->set('execution', (int)$executionID, $this->app->tab);
if($executionID == 0 and $this->cookie->lastExecution)
{
/* Execution link is execution-task. */
$executionID = (int)$this->cookie->lastExecution;
$executionID = in_array($executionID, array_keys($executions)) ? $executionID : key($executions);
$this->session->set('execution', $executionID);
}
if($executionID == 0 and $this->session->execution == '') $this->session->set('execution', key($executions));
if(!isset($executions[$this->session->execution]))
if($executionID == 0 and $this->session->execution == '') $executionID = key($executions);
$this->session->set('execution', (int)$executionID, $this->app->tab);
if(!isset($executions[$executionID]))
{
$this->session->set('execution', key($executions));
if($executionID && strpos(",{$this->app->user->view->sprints},", ",{$this->session->execution},") === false) $this->accessDenied();
$this->session->set('execution', key($executions), $this->app->tab);
if($executionID && strpos(",{$this->app->user->view->sprints},", ",{$executionID},") === false) $this->accessDenied();
}
$this->setProjectSession($this->session->execution);
@@ -273,7 +273,7 @@ class executionModel extends model
public function setProjectSession($executionID)
{
$execution = $this->getByID($executionID);
if(!empty($execution)) $this->session->set('project', $execution->project);
if(!empty($execution)) $this->session->set('project', $execution->project, $this->app->tab);
}
/**
@@ -986,7 +986,7 @@ class executionModel extends model
*
* @param int $projectID
* @param string $type all|sprint|stage|kanban
* @param string $mode all|noclosed or empty
* @param string $mode all|noclosed|stagefilter or empty
* @access public
* @return array
*/
@@ -1024,6 +1024,7 @@ class executionModel extends model
foreach($executions as $execution)
{
if(strpos($mode, 'noclosed') !== false and ($execution->status == 'done' or $execution->status == 'closed')) continue;
if(strpos($mode, 'stagefilter') !== false and isset($executionModel) and $executionModel == 'waterfall' and in_array($execution->attribute, array('request', 'design', 'review'))) continue; // Some stages of waterfall not need.
$pairs[$execution->id] = $execution->name;
}
@@ -1179,6 +1180,8 @@ class executionModel extends model
*/
public function getByProject($projectID, $status = 'all', $limit = 0, $pairs = false)
{
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getExecutionPairs();
$project = $this->loadModel('project')->getByID($projectID);
$orderBy = (isset($project->model) and $project->model == 'waterfall') ? 'begin_asc,id_asc' : 'begin_desc,id_desc';
@@ -1233,10 +1236,24 @@ class executionModel extends model
$executions = $executionList;
}
$projects = array();
if(empty($projectID))
{
$projects = $this->dao->select('t1.id,t1.name')->from(TABLE_PROJECT)->alias('t1')
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.id=t2.project')
->where('t2.id')->in(array_keys($executions))
->fetchPairs('id', 'name');
}
if($pairs)
{
$executionPairs = array();
foreach($executions as $execution) $executionPairs[$execution->id] = $execution->name;
foreach($executions as $execution)
{
$executionPairs[$execution->id] = '';
if(isset($projects[$execution->project])) $executionPairs[$execution->id] .= $projects[$execution->project] . ' / ';
$executionPairs[$execution->id] .= $execution->name;
}
$executions = $executionPairs;
}
@@ -1416,7 +1433,7 @@ class executionModel extends model
/* Get all teams of all executions and group by executions, save it as static. */
$executions = $this->dao->select('root, limited')->from(TABLE_TEAM)
->where('type')->in('sprint,stage')
->where('type')->eq('execution')
->andWhere('account')->eq($this->app->user->account)
->andWhere('limited')->eq('yes')
->orderBy('root asc')
+1 -1
View File
@@ -176,7 +176,7 @@
<tr>
<td colspan='4' class='text-center form-actions'>
<?php echo html::submitButton();?>
<?php echo html::backButton();?>
<?php echo $gobackLink ? html::a($gobackLink, $lang->goback, '', 'class="btn btn-wide"') : html::backButton();?>
</td>
</tr>
</table>
+2 -2
View File
@@ -149,13 +149,13 @@ body {margin-bottom: 25px;}
<?php if($canBeChanged and (common::hasPriv('task', 'batchCreate', $checkObject) or common::hasPriv('task', 'create', $checkObject))):?>
<div class='btn-group dropdown'>
<?php
$actionLink = $this->createLink('task', 'create', "executionID=$executionID");
$actionLink = $this->createLink('task', 'create', "executionID=$executionID" . (isset($moduleID) ? "&storyID=0&moduleID=$moduleID" : ""));
echo html::a($actionLink, "<i class='icon icon-plus'></i> {$lang->task->create}", '', "class='btn btn-primary'");
?>
<button type='button' class='btn btn-primary dropdown-toggle' data-toggle='dropdown'><span class='caret'></span></button>
<ul class='dropdown-menu pull-right'>
<li><?php echo html::a($actionLink, $lang->task->create);?></li>
<li><?php echo html::a($this->createLink('task', 'batchCreate', "executionID=$executionID"), $lang->task->batchCreate);?></li>
<li><?php echo html::a($this->createLink('task', 'batchCreate', "executionID=$executionID" . (isset($moduleID) ? "&storyID=0&moduleID=$moduleID" : "")), $lang->task->batchCreate);?></li>
</ul>
</div>
<?php endif;?>
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
$lang->extension->common = 'Extension';
$lang->extension->id = 'ID';
$lang->extension->browse = 'Extensions';
$lang->extension->install = 'Install Extension';
$lang->extension->installAuto = 'Auto Installation';
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
$lang->extension->common = '插件管理';
$lang->extension->id = '编号';
$lang->extension->browse = '浏览插件';
$lang->extension->install = '安装插件';
$lang->extension->installAuto = '自动安装';
+1
View File
@@ -10,6 +10,7 @@
* @link http://www.zentao.net
*/
$lang->extension->common = '插件管理';
$lang->extension->id = '編號';
$lang->extension->browse = '瀏覽插件';
$lang->extension->install = '安裝插件';
$lang->extension->installAuto = '自動安裝';
+2 -1
View File
@@ -114,6 +114,7 @@ class file extends control
{
if(session_id() != $this->app->sessionID) helper::restartSession($this->app->sessionID);
$file = $this->file->getById($fileID);
if(empty($file)) die("<html><head><meta charset='utf-8'></head><body>{$this->lang->file->fileNotFound}</body></html>");
/* Judge the mode, down or open. */
$mode = 'down';
@@ -154,7 +155,7 @@ class file extends control
}
else
{
die($this->lang->file->fileNotFound);
die("<html><head><meta charset='utf-8'></head><body>{$this->lang->file->fileNotFound}</body></html>");
}
}
+4
View File
@@ -11,6 +11,10 @@
*/
$lang->file = new stdclass();
$lang->file->common = 'File';
$lang->file->id = 'ID';
$lang->file->objectType = 'Object Type';
$lang->file->objectID = 'Object ID';
$lang->file->deleted = 'Deleted';
$lang->file->uploadImages = 'Batch Upload Images';
$lang->file->download = 'Download Files';
$lang->file->uploadDate = 'Uploaded';
+4
View File
@@ -11,6 +11,10 @@
*/
$lang->file = new stdclass();
$lang->file->common = '附件';
$lang->file->id = '编号';
$lang->file->objectType = '对象类型';
$lang->file->objectID = '对象ID';
$lang->file->deleted = '已删除';
$lang->file->uploadImages = '多图上传';
$lang->file->download = '下载附件';
$lang->file->uploadDate = '上传时间:';
+4
View File
@@ -11,6 +11,10 @@
*/
$lang->file = new stdclass();
$lang->file->common = '附件';
$lang->file->id = '編號';
$lang->file->objectType = '對象類型';
$lang->file->objectID = '對象ID';
$lang->file->deleted = '已刪除';
$lang->file->uploadImages = '多圖上傳';
$lang->file->download = '下載附件';
$lang->file->uploadDate = '上傳時間:';
+41 -5
View File
@@ -4,6 +4,7 @@
.file-input-list .input-group-btn{float:left}
</style>
<?php js::set('dangerExtensions', ',' . $this->config->file->dangers . ',');?>
<?php js::set('maxUploadSize', $maxUploadSize);?>
<div class="file-input-list" data-provide="fileInputList" data-each-file-max-size="<?php echo $maxUploadSize;?>" data-file-size-error="<?php echo sprintf($lang->file->errorFileSize, $maxUploadSize);?>">
<div class="file-input">
<div class="file-input-empty">
@@ -32,11 +33,38 @@
</div>
</div>
<script>
function checkDangerExtension(obj)
var totalSize = 0;
maxUploadSize = unitConversion(maxUploadSize);
/**
* Conversion unit to byte.
*
* @param string $maxUploadSize
* @access public
* @return int
*/
function unitConversion(maxUploadSize)
{
var fileName = $(obj).val();
var sizeOfString = maxUploadSize;
if(sizeOfString.indexOf('K') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024;
if(sizeOfString.indexOf('M') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024 * 1024;
if(sizeOfString.indexOf('G') != -1) maxUploadSize = parseFloat(maxUploadSize) * 1024 * 1024 * 1024;
return parseFloat(maxUploadSize);
}
/**
* Check danger extension and file size.
*
* @param object $file
* @access public
* @return void
*/
function checkDangerExtension(file)
{
var fileName = $(file).val();
var index = fileName.lastIndexOf(".");
var fileSize = $(obj)[0].files[0].size;
var fileSize = $(file)[0].files[0].size;
totalSize += fileSize;
if(index >= 0)
{
@@ -44,14 +72,22 @@ function checkDangerExtension(obj)
if(dangerExtensions.lastIndexOf(',' + extension + ',') >= 0)
{
alert(<?php echo json_encode($this->lang->file->dangerFile);?>);
$(obj).val('');
$(file).val('');
return false;
}
if(fileSize == 0)
{
alert(<?php echo json_encode($this->lang->file->fileContentEmpty);?>);
$(obj).val('');
$(file).val('');
return false;
}
if(totalSize >= maxUploadSize)
{
alert(<?php echo json_encode(sprintf($lang->file->errorFileSize, $maxUploadSize));?>);
totalSize -= fileSize;
$(file).val('');
return false;
}
}
+426
View File
@@ -0,0 +1,426 @@
<?php
/* Every version of new privilege. */
$lang->changelog['1.0.1'][] = 'project-computeBurn';
$lang->changelog['1.1'][] = 'search-saveQuery';
$lang->changelog['1.1'][] = 'search-deleteQuery';
$lang->changelog['1.2'][] = 'product-doc';
$lang->changelog['1.2'][] = 'project-doc';
$lang->changelog['1.2'][] = 'bug-saveTemplate';
$lang->changelog['1.2'][] = 'bug-deleteTemplate';
$lang->changelog['1.2'][] = 'doc-index';
$lang->changelog['1.2'][] = 'doc-browse';
$lang->changelog['1.2'][] = 'doc-createLib';
$lang->changelog['1.2'][] = 'doc-editLib';
$lang->changelog['1.2'][] = 'doc-deleteLib';
$lang->changelog['1.2'][] = 'doc-create';
$lang->changelog['1.2'][] = 'doc-view';
$lang->changelog['1.2'][] = 'doc-edit';
$lang->changelog['1.2'][] = 'doc-delete';
$lang->changelog['1.2'][] = 'doc-deleteFile';
$lang->changelog['1.3'][] = 'task-start';
$lang->changelog['1.3'][] = 'task-complete';
$lang->changelog['1.3'][] = 'task-cancel';
$lang->changelog['1.3'][] = 'file-delete';
$lang->changelog['1.4'][] = 'my-testTask';
$lang->changelog['1.4'][] = 'my-testCase';
$lang->changelog['1.4'][] = 'task-finish';
$lang->changelog['1.4'][] = 'task-close';
$lang->changelog['1.4'][] = 'task-activate';
$lang->changelog['1.4'][] = 'search-select';
$lang->changelog['1.5'][] = 'task-batchClose';
$lang->changelog['2.0'][] = 'my-dynamic';
$lang->changelog['2.0'][] = 'bug-export';
$lang->changelog['2.0'][] = 'story-export';
$lang->changelog['2.0'][] = 'story-reportChart';
$lang->changelog['2.0'][] = 'task-export';
$lang->changelog['2.0'][] = 'task-reportChart';
$lang->changelog['2.0'][] = 'taskcase-export';
$lang->changelog['2.0'][] = 'company-dynamic';
$lang->changelog['2.0'][] = 'user-dynamic';
$lang->changelog['2.0'][] = 'extension-browse';
$lang->changelog['2.0'][] = 'extension-obtain';
$lang->changelog['2.0'][] = 'extension-install';
$lang->changelog['2.0'][] = 'extension-uninstall';
$lang->changelog['2.0'][] = 'extension-activate';
$lang->changelog['2.0'][] = 'extension-deactivate';
$lang->changelog['2.0'][] = 'extension-upload';
$lang->changelog['2.0'][] = 'extension-erase';
$lang->changelog['2.1'][] = 'extension-upgrade';
$lang->changelog['2.2'][] = 'file-edit';
$lang->changelog['2.3'][] = 'product-dynamic';
$lang->changelog['2.3'][] = 'project-dynamic';
$lang->changelog['2.3'][] = 'project-importBug';
$lang->changelog['2.3'][] = 'story-batchCreate';
$lang->changelog['2.3'][] = 'task-batchCreate';
$lang->changelog['2.3'][] = 'testcase-batchCreate';
$lang->changelog['2.3'][] = 'bug-confirmBug';
$lang->changelog['2.3'][] = 'svn-diff';
$lang->changelog['2.3'][] = 'svn-cat';
$lang->changelog['2.3'][] = 'svn-apiSync';
$lang->changelog['2.4'][] = 'task-assign';
$lang->changelog['2.4'][] = 'project-testtask';
$lang->changelog['2.4'][] = 'todo-export';
$lang->changelog['2.4'][] = 'product-project';
$lang->changelog['3.0.beta2'][] = 'extension-structure';
$lang->changelog['3.0.beta2'][] = 'product-order';
$lang->changelog['3.0.beta2'][] = 'project-order';
$lang->changelog['3.1'][] = 'todo-batchCreate';
$lang->changelog['3.2'][] = 'my-changePassword';
$lang->changelog['3.2'][] = 'story-batchClose';
$lang->changelog['3.2'][] = 'task-batchEdit';
$lang->changelog['3.2'][] = 'release-export';
$lang->changelog['3.2'][] = 'report-index';
$lang->changelog['3.2'][] = 'report-projectDeviation';
$lang->changelog['3.2'][] = 'report-productSummary';
$lang->changelog['3.2'][] = 'report-bugCreate';
$lang->changelog['3.2'][] = 'report-workload';
$lang->changelog['3.2'][] = 'tree-fix';
$lang->changelog['3.3'][] = 'report-bugAssign';
$lang->changelog['4.0.beta1'][] = 'user-batchCreate';
$lang->changelog['4.0.beta1'][] = 'user-unlock';
$lang->changelog['4.0.beta1'][] = 'admin-checkDB';
$lang->changelog['4.0.beta2'][] = 'todo-batchEdit';
$lang->changelog['4.0.beta2'][] = 'story-batchEdit';
$lang->changelog['4.0.beta2'][] = 'bug-batchEdit';
$lang->changelog['4.0.beta2'][] = 'testcase-batchEdit';
$lang->changelog['4.0.beta2'][] = 'testtask-batchRun';
$lang->changelog['4.0.beta2'][] = 'user-batchEdit';
$lang->changelog['4.0.beta2'][] = 'user-manageContacts';
$lang->changelog['4.0.beta2'][] = 'user-deleteContacts';
$lang->changelog['4.0'][] = 'todo-finish';
$lang->changelog['4.0'][] = 'product-close';
$lang->changelog['4.0'][] = 'project-start';
$lang->changelog['4.0'][] = 'project-activate';
$lang->changelog['4.0'][] = 'project-putoff';
$lang->changelog['4.0'][] = 'project-suspend';
$lang->changelog['4.0'][] = 'project-close';
$lang->changelog['4.0'][] = 'task-record';
$lang->changelog['4.0'][] = 'testtask-start';
$lang->changelog['4.0'][] = 'testtask-close';
$lang->changelog['4.0'][] = 'action-hideOne';
$lang->changelog['4.0'][] = 'action-hideAll';
$lang->changelog['4.0'][] = 'task-editEstimate';
$lang->changelog['4.0'][] = 'task-deleteEstimate';
$lang->changelog['4.1'][] = 'todo-batchFinish';
$lang->changelog['4.1'][] = 'productplan-batchUnlinkStory';
$lang->changelog['4.1'][] = 'company-view';
$lang->changelog['4.1'][] = 'user-story';
$lang->changelog['4.1'][] = 'user-testTask';
$lang->changelog['4.1'][] = 'user-testCase';
$lang->changelog['4.2.beta'][] = 'tree-browseTask';
$lang->changelog['4.3.beta'][] = 'product-batchEdit';
$lang->changelog['4.3.beta'][] = 'project-batchEdit';
$lang->changelog['4.3.beta'][] = 'story-batchReview';
$lang->changelog['4.3.beta'][] = 'story-batchChangePlan';
$lang->changelog['4.3.beta'][] = 'story-batchChangeStage';
$lang->changelog['4.3.beta'][] = 'productplan-linkBug';
$lang->changelog['4.3.beta'][] = 'productplan-unlinkBug';
$lang->changelog['4.3.beta'][] = 'productplan-batchUnlinkBug';
$lang->changelog['4.3.beta'][] = 'bug-batchCreate';
$lang->changelog['4.3.beta'][] = 'testcase-exportTemplet';
$lang->changelog['4.3.beta'][] = 'testcase-import';
$lang->changelog['4.3.beta'][] = 'testcase-showImport';
$lang->changelog['4.3.beta'][] = 'testcase-confirmChange';
$lang->changelog['4.3.beta'][] = 'mail-reset';
$lang->changelog['4.3.beta'][] = 'api-debug';
$lang->changelog['4.3.beta'][] = 'action-editComment';
$lang->changelog['5.0.beta1'][] = 'bug-batchConfirm';
$lang->changelog['5.0.beta1'][] = 'bug-batchResolve';
$lang->changelog['5.0.beta1'][] = 'custom-index';
$lang->changelog['5.0.beta1'][] = 'custom-set';
$lang->changelog['5.0.beta1'][] = 'custom-restore';
$lang->changelog['5.0.beta2'][] = 'git-diff';
$lang->changelog['5.0.beta2'][] = 'git-cat';
$lang->changelog['5.0.beta2'][] = 'git-apiSync';
$lang->changelog['5.3'][] = 'bug-batchClose';
$lang->changelog['6.1'][] = 'story-zeroCase';
$lang->changelog['6.1'][] = 'testcase-groupCase';
$lang->changelog['6.1'][] = 'testtask-groupCase';
$lang->changelog['6.2'][] = 'task-pause';
$lang->changelog['6.2'][] = 'task-restart';
$lang->changelog['6.2'][] = 'testcase-createBug';
$lang->changelog['6.3'][] = 'bug-batchAssignTo';
$lang->changelog['6.3'][] = 'task-batchAssignTo';
$lang->changelog['6.3'][] = 'file-uploadImages';
$lang->changelog['6.3'][] = 'project-batchUnlinkStory';
$lang->changelog['6.4'][] = 'api-sql';
$lang->changelog['6.4'][] = 'backup-index';
$lang->changelog['6.4'][] = 'backup-backup';
$lang->changelog['6.4'][] = 'backup-restore';
$lang->changelog['6.4'][] = 'backup-delete';
$lang->changelog['6.4'][] = 'build-linkStory';
$lang->changelog['6.4'][] = 'build-unlinkStory';
$lang->changelog['6.4'][] = 'build-batchUnlinkStory';
$lang->changelog['6.4'][] = 'build-linkBug';
$lang->changelog['6.4'][] = 'build-unlinkBug';
$lang->changelog['6.4'][] = 'build-batchUnlinkBug';
$lang->changelog['6.4'][] = 'dept-edit';
$lang->changelog['6.4'][] = 'release-linkStory';
$lang->changelog['6.4'][] = 'release-unlinkStory';
$lang->changelog['6.4'][] = 'release-batchUnlinkStory';
$lang->changelog['6.4'][] = 'release-linkBug';
$lang->changelog['6.4'][] = 'release-unlinkBug';
$lang->changelog['6.4'][] = 'release-batchUnlinkBug';
$lang->changelog['6.4'][] = 'story-batchAssignTo';
$lang->changelog['7.1'][] = 'cron-index';
$lang->changelog['7.1'][] = 'cron-turnon';
$lang->changelog['7.1'][] = 'cron-create';
$lang->changelog['7.1'][] = 'cron-edit';
$lang->changelog['7.1'][] = 'cron-toggle';
$lang->changelog['7.1'][] = 'cron-delete';
$lang->changelog['7.1'][] = 'mail-browse';
$lang->changelog['7.1'][] = 'mail-delete';
$lang->changelog['7.1'][] = 'mail-batchDelete';
$lang->changelog['7.1'][] = 'dev-api';
$lang->changelog['7.1'][] = 'dev-db';
$lang->changelog['7.2'][] = 'admin-safeIndex';
$lang->changelog['7.2'][] = 'admin-checkWeak';
$lang->changelog['7.2'][] = 'backup-change';
$lang->changelog['7.2'][] = 'custom-flow';
$lang->changelog['7.2'][] = 'group-manageView';
$lang->changelog['7.2'][] = 'product-updateOrder';
$lang->changelog['7.2'][] = 'project-updateOrder';
$lang->changelog['7.3'][] = 'project-fixFirst';
$lang->changelog['7.3'][] = 'productplan-batchEdit';
$lang->changelog['7.3'][] = 'admin-sso';
$lang->changelog['7.3'][] = 'cron-openProcess';
$lang->changelog['7.3'][] = 'mail-sendCloud';
$lang->changelog['7.3'][] = 'mail-sendcloudUser';
$lang->changelog['7.4.beta'][] = 'release-changeStatus';
$lang->changelog['7.4.beta'][] = 'user-unbind';
$lang->changelog['7.4.beta'][] = 'branch-manage';
$lang->changelog['7.4.beta'][] = 'branch-delete';
$lang->changelog['7.4.beta'][] = 'my-unbind';
$lang->changelog['8.0'][] = 'story-batchChangeBranch';
$lang->changelog['8.0.1'][] = 'bug-linkBugs';
$lang->changelog['8.0.1'][] = 'story-linkStory';
$lang->changelog['8.0.1'][] = 'testcase-linkCases';
$lang->changelog['8.1.3'][] = 'story-batchChangeModule';
$lang->changelog['8.1.3'][] = 'task-batchChangeModule';
$lang->changelog['8.1.3'][] = 'bug-batchChangeModule';
$lang->changelog['8.1.3'][] = 'testcase-batchChangeModule';
$lang->changelog['8.1.3'][] = 'my-manageContacts';
$lang->changelog['8.1.3'][] = 'my-deleteContacts';
$lang->changelog['8.2.beta'][] = 'product-all';
$lang->changelog['8.2.beta'][] = 'project-tree';
$lang->changelog['8.2.beta'][] = 'project-all';
$lang->changelog['8.2.beta'][] = 'project-kanban';
$lang->changelog['8.2.beta'][] = 'project-tree';
$lang->changelog['8.3'][] = 'doc-allLibs';
$lang->changelog['8.3'][] = 'doc-objectLibs';
$lang->changelog['8.3'][] = 'doc-showFiles';
$lang->changelog['8.4'][] = 'branch-sort';
$lang->changelog['8.4'][] = 'story-bugs';
$lang->changelog['8.4'][] = 'story-cases';
$lang->changelog['9.0'][] = 'testcase-bugs';
$lang->changelog['9.0'][] = 'mail-resend';
$lang->changelog['9.1'][] = 'testcase-review';
$lang->changelog['9.1'][] = 'testcase-batchReview';
$lang->changelog['9.1'][] = 'testcase-importFromLib';
$lang->changelog['9.1'][] = 'testcase-batchCaseTypeChange';
$lang->changelog['9.1'][] = 'testcase-batchConfirmStoryChange';
$lang->changelog['9.1'][] = 'testreport-browse';
$lang->changelog['9.1'][] = 'testreport-create';
$lang->changelog['9.1'][] = 'testreport-view';
$lang->changelog['9.1'][] = 'testreport-delete';
$lang->changelog['9.1'][] = 'testreport-edit';
$lang->changelog['9.1'][] = 'testsuite-index';
$lang->changelog['9.1'][] = 'testsuite-browse';
$lang->changelog['9.1'][] = 'testsuite-create';
$lang->changelog['9.1'][] = 'testsuite-view';
$lang->changelog['9.1'][] = 'testsuite-edit';
$lang->changelog['9.1'][] = 'testsuite-delete';
$lang->changelog['9.1'][] = 'testsuite-linkCase';
$lang->changelog['9.1'][] = 'testsuite-unlinkCase';
$lang->changelog['9.1'][] = 'testsuite-batchUnlinkCases';
$lang->changelog['9.1'][] = 'testsuite-library';
$lang->changelog['9.1'][] = 'testsuite-createLib';
$lang->changelog['9.1'][] = 'testsuite-createCase';
$lang->changelog['9.1'][] = 'testsuite-libView';
$lang->changelog['9.1'][] = 'caselib-library';
$lang->changelog['9.1'][] = 'caselib-createLib';
$lang->changelog['9.1'][] = 'caselib-edit';
$lang->changelog['9.1'][] = 'caselib-createCase';
$lang->changelog['9.1'][] = 'caselib-libView';
$lang->changelog['9.1'][] = 'testtask-activate';
$lang->changelog['9.1'][] = 'testtask-block';
$lang->changelog['9.1'][] = 'testtask-report';
$lang->changelog['9.2'][] = 'custom-working';
$lang->changelog['9.2'][] = 'doc-sort';
$lang->changelog['9.2'][] = 'product-build';
$lang->changelog['9.2'][] = 'testsuite-batchCreateCase';
$lang->changelog['9.2'][] = 'testsuite-exportTemplet';
$lang->changelog['9.2'][] = 'testsuite-import';
$lang->changelog['9.2'][] = 'testsuite-showImport';
$lang->changelog['9.5'][] = 'bug-batchActivate';
$lang->changelog['9.6'][] = 'custom-setPublic';
$lang->changelog['9.6'][] = 'datatable-setGlobal';
$lang->changelog['9.6'][] = 'product-export';
$lang->changelog['9.6'][] = 'project-export';
$lang->changelog['9.6'][] = 'project-storyKanban';
$lang->changelog['9.6'][] = 'project-storySort';
$lang->changelog['9.8'][] = 'message-index';
$lang->changelog['9.8'][] = 'message-setting';
$lang->changelog['9.8'][] = 'todo-createCycle';
$lang->changelog['9.8'][] = 'project-importPlanStories';
$lang->changelog['9.8'][] = 'todo-assignTo';
$lang->changelog['9.8'][] = 'todo-activate';
$lang->changelog['9.8'][] = 'todo-close';
$lang->changelog['10.0.alpha'][] = 'my-calendar';
$lang->changelog['10.0.alpha'][] = 'doc-collect';
$lang->changelog['10.1'][] = 'todo-batchClose';
$lang->changelog['10.1'][] = 'project-treeTask';
$lang->changelog['10.1'][] = 'project-treeStory';
$lang->changelog['10.6'][] = 'backup-setting';
$lang->changelog['10.6'][] = 'backup-rmPHPHeader';
$lang->changelog['11.6.2'][] = 'message-browser';
$lang->changelog['12.3'][] = 'testtask-browseUnits';
$lang->changelog['12.3'][] = 'testtask-unitCases';
$lang->changelog['12.3'][] = 'testtask-importUnitResult';
$lang->changelog['12.3'][] = 'job-view';
$lang->changelog['12.3'][] = 'ci-commitResult';
$lang->changelog['12.5'][] = 'story-batchToTask';
$lang->changelog['12.5'][] = 'custom-product';
$lang->changelog['12.5'][] = 'custom-project';
$lang->changelog['15.0.rc1'][] = 'program-browse';
$lang->changelog['15.0.rc1'][] = 'program-view';
$lang->changelog['15.0.rc1'][] = 'program-product';
$lang->changelog['15.0.rc1'][] = 'program-create';
$lang->changelog['15.0.rc1'][] = 'program-edit';
$lang->changelog['15.0.rc1'][] = 'program-start';
$lang->changelog['15.0.rc1'][] = 'program-suspend';
$lang->changelog['15.0.rc1'][] = 'program-activate';
$lang->changelog['15.0.rc1'][] = 'program-close';
$lang->changelog['15.0.rc1'][] = 'program-delete';
$lang->changelog['15.0.rc1'][] = 'program-project';
$lang->changelog['15.0.rc1'][] = 'program-stakeholder';
$lang->changelog['15.0.rc1'][] = 'program-createStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-unlinkStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-batchUnlinkStakeholders';
$lang->changelog['15.0.rc1'][] = 'program-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'program-export';
$lang->changelog['15.0.rc1'][] = 'project-execution';
$lang->changelog['15.0.rc1'][] = 'project-group';
$lang->changelog['15.0.rc1'][] = 'project-createGroup';
$lang->changelog['15.0.rc1'][] = 'project-manageView';
$lang->changelog['15.0.rc1'][] = 'project-managePriv';
$lang->changelog['15.0.rc1'][] = 'project-manageGroupMember';
$lang->changelog['15.0.rc1'][] = 'project-copyGroup';
$lang->changelog['15.0.rc1'][] = 'project-editGroup';
$lang->changelog['15.0.rc1'][] = 'project-whitelist';
$lang->changelog['15.0.rc1'][] = 'project-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-qa';
$lang->changelog['15.0.rc1'][] = 'project-createGuide';
$lang->changelog['15.0.rc1'][] = 'project-moduleOpen';
$lang->changelog['15.0.rc1'][] = 'personnel-accessible';
$lang->changelog['15.0.rc1'][] = 'personnel-invest';
$lang->changelog['15.0.rc1'][] = 'personnel-whitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'my-workAction';
$lang->changelog['15.0.rc1'][] = 'my-contributeAction';
$lang->changelog['15.0.rc1'][] = 'my-testtask';
$lang->changelog['15.0.rc1'][] = 'my-execution';
$lang->changelog['15.0.rc1'][] = 'my-doc';
$lang->changelog['15.0.rc1'][] = 'my-calendarAction';
$lang->changelog['15.0.rc1'][] = 'story-trackAB';
$lang->changelog['15.0.rc1'][] = 'story-processStoryChange';
$lang->changelog['15.0.rc1'][] = 'projectstory-story';
$lang->changelog['15.0.rc1'][] = 'projectstory-trackAction';
$lang->changelog['15.0.rc1'][] = 'projectstory-view';
$lang->changelog['15.0.rc1'][] = 'projectstory-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-importplanstories';
$lang->changelog['15.0.rc1'][] = 'execution-whitelist';
$lang->changelog['15.0.rc1'][] = 'execution-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'execution-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'automation-browse';
$lang->changelog['15.0.rc1'][] = 'group-manageProjectAdmin';
$lang->changelog['15.0.rc1'][] = 'user-execution';
$lang->changelog['15.0.rc1'][] = 'custom-setStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-editStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-browseStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-setDefaultConcept';
$lang->changelog['15.0.rc1'][] = 'custom-deleteStoryConcept';
$lang->changelog['15.0.rc1'][] = 'search-index';
$lang->changelog['15.0.rc1'][] = 'search-buildIndex';
$lang->changelog['15.0.rc1'][] = 'projectbuild-browse';
$lang->changelog['15.0.rc1'][] = 'projectrelease-browseAction';
$lang->changelog['15.0.rc1'][] = 'projectrelease-create';
$lang->changelog['15.0.rc1'][] = 'projectrelease-edit';
$lang->changelog['15.0.rc1'][] = 'projectrelease-delete';
$lang->changelog['15.0.rc1'][] = 'projectrelease-view';
$lang->changelog['15.0.rc1'][] = 'projectrelease-export';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-changeStatus';
$lang->changelog['15.0.rc1'][] = 'stakeholder-browse';
$lang->changelog['15.0.rc1'][] = 'stakeholder-create';
$lang->changelog['15.0.rc1'][] = 'stakeholder-batchCreate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-edit';
$lang->changelog['15.0.rc1'][] = 'stakeholder-delete';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-issue';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewIssueAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-communicate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expectation';
$lang->changelog['15.0.rc1'][] = 'stakeholder-deleteExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-createExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-editExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-userIssue';
+2
View File
@@ -34,6 +34,8 @@ $lang->group->dynamic = 'Access Dynamics';
$lang->group->noticeVisit = 'Blank means no access limit.';
$lang->group->noneProgram = "No Program";
$lang->group->noneProduct = "No {$lang->productCommon}";
$lang->group->project = 'Project';
$lang->group->group = 'Group';
global $config;
if($config->systemMode == 'new') $lang->group->noneProject = 'No Project';
+1 -425
View File
@@ -1479,428 +1479,4 @@ $lang->dev->methodOrder[10] = 'db';
$lang->dev->methodOrder[15] = 'editor';
$lang->dev->methodOrder[20] = 'translate';
/* Every version of new privilege. */
$lang->changelog['1.0.1'][] = 'project-computeBurn';
$lang->changelog['1.1'][] = 'search-saveQuery';
$lang->changelog['1.1'][] = 'search-deleteQuery';
$lang->changelog['1.2'][] = 'product-doc';
$lang->changelog['1.2'][] = 'project-doc';
$lang->changelog['1.2'][] = 'bug-saveTemplate';
$lang->changelog['1.2'][] = 'bug-deleteTemplate';
$lang->changelog['1.2'][] = 'doc-index';
$lang->changelog['1.2'][] = 'doc-browse';
$lang->changelog['1.2'][] = 'doc-createLib';
$lang->changelog['1.2'][] = 'doc-editLib';
$lang->changelog['1.2'][] = 'doc-deleteLib';
$lang->changelog['1.2'][] = 'doc-create';
$lang->changelog['1.2'][] = 'doc-view';
$lang->changelog['1.2'][] = 'doc-edit';
$lang->changelog['1.2'][] = 'doc-delete';
$lang->changelog['1.2'][] = 'doc-deleteFile';
$lang->changelog['1.3'][] = 'task-start';
$lang->changelog['1.3'][] = 'task-complete';
$lang->changelog['1.3'][] = 'task-cancel';
$lang->changelog['1.3'][] = 'file-delete';
$lang->changelog['1.4'][] = 'my-testTask';
$lang->changelog['1.4'][] = 'my-testCase';
$lang->changelog['1.4'][] = 'task-finish';
$lang->changelog['1.4'][] = 'task-close';
$lang->changelog['1.4'][] = 'task-activate';
$lang->changelog['1.4'][] = 'search-select';
$lang->changelog['1.5'][] = 'task-batchClose';
$lang->changelog['2.0'][] = 'my-dynamic';
$lang->changelog['2.0'][] = 'bug-export';
$lang->changelog['2.0'][] = 'story-export';
$lang->changelog['2.0'][] = 'story-reportChart';
$lang->changelog['2.0'][] = 'task-export';
$lang->changelog['2.0'][] = 'task-reportChart';
$lang->changelog['2.0'][] = 'taskcase-export';
$lang->changelog['2.0'][] = 'company-dynamic';
$lang->changelog['2.0'][] = 'user-dynamic';
$lang->changelog['2.0'][] = 'extension-browse';
$lang->changelog['2.0'][] = 'extension-obtain';
$lang->changelog['2.0'][] = 'extension-install';
$lang->changelog['2.0'][] = 'extension-uninstall';
$lang->changelog['2.0'][] = 'extension-activate';
$lang->changelog['2.0'][] = 'extension-deactivate';
$lang->changelog['2.0'][] = 'extension-upload';
$lang->changelog['2.0'][] = 'extension-erase';
$lang->changelog['2.1'][] = 'extension-upgrade';
$lang->changelog['2.2'][] = 'file-edit';
$lang->changelog['2.3'][] = 'product-dynamic';
$lang->changelog['2.3'][] = 'project-dynamic';
$lang->changelog['2.3'][] = 'project-importBug';
$lang->changelog['2.3'][] = 'story-batchCreate';
$lang->changelog['2.3'][] = 'task-batchCreate';
$lang->changelog['2.3'][] = 'testcase-batchCreate';
$lang->changelog['2.3'][] = 'bug-confirmBug';
$lang->changelog['2.3'][] = 'svn-diff';
$lang->changelog['2.3'][] = 'svn-cat';
$lang->changelog['2.3'][] = 'svn-apiSync';
$lang->changelog['2.4'][] = 'task-assign';
$lang->changelog['2.4'][] = 'project-testtask';
$lang->changelog['2.4'][] = 'todo-export';
$lang->changelog['2.4'][] = 'product-project';
$lang->changelog['3.0.beta2'][] = 'extension-structure';
$lang->changelog['3.0.beta2'][] = 'product-order';
$lang->changelog['3.0.beta2'][] = 'project-order';
$lang->changelog['3.1'][] = 'todo-batchCreate';
$lang->changelog['3.2'][] = 'my-changePassword';
$lang->changelog['3.2'][] = 'story-batchClose';
$lang->changelog['3.2'][] = 'task-batchEdit';
$lang->changelog['3.2'][] = 'release-export';
$lang->changelog['3.2'][] = 'report-index';
$lang->changelog['3.2'][] = 'report-projectDeviation';
$lang->changelog['3.2'][] = 'report-productSummary';
$lang->changelog['3.2'][] = 'report-bugCreate';
$lang->changelog['3.2'][] = 'report-workload';
$lang->changelog['3.2'][] = 'tree-fix';
$lang->changelog['3.3'][] = 'report-bugAssign';
$lang->changelog['4.0.beta1'][] = 'user-batchCreate';
$lang->changelog['4.0.beta1'][] = 'user-unlock';
$lang->changelog['4.0.beta1'][] = 'admin-checkDB';
$lang->changelog['4.0.beta2'][] = 'todo-batchEdit';
$lang->changelog['4.0.beta2'][] = 'story-batchEdit';
$lang->changelog['4.0.beta2'][] = 'bug-batchEdit';
$lang->changelog['4.0.beta2'][] = 'testcase-batchEdit';
$lang->changelog['4.0.beta2'][] = 'testtask-batchRun';
$lang->changelog['4.0.beta2'][] = 'user-batchEdit';
$lang->changelog['4.0.beta2'][] = 'user-manageContacts';
$lang->changelog['4.0.beta2'][] = 'user-deleteContacts';
$lang->changelog['4.0'][] = 'todo-finish';
$lang->changelog['4.0'][] = 'product-close';
$lang->changelog['4.0'][] = 'project-start';
$lang->changelog['4.0'][] = 'project-activate';
$lang->changelog['4.0'][] = 'project-putoff';
$lang->changelog['4.0'][] = 'project-suspend';
$lang->changelog['4.0'][] = 'project-close';
$lang->changelog['4.0'][] = 'task-record';
$lang->changelog['4.0'][] = 'testtask-start';
$lang->changelog['4.0'][] = 'testtask-close';
$lang->changelog['4.0'][] = 'action-hideOne';
$lang->changelog['4.0'][] = 'action-hideAll';
$lang->changelog['4.0'][] = 'task-editEstimate';
$lang->changelog['4.0'][] = 'task-deleteEstimate';
$lang->changelog['4.1'][] = 'todo-batchFinish';
$lang->changelog['4.1'][] = 'productplan-batchUnlinkStory';
$lang->changelog['4.1'][] = 'company-view';
$lang->changelog['4.1'][] = 'user-story';
$lang->changelog['4.1'][] = 'user-testTask';
$lang->changelog['4.1'][] = 'user-testCase';
$lang->changelog['4.2.beta'][] = 'tree-browseTask';
$lang->changelog['4.3.beta'][] = 'product-batchEdit';
$lang->changelog['4.3.beta'][] = 'project-batchEdit';
$lang->changelog['4.3.beta'][] = 'story-batchReview';
$lang->changelog['4.3.beta'][] = 'story-batchChangePlan';
$lang->changelog['4.3.beta'][] = 'story-batchChangeStage';
$lang->changelog['4.3.beta'][] = 'productplan-linkBug';
$lang->changelog['4.3.beta'][] = 'productplan-unlinkBug';
$lang->changelog['4.3.beta'][] = 'productplan-batchUnlinkBug';
$lang->changelog['4.3.beta'][] = 'bug-batchCreate';
$lang->changelog['4.3.beta'][] = 'testcase-exportTemplet';
$lang->changelog['4.3.beta'][] = 'testcase-import';
$lang->changelog['4.3.beta'][] = 'testcase-showImport';
$lang->changelog['4.3.beta'][] = 'testcase-confirmChange';
$lang->changelog['4.3.beta'][] = 'mail-reset';
$lang->changelog['4.3.beta'][] = 'api-debug';
$lang->changelog['4.3.beta'][] = 'action-editComment';
$lang->changelog['5.0.beta1'][] = 'bug-batchConfirm';
$lang->changelog['5.0.beta1'][] = 'bug-batchResolve';
$lang->changelog['5.0.beta1'][] = 'custom-index';
$lang->changelog['5.0.beta1'][] = 'custom-set';
$lang->changelog['5.0.beta1'][] = 'custom-restore';
$lang->changelog['5.0.beta2'][] = 'git-diff';
$lang->changelog['5.0.beta2'][] = 'git-cat';
$lang->changelog['5.0.beta2'][] = 'git-apiSync';
$lang->changelog['5.3'][] = 'bug-batchClose';
$lang->changelog['6.1'][] = 'story-zeroCase';
$lang->changelog['6.1'][] = 'testcase-groupCase';
$lang->changelog['6.1'][] = 'testtask-groupCase';
$lang->changelog['6.2'][] = 'task-pause';
$lang->changelog['6.2'][] = 'task-restart';
$lang->changelog['6.2'][] = 'testcase-createBug';
$lang->changelog['6.3'][] = 'bug-batchAssignTo';
$lang->changelog['6.3'][] = 'task-batchAssignTo';
$lang->changelog['6.3'][] = 'file-uploadImages';
$lang->changelog['6.3'][] = 'project-batchUnlinkStory';
$lang->changelog['6.4'][] = 'api-sql';
$lang->changelog['6.4'][] = 'backup-index';
$lang->changelog['6.4'][] = 'backup-backup';
$lang->changelog['6.4'][] = 'backup-restore';
$lang->changelog['6.4'][] = 'backup-delete';
$lang->changelog['6.4'][] = 'build-linkStory';
$lang->changelog['6.4'][] = 'build-unlinkStory';
$lang->changelog['6.4'][] = 'build-batchUnlinkStory';
$lang->changelog['6.4'][] = 'build-linkBug';
$lang->changelog['6.4'][] = 'build-unlinkBug';
$lang->changelog['6.4'][] = 'build-batchUnlinkBug';
$lang->changelog['6.4'][] = 'dept-edit';
$lang->changelog['6.4'][] = 'release-linkStory';
$lang->changelog['6.4'][] = 'release-unlinkStory';
$lang->changelog['6.4'][] = 'release-batchUnlinkStory';
$lang->changelog['6.4'][] = 'release-linkBug';
$lang->changelog['6.4'][] = 'release-unlinkBug';
$lang->changelog['6.4'][] = 'release-batchUnlinkBug';
$lang->changelog['6.4'][] = 'story-batchAssignTo';
$lang->changelog['7.1'][] = 'cron-index';
$lang->changelog['7.1'][] = 'cron-turnon';
$lang->changelog['7.1'][] = 'cron-create';
$lang->changelog['7.1'][] = 'cron-edit';
$lang->changelog['7.1'][] = 'cron-toggle';
$lang->changelog['7.1'][] = 'cron-delete';
$lang->changelog['7.1'][] = 'mail-browse';
$lang->changelog['7.1'][] = 'mail-delete';
$lang->changelog['7.1'][] = 'mail-batchDelete';
$lang->changelog['7.1'][] = 'dev-api';
$lang->changelog['7.1'][] = 'dev-db';
$lang->changelog['7.2'][] = 'admin-safeIndex';
$lang->changelog['7.2'][] = 'admin-checkWeak';
$lang->changelog['7.2'][] = 'backup-change';
$lang->changelog['7.2'][] = 'custom-flow';
$lang->changelog['7.2'][] = 'group-manageView';
$lang->changelog['7.2'][] = 'product-updateOrder';
$lang->changelog['7.2'][] = 'project-updateOrder';
$lang->changelog['7.3'][] = 'project-fixFirst';
$lang->changelog['7.3'][] = 'productplan-batchEdit';
$lang->changelog['7.3'][] = 'admin-sso';
$lang->changelog['7.3'][] = 'cron-openProcess';
$lang->changelog['7.3'][] = 'mail-sendCloud';
$lang->changelog['7.3'][] = 'mail-sendcloudUser';
$lang->changelog['7.4.beta'][] = 'release-changeStatus';
$lang->changelog['7.4.beta'][] = 'user-unbind';
$lang->changelog['7.4.beta'][] = 'branch-manage';
$lang->changelog['7.4.beta'][] = 'branch-delete';
$lang->changelog['7.4.beta'][] = 'my-unbind';
$lang->changelog['8.0'][] = 'story-batchChangeBranch';
$lang->changelog['8.0.1'][] = 'bug-linkBugs';
$lang->changelog['8.0.1'][] = 'story-linkStory';
$lang->changelog['8.0.1'][] = 'testcase-linkCases';
$lang->changelog['8.1.3'][] = 'story-batchChangeModule';
$lang->changelog['8.1.3'][] = 'task-batchChangeModule';
$lang->changelog['8.1.3'][] = 'bug-batchChangeModule';
$lang->changelog['8.1.3'][] = 'testcase-batchChangeModule';
$lang->changelog['8.1.3'][] = 'my-manageContacts';
$lang->changelog['8.1.3'][] = 'my-deleteContacts';
$lang->changelog['8.2.beta'][] = 'product-all';
$lang->changelog['8.2.beta'][] = 'project-tree';
$lang->changelog['8.2.beta'][] = 'project-all';
$lang->changelog['8.2.beta'][] = 'project-kanban';
$lang->changelog['8.2.beta'][] = 'project-tree';
$lang->changelog['8.3'][] = 'doc-allLibs';
$lang->changelog['8.3'][] = 'doc-objectLibs';
$lang->changelog['8.3'][] = 'doc-showFiles';
$lang->changelog['8.4'][] = 'branch-sort';
$lang->changelog['8.4'][] = 'story-bugs';
$lang->changelog['8.4'][] = 'story-cases';
$lang->changelog['9.0'][] = 'testcase-bugs';
$lang->changelog['9.0'][] = 'mail-resend';
$lang->changelog['9.1'][] = 'testcase-review';
$lang->changelog['9.1'][] = 'testcase-batchReview';
$lang->changelog['9.1'][] = 'testcase-importFromLib';
$lang->changelog['9.1'][] = 'testcase-batchCaseTypeChange';
$lang->changelog['9.1'][] = 'testcase-batchConfirmStoryChange';
$lang->changelog['9.1'][] = 'testreport-browse';
$lang->changelog['9.1'][] = 'testreport-create';
$lang->changelog['9.1'][] = 'testreport-view';
$lang->changelog['9.1'][] = 'testreport-delete';
$lang->changelog['9.1'][] = 'testreport-edit';
$lang->changelog['9.1'][] = 'testsuite-index';
$lang->changelog['9.1'][] = 'testsuite-browse';
$lang->changelog['9.1'][] = 'testsuite-create';
$lang->changelog['9.1'][] = 'testsuite-view';
$lang->changelog['9.1'][] = 'testsuite-edit';
$lang->changelog['9.1'][] = 'testsuite-delete';
$lang->changelog['9.1'][] = 'testsuite-linkCase';
$lang->changelog['9.1'][] = 'testsuite-unlinkCase';
$lang->changelog['9.1'][] = 'testsuite-batchUnlinkCases';
$lang->changelog['9.1'][] = 'testsuite-library';
$lang->changelog['9.1'][] = 'testsuite-createLib';
$lang->changelog['9.1'][] = 'testsuite-createCase';
$lang->changelog['9.1'][] = 'testsuite-libView';
$lang->changelog['9.1'][] = 'caselib-library';
$lang->changelog['9.1'][] = 'caselib-createLib';
$lang->changelog['9.1'][] = 'caselib-edit';
$lang->changelog['9.1'][] = 'caselib-createCase';
$lang->changelog['9.1'][] = 'caselib-libView';
$lang->changelog['9.1'][] = 'testtask-activate';
$lang->changelog['9.1'][] = 'testtask-block';
$lang->changelog['9.1'][] = 'testtask-report';
$lang->changelog['9.2'][] = 'custom-working';
$lang->changelog['9.2'][] = 'doc-sort';
$lang->changelog['9.2'][] = 'product-build';
$lang->changelog['9.2'][] = 'testsuite-batchCreateCase';
$lang->changelog['9.2'][] = 'testsuite-exportTemplet';
$lang->changelog['9.2'][] = 'testsuite-import';
$lang->changelog['9.2'][] = 'testsuite-showImport';
$lang->changelog['9.5'][] = 'bug-batchActivate';
$lang->changelog['9.6'][] = 'custom-setPublic';
$lang->changelog['9.6'][] = 'datatable-setGlobal';
$lang->changelog['9.6'][] = 'product-export';
$lang->changelog['9.6'][] = 'project-export';
$lang->changelog['9.6'][] = 'project-storyKanban';
$lang->changelog['9.6'][] = 'project-storySort';
$lang->changelog['9.8'][] = 'message-index';
$lang->changelog['9.8'][] = 'message-setting';
$lang->changelog['9.8'][] = 'todo-createCycle';
$lang->changelog['9.8'][] = 'project-importPlanStories';
$lang->changelog['9.8'][] = 'todo-assignTo';
$lang->changelog['9.8'][] = 'todo-activate';
$lang->changelog['9.8'][] = 'todo-close';
$lang->changelog['10.0.alpha'][] = 'my-calendar';
$lang->changelog['10.0.alpha'][] = 'doc-collect';
$lang->changelog['10.1'][] = 'todo-batchClose';
$lang->changelog['10.1'][] = 'project-treeTask';
$lang->changelog['10.1'][] = 'project-treeStory';
$lang->changelog['10.6'][] = 'backup-setting';
$lang->changelog['10.6'][] = 'backup-rmPHPHeader';
$lang->changelog['11.6.2'][] = 'message-browser';
$lang->changelog['12.3'][] = 'testtask-browseUnits';
$lang->changelog['12.3'][] = 'testtask-unitCases';
$lang->changelog['12.3'][] = 'testtask-importUnitResult';
$lang->changelog['12.3'][] = 'job-view';
$lang->changelog['12.3'][] = 'ci-commitResult';
$lang->changelog['12.5'][] = 'story-batchToTask';
$lang->changelog['12.5'][] = 'custom-product';
$lang->changelog['12.5'][] = 'custom-project';
$lang->changelog['15.0.rc1'][] = 'program-browse';
$lang->changelog['15.0.rc1'][] = 'program-view';
$lang->changelog['15.0.rc1'][] = 'program-product';
$lang->changelog['15.0.rc1'][] = 'program-create';
$lang->changelog['15.0.rc1'][] = 'program-edit';
$lang->changelog['15.0.rc1'][] = 'program-start';
$lang->changelog['15.0.rc1'][] = 'program-suspend';
$lang->changelog['15.0.rc1'][] = 'program-activate';
$lang->changelog['15.0.rc1'][] = 'program-close';
$lang->changelog['15.0.rc1'][] = 'program-delete';
$lang->changelog['15.0.rc1'][] = 'program-project';
$lang->changelog['15.0.rc1'][] = 'program-stakeholder';
$lang->changelog['15.0.rc1'][] = 'program-createStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-unlinkStakeholder';
$lang->changelog['15.0.rc1'][] = 'program-batchUnlinkStakeholders';
$lang->changelog['15.0.rc1'][] = 'program-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'program-export';
$lang->changelog['15.0.rc1'][] = 'project-execution';
$lang->changelog['15.0.rc1'][] = 'project-group';
$lang->changelog['15.0.rc1'][] = 'project-createGroup';
$lang->changelog['15.0.rc1'][] = 'project-manageView';
$lang->changelog['15.0.rc1'][] = 'project-managePriv';
$lang->changelog['15.0.rc1'][] = 'project-manageGroupMember';
$lang->changelog['15.0.rc1'][] = 'project-copyGroup';
$lang->changelog['15.0.rc1'][] = 'project-editGroup';
$lang->changelog['15.0.rc1'][] = 'project-whitelist';
$lang->changelog['15.0.rc1'][] = 'project-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'project-qa';
$lang->changelog['15.0.rc1'][] = 'project-createGuide';
$lang->changelog['15.0.rc1'][] = 'project-moduleOpen';
$lang->changelog['15.0.rc1'][] = 'personnel-accessible';
$lang->changelog['15.0.rc1'][] = 'personnel-invest';
$lang->changelog['15.0.rc1'][] = 'personnel-whitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'personnel-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'my-workAction';
$lang->changelog['15.0.rc1'][] = 'my-contributeAction';
$lang->changelog['15.0.rc1'][] = 'my-testtask';
$lang->changelog['15.0.rc1'][] = 'my-execution';
$lang->changelog['15.0.rc1'][] = 'my-doc';
$lang->changelog['15.0.rc1'][] = 'my-calendarAction';
$lang->changelog['15.0.rc1'][] = 'story-trackAB';
$lang->changelog['15.0.rc1'][] = 'story-processStoryChange';
$lang->changelog['15.0.rc1'][] = 'projectstory-story';
$lang->changelog['15.0.rc1'][] = 'projectstory-trackAction';
$lang->changelog['15.0.rc1'][] = 'projectstory-view';
$lang->changelog['15.0.rc1'][] = 'projectstory-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectstory-importplanstories';
$lang->changelog['15.0.rc1'][] = 'execution-whitelist';
$lang->changelog['15.0.rc1'][] = 'execution-addWhitelist';
$lang->changelog['15.0.rc1'][] = 'execution-unbindWhitelist';
$lang->changelog['15.0.rc1'][] = 'automation-browse';
$lang->changelog['15.0.rc1'][] = 'group-manageProjectAdmin';
$lang->changelog['15.0.rc1'][] = 'user-execution';
$lang->changelog['15.0.rc1'][] = 'custom-setStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-editStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-browseStoryConcept';
$lang->changelog['15.0.rc1'][] = 'custom-setDefaultConcept';
$lang->changelog['15.0.rc1'][] = 'custom-deleteStoryConcept';
$lang->changelog['15.0.rc1'][] = 'search-index';
$lang->changelog['15.0.rc1'][] = 'search-buildIndex';
$lang->changelog['15.0.rc1'][] = 'projectbuild-browse';
$lang->changelog['15.0.rc1'][] = 'projectrelease-browseAction';
$lang->changelog['15.0.rc1'][] = 'projectrelease-create';
$lang->changelog['15.0.rc1'][] = 'projectrelease-edit';
$lang->changelog['15.0.rc1'][] = 'projectrelease-delete';
$lang->changelog['15.0.rc1'][] = 'projectrelease-view';
$lang->changelog['15.0.rc1'][] = 'projectrelease-export';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkStory';
$lang->changelog['15.0.rc1'][] = 'projectrelease-linkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-unlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-batchUnlinkBug';
$lang->changelog['15.0.rc1'][] = 'projectrelease-changeStatus';
$lang->changelog['15.0.rc1'][] = 'stakeholder-browse';
$lang->changelog['15.0.rc1'][] = 'stakeholder-create';
$lang->changelog['15.0.rc1'][] = 'stakeholder-batchCreate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-edit';
$lang->changelog['15.0.rc1'][] = 'stakeholder-delete';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-issue';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewIssueAction';
$lang->changelog['15.0.rc1'][] = 'stakeholder-communicate';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-expectation';
$lang->changelog['15.0.rc1'][] = 'stakeholder-deleteExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-createExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-editExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-viewExpect';
$lang->changelog['15.0.rc1'][] = 'stakeholder-userIssue';
include (dirname(__FILE__) . '/changelog.php');
+2
View File
@@ -34,6 +34,8 @@ $lang->group->dynamic = '可查看动态';
$lang->group->noticeVisit = '空代表没有访问限制';
$lang->group->noneProgram = "暂时没有项目集";
$lang->group->noneProduct = "暂时没有{$lang->productCommon}";
$lang->group->project = '项目';
$lang->group->group = '分组';
global $config;
if($config->systemMode == 'new') $lang->group->noneProject = '暂时没有项目';
+2
View File
@@ -34,6 +34,8 @@ $lang->group->dynamic = '可查看動態';
$lang->group->noticeVisit = '空代表沒有訪問限制';
$lang->group->noneProgram = "暫時沒有項目集";
$lang->group->noneProduct = "暫時沒有{$lang->productCommon}";
$lang->group->project = '項目';
$lang->group->group = '分組';
global $config;
if($config->systemMode == 'new') $lang->group->noneProject = '暫時沒有項目';
+6 -4
View File
@@ -364,16 +364,18 @@ class groupModel extends model
$actions['actions'] = $dynamic;
/* Update whitelist. */
$users = $this->getUserPairs($groupID);
$users = array_keys($users);
$this->loadModel('personnel');
$users = $this->getUserPairs($groupID);
$users = array_keys($users);
foreach($this->config->group->acl->objectTypes as $key => $objectType)
{
$oldAcls = isset($oldGroup->acl[$key]) ? $oldGroup->acl[$key] : array();
$newAcls = isset($actions[$key]) ? $actions[$key] : array();
$needRemoveAcls = array_diff($oldAcls, $newAcls);
$needAddAcls = array_diff($newAcls, $oldAcls);
foreach($needAddAcls as $objectID) $this->loadModel('personnel')->updateWhitelist($users, $objectType, $objectID, 'whitelist', 'add', 'increase');
foreach($needRemoveAcls as $objectID) $this->loadModel('personnel')->deleteWhitelist($users, $objectType, $objectID);
foreach($needAddAcls as $objectID) $this->personnel->updateWhitelist($users, $objectType, $objectID, 'whitelist', 'sync', 'increase');
foreach($needRemoveAcls as $objectID) $this->personnel->deleteWhitelist($users, $objectType, $objectID);
}
+4 -2
View File
@@ -37,6 +37,7 @@ class install extends control
if(!isset($this->config->installed) or !$this->config->installed) $this->session->set('installing', true);
$this->view->title = $this->lang->install->welcome;
if(!isset($this->view->versionName)) $this->view->versionName = $this->config->version; // If the versionName variable has been defined in the max version, it cannot be defined here to avoid being overwritten.
$this->display();
}
@@ -232,10 +233,11 @@ class install extends control
*/
public function step6()
{
$this->view->title = $this->lang->install->success;
$installFileDeleted = unlink($this->app->getAppRoot() . 'www/install.php');
$this->view->installFileDeleted = $installFileDeleted;
$this->view->title = $this->lang->install->success;
$this->display();
unlink($this->app->getAppRoot() . 'www/install.php');
unlink($this->app->getAppRoot() . 'www/upgrade.php');
unset($_SESSION['installing']);
session_destroy();
+13
View File
@@ -8,3 +8,16 @@ function showVideo()
{
$('video').removeClass('hidden');
}
$(function()
{
$('#modeclassic').click(function()
{
$('#selectedModeTips').show();
});
$('#modenew').click(function()
{
$('#selectedModeTips').hide();
});
})
+4 -2
View File
@@ -174,8 +174,10 @@ $lang->install->success = "Installiert!";
$lang->install->login = 'Login ZenTao';
$lang->install->register = 'Bei ZenTao registieren';
$lang->install->joinZentao = <<<EOT
<p>Sie haben ZenTao %s installiert.<strong class='text-danger'> Bitte löschen Sie die install.php schnellstmöglich</strong>.</p><p>Hinweis: Wenn Sie über ZenTao informiert bleiben möchten, registieren Sie sich bitte unter (<a href='https://www.zentao.pm' class='alert-link' target='_blank'>www.zentao.pm</a>).</p>
$lang->install->successLabel = "<p>Sie haben ZenTao %s installiert.</p>";
$lang->install->successNoticeLabel = "<p>Sie haben ZenTao %s installiert.<strong class='text-danger'> Bitte löschen Sie die install.php schnellstmöglich</strong>.</p>";
$lang->install->joinZentao = <<<EOT
<p>Hinweis: Wenn Sie über ZenTao informiert bleiben möchten, registieren Sie sich bitte unter (<a href='https://www.zentao.pm' class='alert-link' target='_blank'>www.zentao.pm</a>).</p>
EOT;
$lang->install->product = array('chanzhi', 'zdoo');
+4 -2
View File
@@ -206,8 +206,10 @@ $lang->install->success = "Installed!";
$lang->install->login = 'ZenTao Login';
$lang->install->register = 'ZenTao Community Signup';
$lang->install->joinZentao = <<<EOT
<p>You have installed ZenTao %s.<strong class='text-danger'> Please delete install.php</strong>.</p><p>Note: In order to get the latest news of ZenTao, please sign up on ZenTao Community(<a href='https://www.zentao.pm' class='alert-link' target='_blank'>www.zentao.pm</a>).</p>
$lang->install->successLabel = "<p>You have installed ZenTao %s.</p>";
$lang->install->successNoticeLabel = "<p>You have installed ZenTao %s.<strong class='text-danger'> Please delete install.php</strong>.</p>";
$lang->install->joinZentao = <<<EOT
<p>Note: In order to get the latest news of ZenTao, please sign up on ZenTao Community(<a href='https://www.zentao.pm' class='alert-link' target='_blank'>www.zentao.pm</a>).</p>
EOT;
$lang->install->product = array('chanzhi', 'zdoo', 'ydisk', 'meshiot');
+4 -2
View File
@@ -174,8 +174,10 @@ $lang->install->success = "Installé !";
$lang->install->login = 'Login ZenTao';
$lang->install->register = "S'enregistrer sur la Communauté ZenTao";
$lang->install->joinZentao = <<<EOT
<p>Vous avez installé ZenTao %s.<strong class='text-danger'> Supprimez install.php asap</strong>.</p><p>Note : Afin d'obtenir les dernières infos de ZenTao, enregistrz-vous chez ZenTao(<a href='https://www.zentao.pm' class='alert-link' target='_blank'>www.zentao.pm</a>).</p>
$lang->install->successLabel = "<p>Vous avez installé ZenTao %s.</p>";
$lang->install->successNoticeLabel = "<p>Vous avez installé ZenTao %s.<strong class='text-danger'> Supprimez install.php asap</strong>.</p>";
$lang->install->joinZentao = <<<EOT
<p>Note : Afin d'obtenir les dernières infos de ZenTao, enregistrz-vous chez ZenTao(<a href='https://www.zentao.pm' class='alert-link' target='_blank'>www.zentao.pm</a>).</p>
EOT;
$lang->install->product = array('chanzhi', 'zdoo');

Some files were not shown because too many files have changed in this diff Show More