Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms into sprint/238_wangzemei_68933
This commit is contained in:
+11
-8
@@ -2,6 +2,7 @@ stages:
|
||||
- sonar
|
||||
- unit_test
|
||||
- uitest
|
||||
- notify
|
||||
- cleanup_packages
|
||||
- package
|
||||
sonarqube:
|
||||
@@ -31,7 +32,7 @@ unit_test:
|
||||
- "/home/gitlab-runner/bin/zentao-unittest.sh ${CI_PROJECT_DIR}"
|
||||
allow_failure: true
|
||||
only:
|
||||
- master
|
||||
- master
|
||||
- merge_requests
|
||||
uitest:
|
||||
stage: uitest
|
||||
@@ -39,14 +40,16 @@ uitest:
|
||||
- "/home/gitlab-runner/bin/zentao-uitest.sh ${CI_PROJECT_DIR}"
|
||||
allow_failure: true
|
||||
only:
|
||||
- master
|
||||
- master
|
||||
- merge_requests
|
||||
notify:
|
||||
stage: notify
|
||||
script:
|
||||
- "/home/gitlab-runner/bin/ci-notify.php"
|
||||
when: on_success
|
||||
only:
|
||||
- master
|
||||
- merge_requests
|
||||
#notify:
|
||||
# script:
|
||||
# - 'curl --location --request POST ''http://api.lf.oop.cc/api/v1/xuan/chatMessage'' --header ''Content-Type: application/json'' --data-raw ''{"gid": "84be4c6e-02e3-4fdc-b081-318c0c1eca02", "title": "开源包下载地址", "content": "点击查看详情链接", "url": "http://10.0.7.242:8080/allpacks/"}'''
|
||||
# when: on_success
|
||||
# only:
|
||||
# - master
|
||||
cleanup_packages:
|
||||
stage: cleanup_packages
|
||||
script:
|
||||
|
||||
@@ -82,7 +82,7 @@ $lang->action->dynamic->all = '所有';
|
||||
$lang->action->dynamic->hidden = '已隐藏';
|
||||
$lang->action->dynamic->search = '搜索';
|
||||
|
||||
$lang->action->periods['all'] = $lang->action->dynamic->all;
|
||||
$lang->action->periods['all'] = '全部';
|
||||
$lang->action->periods['today'] = $lang->action->dynamic->today;
|
||||
$lang->action->periods['yesterday'] = $lang->action->dynamic->yesterday;
|
||||
$lang->action->periods['thisweek'] = $lang->action->dynamic->thisWeek;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<?php $activeClass = $currentObjectType == 'all' ? 'btn-active-text' : '';?>
|
||||
<?php echo html::a($this->createLink('action', 'trash', "objectType=all&type=$type"), "<span class='text'>" . $lang->all . "</span>", '', "class='btn btn-link $activeClass'");?>
|
||||
<?php echo html::a($this->createLink('action', 'trash', "objectType=all&type=$type"), "<span class='text'>" . $lang->action->periods['all'] . "</span>", '', "class='btn btn-link $activeClass'");?>
|
||||
<?php
|
||||
/* Output the objectType order by preferredTypeConfig. */
|
||||
foreach($preferredTypeConfig as $objectType)
|
||||
|
||||
@@ -57,6 +57,6 @@ $lang->branch->statusList = array();
|
||||
$lang->branch->statusList['active'] = '激活';
|
||||
$lang->branch->statusList['closed'] = '已关闭';
|
||||
|
||||
$lang->branch->featureBar['manage']['all'] = '所有';
|
||||
$lang->branch->featureBar['manage']['all'] = '全部';
|
||||
$lang->branch->featureBar['manage']['active'] = '激活';
|
||||
$lang->branch->featureBar['manage']['closed'] = '已关闭';
|
||||
|
||||
@@ -2313,6 +2313,15 @@ class bug extends control
|
||||
{
|
||||
$this->loadModel('port');
|
||||
$this->session->set('bugPortParams', array('productID' => $productID, 'executionID' => $executionID, 'branch' => 'all'));
|
||||
if(!$productID)
|
||||
{
|
||||
$this->config->bug->datatable->fieldList['module']['dataSource']['method'] = 'getAllModulePairs';
|
||||
$this->config->bug->datatable->fieldList['module']['dataSource']['params'] = 'bug';
|
||||
|
||||
$this->config->bug->datatable->fieldList['project']['dataSource'] = array('module' => 'project', 'method' => 'getPairsByIdList', 'params' => $executionID);
|
||||
$this->config->bug->datatable->fieldList['execution']['dataSource'] = array('module' => 'execution', 'method' => 'getPairs', 'params' => $executionID);
|
||||
}
|
||||
|
||||
$this->port->export('bug');
|
||||
$this->fetch('file', 'export2' . $_POST['fileType'], $_POST);
|
||||
}
|
||||
|
||||
@@ -335,7 +335,8 @@ function loadProductExecutions(productID, projectID = 0)
|
||||
branch = $('#branch').val();
|
||||
if(typeof(branch) == 'undefined') branch = 0;
|
||||
|
||||
link = createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=' + projectID + '&branch=' + branch);
|
||||
var execution = $('#execution').val();
|
||||
link = createLink('product', 'ajaxGetExecutions', 'productID=' + productID + '&projectID=' + projectID + '&branch=' + branch + '&number=&executionID=' + execution);
|
||||
$('#executionIdBox').load(link, function()
|
||||
{
|
||||
$(this).find('select').chosen();
|
||||
|
||||
@@ -413,7 +413,7 @@ $lang->bug->placeholder = new stdclass();
|
||||
$lang->bug->placeholder->chooseBuilds = '选择相关版本...';
|
||||
$lang->bug->placeholder->newBuildName = '新版本名称';
|
||||
|
||||
$lang->bug->featureBar['browse']['all'] = $lang->bug->allBugs;
|
||||
$lang->bug->featureBar['browse']['all'] = '全部';
|
||||
$lang->bug->featureBar['browse']['unclosed'] = $lang->bug->unclosed;
|
||||
$lang->bug->featureBar['browse']['openedbyme'] = $lang->bug->openedByMe;
|
||||
$lang->bug->featureBar['browse']['assigntome'] = $lang->bug->assignToMe;
|
||||
|
||||
@@ -45,5 +45,5 @@ $lang->caselib->legendDesc = '描述';
|
||||
$lang->caselib->libraryDelete = '您确认要删除该用例库吗?';
|
||||
$lang->caselib->noModule = '<div>您现在还没有模块信息</div><div>请维护用例库模块</div>';
|
||||
|
||||
$lang->caselib->featureBar['browse']['all'] = '所有';
|
||||
$lang->caselib->featureBar['browse']['all'] = '全部';
|
||||
$lang->caselib->featureBar['browse']['wait'] = '待评审';
|
||||
|
||||
+10
-2
@@ -1460,9 +1460,17 @@ class commonModel extends model
|
||||
echo '<li>' . html::a(helper::createLink('misc', 'downloadClient', '', '', true), $lang->downloadClient, '', "title='$lang->downloadClient' class='iframe text-ellipsis' data-width='600'") . '</li>';
|
||||
echo "<li class='dropdown-submenu' id='downloadMobile'><a href='javascript:;'>" . $lang->downloadMobile . "</a><ul class='dropdown-menu pull-left''>";
|
||||
|
||||
$appqrcode = self::http('https://www.zentao.net/page/appqrcode.json');
|
||||
/* Intranet users use local pictures. */
|
||||
if(!empty($appqrcode))
|
||||
$curl = curl_init();
|
||||
curl_setopt($curl, CURLOPT_URL, 'https://www.zentao.net/page/appqrcode.json');
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT_MS, 200);
|
||||
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT_MS, 200);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
|
||||
$connected = curl_exec($curl);
|
||||
curl_close($curl);
|
||||
if($connected)
|
||||
{
|
||||
echo "<li><div class='mobile-qrcode'><iframe src='https://www.zentao.net/page/appqrcode.html?v={$config->version}' frameborder='0' scrolling='no' seamless></iframe></div></li>";
|
||||
}
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
#importNoticeModal .modal-dialog {top: 15% !important; max-height: 450px; overflow-y: auto;}
|
||||
</style>
|
||||
<script>
|
||||
function submitForm(type)
|
||||
{
|
||||
|
||||
@@ -30,6 +30,7 @@ $lang->dept->noDepartment = "No Department";
|
||||
|
||||
$lang->dept->confirmDelete = " Möchten Sie diese Abteilung löschen?";
|
||||
$lang->dept->successSave = " Gespeichert!";
|
||||
$lang->dept->repeatDepart = " Es gibt einen doppelten Abteilungsnamen, möchten Sie ihn wirklich hinzufügen?";
|
||||
|
||||
$lang->dept->error = new stdclass();
|
||||
$lang->dept->error->hasSons = 'Diese Abteilung hat Unterabteilungen und kann daher nicht gelöscht werden!';
|
||||
|
||||
@@ -30,6 +30,7 @@ $lang->dept->noDepartment = "No Department";
|
||||
|
||||
$lang->dept->confirmDelete = " Do you want to delete this department?";
|
||||
$lang->dept->successSave = " Saved!";
|
||||
$lang->dept->repeatDepart = " There is a duplicate department name, are you sure to add it?";
|
||||
|
||||
$lang->dept->error = new stdclass();
|
||||
$lang->dept->error->hasSons = 'This Department has child departments. You cannot delete it!';
|
||||
|
||||
@@ -30,6 +30,7 @@ $lang->dept->noDepartment = "No Department";
|
||||
|
||||
$lang->dept->confirmDelete = " Confirmez que vous voulez bien supprimer ce Compartiment ?";
|
||||
$lang->dept->successSave = " Sauvé !";
|
||||
$lang->dept->repeatDepart = " Il y a un nom de département en double, êtes-vous sûr de l'ajouter ?";
|
||||
|
||||
$lang->dept->error = new stdclass();
|
||||
$lang->dept->error->hasSons = 'Ce Compartiment possède des domaines. Vous ne pouvez pas le supprimer !';
|
||||
|
||||
@@ -26,6 +26,7 @@ $lang->dept->dragAndSort = "Drag để sắp xếp";
|
||||
|
||||
$lang->dept->confirmDelete = " Bạn có muốn xóa this department?";
|
||||
$lang->dept->successSave = " Saved!";
|
||||
$lang->dept->repeatDepart = " Có một tên bộ phận trùng lặp, bạn có chắc chắn thêm nó không?";
|
||||
|
||||
$lang->dept->error = new stdclass();
|
||||
$lang->dept->error->hasSons = 'This Department has child departments. You cannot xóa it!';
|
||||
|
||||
@@ -30,6 +30,7 @@ $lang->dept->noDepartment = "无部门";
|
||||
|
||||
$lang->dept->confirmDelete = " 您确定删除该部门吗?";
|
||||
$lang->dept->successSave = " 修改成功。";
|
||||
$lang->dept->repeatDepart = " 存在部门名称重复,您确认添加吗?";
|
||||
|
||||
$lang->dept->error = new stdclass();
|
||||
$lang->dept->error->hasSons = '该部门有子部门,不能删除!';
|
||||
|
||||
@@ -29,6 +29,7 @@ $lang->dept->dragAndSort = "拖動排序";
|
||||
|
||||
$lang->dept->confirmDelete = " 您確定刪除該部門嗎?";
|
||||
$lang->dept->successSave = " 修改成功。";
|
||||
$lang->dept->repeatDepart = " 存在部門名稱重複,您確認添加嗎?";
|
||||
|
||||
$lang->dept->error = new stdclass();
|
||||
$lang->dept->error->hasSons = '該部門有子部門,不能刪除!';
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php js::set('repeatDepart', $lang->dept->repeatDepart);?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<span class='btn btn-link btn-active-text'><span class='text'><?php echo $lang->dept->common;?></span></span>
|
||||
@@ -33,7 +34,7 @@
|
||||
<div class='panel-title'><?php echo $lang->dept->manageChild;?></div>
|
||||
</div>
|
||||
<div class='panel-body'>
|
||||
<form method='post' target='hiddenwin' action='<?php echo $this->createLink('dept', 'manageChild');?>'>
|
||||
<form method='post' target='hiddenwin' action='<?php echo $this->createLink('dept', 'manageChild');?>' id="dataForm">
|
||||
<table class='table table-form'>
|
||||
<tr>
|
||||
<td>
|
||||
@@ -49,7 +50,7 @@
|
||||
?>
|
||||
</nobr>
|
||||
</td>
|
||||
<td class='w-300px'>
|
||||
<td class='w-300px'>
|
||||
<?php
|
||||
$maxOrder = 0;
|
||||
foreach($sons as $sonDept)
|
||||
@@ -85,7 +86,7 @@ $(function()
|
||||
name: 'deptTree',
|
||||
initialState: 'preserve',
|
||||
data: data,
|
||||
sortable:
|
||||
sortable:
|
||||
{
|
||||
lazy: true,
|
||||
nested: true,
|
||||
@@ -105,7 +106,7 @@ $(function()
|
||||
$li.append($toggle);
|
||||
return true;
|
||||
},
|
||||
actions:
|
||||
actions:
|
||||
{
|
||||
sort:
|
||||
{
|
||||
@@ -172,6 +173,42 @@ $(function()
|
||||
$(this).addClass('hover');
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
$("#dataForm").submit(function(e)
|
||||
{
|
||||
var postDept = new Array();
|
||||
var depts = new Array();
|
||||
|
||||
$.each($('input[name*="depts[]"]'), function(index, value)
|
||||
{
|
||||
if($(this).val()) postDept.push($(this).val());
|
||||
});
|
||||
|
||||
$.each($('input[name*="depts[id"]'), function(index, value)
|
||||
{
|
||||
if($(this).val()) depts.push($(this).val());
|
||||
});
|
||||
|
||||
for(var i = 0; i < postDept.length; i++)
|
||||
{
|
||||
if(depts.indexOf(postDept[i]) > -1 || postDept[i] == postDept[i + 1])
|
||||
{
|
||||
if(confirm(repeatDepart))
|
||||
{
|
||||
var link = createLink('dept', 'manageChild');
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
setTimeout(function()
|
||||
{
|
||||
$('#submit').removeAttr('disabled');
|
||||
},10)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -317,12 +317,12 @@ $lang->execution->groups['finishedBy'] = '完成者分组';
|
||||
$lang->execution->groups['closedBy'] = '关闭者分组';
|
||||
$lang->execution->groups['type'] = '类型分组';
|
||||
|
||||
$lang->execution->groupFilter['story']['all'] = '所有';
|
||||
$lang->execution->groupFilter['story']['all'] = '全部';
|
||||
$lang->execution->groupFilter['story']['linked'] = "已关联{$lang->SRCommon}的任务";
|
||||
$lang->execution->groupFilter['pri']['all'] = '所有';
|
||||
$lang->execution->groupFilter['pri']['all'] = '全部';
|
||||
$lang->execution->groupFilter['pri']['noset'] = '未设置';
|
||||
$lang->execution->groupFilter['assignedTo']['undone'] = '未完成';
|
||||
$lang->execution->groupFilter['assignedTo']['all'] = '所有';
|
||||
$lang->execution->groupFilter['assignedTo']['all'] = '全部';
|
||||
|
||||
$lang->execution->byQuery = '搜索';
|
||||
|
||||
@@ -501,7 +501,7 @@ $lang->execution->typeList['stage'] = '阶段';
|
||||
$lang->execution->typeList['sprint'] = $lang->executionCommon;
|
||||
$lang->execution->typeList['kanban'] = '看板';
|
||||
|
||||
$lang->execution->featureBar['task']['all'] = $lang->execution->allTasks;
|
||||
$lang->execution->featureBar['task']['all'] = '全部';
|
||||
$lang->execution->featureBar['task']['unclosed'] = $lang->execution->unclosed;
|
||||
$lang->execution->featureBar['task']['assignedtome'] = $lang->execution->assignedToMe;
|
||||
$lang->execution->featureBar['task']['myinvolved'] = $lang->execution->myInvolved;
|
||||
@@ -509,17 +509,17 @@ $lang->execution->featureBar['task']['assignedbyme'] = $lang->execution->assigne
|
||||
$lang->execution->featureBar['task']['needconfirm'] = "{$lang->SRCommon}变更";
|
||||
$lang->execution->featureBar['task']['status'] = $lang->execution->statusSelects[''];
|
||||
|
||||
$lang->execution->featureBar['all']['all'] = $lang->execution->all;
|
||||
$lang->execution->featureBar['all']['all'] = '全部';
|
||||
$lang->execution->featureBar['all']['undone'] = $lang->execution->undone;
|
||||
$lang->execution->featureBar['all']['wait'] = $lang->execution->statusList['wait'];
|
||||
$lang->execution->featureBar['all']['doing'] = $lang->execution->statusList['doing'];
|
||||
$lang->execution->featureBar['all']['suspended'] = $lang->execution->statusList['suspended'];
|
||||
$lang->execution->featureBar['all']['closed'] = $lang->execution->statusList['closed'];
|
||||
|
||||
$lang->execution->featureBar['bug']['all'] = '所有';
|
||||
$lang->execution->featureBar['bug']['all'] = '全部';
|
||||
$lang->execution->featureBar['bug']['unresolved'] = '未解决';
|
||||
|
||||
$lang->execution->featureBar['build']['all'] = '所有版本';
|
||||
$lang->execution->featureBar['build']['all'] = '全部版本';
|
||||
|
||||
$lang->execution->myExecutions = '我参与的';
|
||||
$lang->execution->doingProject = '进行中的项目';
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<?php echo html::a(inlink('grouptask', "executionID=$executionID&groupBy=$groupBy&filter=$filterKey"), $name, '', "class='btn btn-link $active'");?>
|
||||
<?php endforeach;?>
|
||||
<?php else:?>
|
||||
<?php echo html::a(inlink('grouptask', "executionID=$executionID&groupBy=$groupBy"), "<span class='text'>{$lang->execution->allTasks}</span> <span class='label label-light label-badge'>{$allCount}</span>", '', "class='btn btn-link btn-active-text'");?>
|
||||
<?php echo html::a(inlink('grouptask', "executionID=$executionID&groupBy=$groupBy"), "<span class='text'>{$lang->execution->featureBar['task']['all']}</span> <span class='label label-light label-badge'>{$allCount}</span>", '', "class='btn btn-link btn-active-text'");?>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
<?php if(($hasStoryButton or $hasBugButton) and $hasTaskButton) echo '<li class="divider"></li>';?>
|
||||
<?php if($canImportBug) echo '<li>' . html::a(helper::createLink('execution', 'importBug', "execution=$execution->id", '', true), $lang->execution->importBug, '', "class='iframe' data-width='90%'") . '</li>';?>
|
||||
<?php endif;?>
|
||||
<?php if($canCreateTask) echo '<li>' . html::a(helper::createLink('task', 'create', "execution=$execution->id", '', true), $lang->task->create, '', "class='iframe'") . '</li>';?>
|
||||
<?php if($canCreateTask) echo '<li>' . html::a(helper::createLink('task', 'create', "execution=$execution->id", '', true), $lang->task->create, '', "class='iframe' data-width='80%'") . '</li>';?>
|
||||
<?php if($canBatchCreateTask) echo '<li>' . html::a(helper::createLink('task', 'batchCreate', "execution=$execution->id", '', true), $lang->execution->batchCreateTask, '', "class='iframe' data-width=90%") . '</li>';?>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-left">
|
||||
<?php echo html::a(inlink('testcase', "executionID=$executionID&productID=$productID&branchID=$branchID&type=$type&moduleID=$moduleID&orderBy=$orderBy"), "<span class='text'>{$lang->execution->all}</span>", '', "class='btn btn-link btn-active-text'");?>
|
||||
<?php echo html::a(inlink('testcase', "executionID=$executionID&productID=$productID&branchID=$branchID&type=$type&moduleID=$moduleID&orderBy=$orderBy"), "<span class='text'>{$lang->execution->featureBar['all']['all']}</span>", '', "class='btn btn-link btn-active-text'");?>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<?php if(common::canModify('execution', $execution)) echo html::a(helper::createLink('testcase', 'create', "productID=$productID&branch=0&moduleID=0&from=execution¶m=$execution->id", '', '', '', true), "<i class='icon icon-plus'></i> " . $lang->testcase->create, '', "class='btn btn-primary' data-app='{$this->app->tab}'");?>
|
||||
|
||||
@@ -206,8 +206,8 @@ $lang->gitlab->branch->create = 'Create';
|
||||
$lang->gitlab->branch->lastCommitter = 'Last Committer';
|
||||
$lang->gitlab->branch->lastCommittedDate = 'Last Committed Date';
|
||||
$lang->gitlab->branch->accessLevel = "Branch protection list";
|
||||
$lang->gitlab->branch->mergeAllowed = "Merge Allowed";
|
||||
$lang->gitlab->branch->pushAllowed = "Push Allowed";
|
||||
$lang->gitlab->branch->mergeAllowed = "Allowed to merge";
|
||||
$lang->gitlab->branch->pushAllowed = "Allowed to push";
|
||||
$lang->gitlab->branch->placeholderSearch = "Branch name";
|
||||
$lang->gitlab->branch->placeholderSelect = "Branch name";
|
||||
$lang->gitlab->branch->confirmDelete = 'Branch will be writable for developers. Are you sure?';
|
||||
|
||||
@@ -206,8 +206,8 @@ $lang->gitlab->branch->create = 'Create';
|
||||
$lang->gitlab->branch->lastCommitter = 'Last Committer';
|
||||
$lang->gitlab->branch->lastCommittedDate = 'Last Committed Date';
|
||||
$lang->gitlab->branch->accessLevel = "Branch protection list";
|
||||
$lang->gitlab->branch->mergeAllowed = "Merge Allowed";
|
||||
$lang->gitlab->branch->pushAllowed = "Push Allowed";
|
||||
$lang->gitlab->branch->mergeAllowed = "Allowed to merge";
|
||||
$lang->gitlab->branch->pushAllowed = "Allowed to push";
|
||||
$lang->gitlab->branch->placeholderSearch = "Branch name";
|
||||
$lang->gitlab->branch->placeholderSelect = "Branch name";
|
||||
$lang->gitlab->branch->confirmDelete = 'Branch will be writable for developers. Are you sure?';
|
||||
|
||||
@@ -206,8 +206,8 @@ $lang->gitlab->branch->create = 'Create';
|
||||
$lang->gitlab->branch->lastCommitter = 'Last Committer';
|
||||
$lang->gitlab->branch->lastCommittedDate = 'Last Committed Date';
|
||||
$lang->gitlab->branch->accessLevel = "Branch protection list";
|
||||
$lang->gitlab->branch->mergeAllowed = "Merge Allowed";
|
||||
$lang->gitlab->branch->pushAllowed = "Push Allowed";
|
||||
$lang->gitlab->branch->mergeAllowed = "Allowed to merge";
|
||||
$lang->gitlab->branch->pushAllowed = "Allowed to push";
|
||||
$lang->gitlab->branch->placeholderSearch = "Branch name";
|
||||
$lang->gitlab->branch->placeholderSelect = "Branch name";
|
||||
$lang->gitlab->branch->confirmDelete = 'Branch will be writable for developers. Are you sure?';
|
||||
|
||||
@@ -206,8 +206,8 @@ $lang->gitlab->branch->create = '创建';
|
||||
$lang->gitlab->branch->lastCommitter = '最后提交';
|
||||
$lang->gitlab->branch->lastCommittedDate = '最后修改时间';
|
||||
$lang->gitlab->branch->accessLevel = "分支保护列表";
|
||||
$lang->gitlab->branch->mergeAllowed = "允许合并到";
|
||||
$lang->gitlab->branch->pushAllowed = "允许推送到";
|
||||
$lang->gitlab->branch->mergeAllowed = "允许合并";
|
||||
$lang->gitlab->branch->pushAllowed = "允许推送";
|
||||
$lang->gitlab->branch->placeholderSearch = "请输入分支名称";
|
||||
$lang->gitlab->branch->placeholderSelect = "请选择分支";
|
||||
$lang->gitlab->branch->confirmDelete = '确定删除分支保护?';
|
||||
|
||||
@@ -1666,6 +1666,7 @@ $lang->resource->report->bugCreate = 'bugCreate';
|
||||
$lang->resource->report->bugAssign = 'bugAssign';
|
||||
$lang->resource->report->workload = 'workload';
|
||||
$lang->resource->report->annualData = 'annual';
|
||||
$lang->resource->report->allAnnualData = 'viewEveryoneAnnual';
|
||||
|
||||
$lang->report->methodOrder[0] = 'index';
|
||||
$lang->report->methodOrder[5] = 'projectDeviation';
|
||||
|
||||
+14
-10
@@ -157,24 +157,28 @@
|
||||
.executionName .delayed {margin-right: 10px;}
|
||||
|
||||
#kanbanBox {position: relative;}
|
||||
#regionTabs {background-color: #efefef; z-index: 100; display: flex;}
|
||||
#regionTabs {background-color: #efefef; z-index: 100; display: flex; align-items: center; gap: 1.5rem; justify-content: space-between;}
|
||||
#regionTabs .leftBtn.disabled i, #regionTabs .rightBtn.disabled i{color: #c2c2c2;}
|
||||
#regionTabs .leftBtn i, #regionTabs .rightBtn i{vertical-align: 1px;}
|
||||
#regionTabs .icon-angle-left, #regionTabs .icon-angle-right {font-size: 20px; vertical-align: -webkit-baseline-middle;}
|
||||
#regionNavTabs {display: inline-flex; overflow: hidden; width: 100%; padding-left: 10px;}
|
||||
#regionNavTabs > ul {display: inline-flex; border-bottom: unset;}
|
||||
#regionNavTabs > ul > li {padding: 6px 15px; margin-bottom: 6px; border-radius: 4px 4px 0px 0px;}
|
||||
#regionNavTabs > ul > li.active {background-color: #fff;}
|
||||
#regionNavTabs > ul > li.active::before {content: ''; width: 10px; height: 10px; position: absolute; left: -10px; top: 21px; background: radial-gradient(circle at 0% 0%,transparent 10px,#fff 0);}
|
||||
#regionNavTabs > ul > li.active::after {content: ''; width: 10px; height: 10px; position: absolute; left: calc(100%); top: 21px; background: radial-gradient(circle at 100% 0%,transparent 10px,#fff 0);}
|
||||
#regionNavTabs > ul > li > a {max-width: 195px; overflow: hidden; white-space: nowrap; padding: 0; background-color: transparent;}
|
||||
#regionNavTabs > ul > li.active > a:before {background: unset;}
|
||||
#regionNavTabs {display: inline-flex; overflow: hidden;}
|
||||
.leftBtn.hidden + #regionNavTabs {padding-left: 10px;}
|
||||
#regionNavTabs > ul {display: inline-flex; border-bottom: none; margin-bottom: -3px;}
|
||||
#regionNavTabs > ul > li {padding: 0; text-align: center;}
|
||||
#regionNavTabs > ul > li > a {min-width: 134px; overflow: hidden; white-space: nowrap; z-index: 0; position: relative; padding: 1.7rem; margin-left: -20px; background: none; outline: 0;}
|
||||
#regionNavTabs > ul > li:first-child > a {margin-left: 0;}
|
||||
#regionNavTabs > ul > li.active > a {z-index: 1;}
|
||||
#regionNavTabs > ul > li.active > a::before {background-color: #fff;}
|
||||
#regionNavTabs > ul > li > a:before {content: ""; position: absolute; top: -1rem; left: 0; background: #f8f8f8; height: 100%; width: 100%; z-index: -1; border-top-left-radius: 1rem; border-top-right-radius: 1rem; transform: perspective(0.5rem) rotateX(2deg); transform-origin: bottom;}
|
||||
#regionNavTabs > ul > li > a > span {vertical-align: bottom; overflow: hidden; max-width: 6em; white-space: nowrap; display: inline-block;}
|
||||
#regionNavTabs > ul > li.active > a > span {color: #2b80ff!important;}
|
||||
#regionTabs.affixed {margin-bottom: 5px; position: fixed; top: 0px;}
|
||||
#regionTabs.affixed + #kanbanContainer .kanban-board.kanban-affixed > .kanban-header {margin-top: 30px;}
|
||||
#regionTabs.affixed + #kanbanContainer .kanban-board.kanban-affixed > .kanban-header + .kanban-lane {margin-top: 38px;}
|
||||
#regionTabs.affixed ul > li {margin-bottom: 0px !important;}
|
||||
#regionTabs .region-actions .dropdown-menu {top: 25px;}
|
||||
#region-tab-actions {display: none;}
|
||||
#region-tab-actions.active {display: flex; position: relative; right: 0px; top: -2px;}
|
||||
#region-tab-actions.active {display: flex;}
|
||||
.region {display: none;}
|
||||
.region.active {display: block;}
|
||||
.region.active.notAll {margin-top: -5px;}
|
||||
|
||||
@@ -1865,6 +1865,8 @@ function swipeRegionNavTabs($object, direction)
|
||||
{
|
||||
/* If you swipe left, the distance is equal to the item's left. */
|
||||
distance = - itemLeft + radius - ($item.prev().hasClass('active') ? radiusWidth : 0);
|
||||
/* tab overlap width */
|
||||
distance += 20;
|
||||
if($item.prev().length == 0)
|
||||
{
|
||||
distance = 0;
|
||||
@@ -1882,6 +1884,7 @@ function swipeRegionNavTabs($object, direction)
|
||||
{
|
||||
/* If you swipe right, the distance is equal to the left distance of item plus the width of item minus the width of the regionNavTabs. */
|
||||
distance = offsetWidth - itemOffset - radius + nextRadius - radiusWidth * 2;
|
||||
distance += 20;
|
||||
if($item.next().length == 0)
|
||||
{
|
||||
distance = - objectWidth + offsetWidth - radiusWidth * 2;
|
||||
@@ -1922,6 +1925,7 @@ function initRegionTabs()
|
||||
if(acitiveItemLeft + distance < 0)
|
||||
{
|
||||
distance = - acitiveItemLeft;
|
||||
distance += 20;
|
||||
if($acitiveItem.prev().length == 0)
|
||||
{
|
||||
distance = 0;
|
||||
@@ -1932,6 +1936,7 @@ function initRegionTabs()
|
||||
else if(acitiveItemWidth + acitiveItemLeft + distance + radiusWidth * 2 > regionTabsWidth && acitiveItemLeft != 0 && acitiveItemWidth != 0)
|
||||
{
|
||||
distance = regionTabsWidth - acitiveItemWidth - acitiveItemLeft + (distance != 0 ? - radiusWidth * 2 : radiusWidth);
|
||||
distance += 20;
|
||||
if($acitiveItem.next().length == 0)
|
||||
{
|
||||
distance = regionTabsWidth - acitiveItemWidth - acitiveItemLeft - radiusWidth * 2;
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
<?php $style = $this->app->clientLang == 'en' ? "style='width:80px'" : '';?>
|
||||
<th class="c-pri" <?php echo $style;?> title=<?php echo $lang->todo->pri;?>> <?php common::printOrderLink('pri', $orderBy, $vars, $lang->priAB);?></th>
|
||||
<th class="c-name"> <?php common::printOrderLink('name', $orderBy, $vars, $lang->todo->name);?></th>
|
||||
<th class="c-user"> <?php common::printOrderLink('assignedBy', $orderBy, $vars, $lang->todo->assignedBy);?></th>
|
||||
<th class="c-user"> <?php common::printOrderLink('assignedTo', $orderBy, $vars, $lang->todo->assignedTo);?></th>
|
||||
<th class="c-begin"> <?php common::printOrderLink('begin', $orderBy, $vars, $lang->todo->beginAB);?></th>
|
||||
<th class="c-end"> <?php common::printOrderLink('end', $orderBy, $vars, $lang->todo->endAB);?></th>
|
||||
<th class="c-status"> <?php common::printOrderLink('status', $orderBy, $vars, $lang->todo->status);?></th>
|
||||
@@ -115,7 +115,7 @@
|
||||
<td class="c-type"><?php echo zget($lang->todo->typeList, $todo->type, '');?></td>
|
||||
<td class="c-pri"><span title="<?php echo zget($lang->todo->priList, $todo->pri);?>" class='label-pri <?php echo 'label-pri-' . $todo->pri;?>' title='<?php echo zget($lang->todo->priList, $todo->pri, $todo->pri);?>'><?php echo zget($lang->todo->priList, $todo->pri)?></span></td>
|
||||
<td class="c-name" title="<?php echo $todo->name;?>"><?php echo html::a($this->createLink('todo', 'view', "id=$todo->id&from=my", '', true), $todo->name, '', "data-toggle='modal' data-width='80%' data-type='iframe' data-title='" . $lang->todo->view . "' data-icon='check'");?></td>
|
||||
<td><?php echo zget($users, $todo->assignedBy);?></td>
|
||||
<td><?php echo zget($users, $todo->assignedTo);?></td>
|
||||
<td class="c-begin"><?php echo $todo->begin;?></td>
|
||||
<td class="c-end"><?php echo $todo->end;?></td>
|
||||
<td class="c-status"><span class="status-todo status-<?php echo $todo->status;?>"><?php echo $lang->todo->statusList[$todo->status];?></span></td>
|
||||
|
||||
@@ -186,7 +186,7 @@ $lang->product->statusList['closed'] = 'Geschlossen';
|
||||
global $config;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} (Stakeholders and owner of the respective program, team members and stakeholders of the associated project can access)";
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} (Manager and Stakeholders of the respective program, team members and stakeholders of the associated project can access)";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -186,7 +186,7 @@ $lang->product->statusList['closed'] = 'Closed';
|
||||
global $config;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} (Stakeholders and owner of the respective program, team members and stakeholders of the associated project can access)";
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} (Manager and Stakeholders of the respective program, team members and stakeholders of the associated project can access)";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -186,7 +186,7 @@ $lang->product->statusList['closed'] = 'Fermé';
|
||||
global $config;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} (Stakeholders and owner of the respective program, team members and stakeholders of the associated project can access)";
|
||||
$lang->product->aclList['private'] = "Private {$lang->productCommon} (Manager and Stakeholders of the respective program, team members and stakeholders of the associated project can access)";
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -207,7 +207,7 @@ $lang->product->noModule = "<div>您现在还没有模块信息</div><div>
|
||||
$lang->product->noProduct = "暂时没有{$lang->productCommon}。";
|
||||
$lang->product->noMatched = '找不到包含"%s"的' . $lang->productCommon;
|
||||
|
||||
$lang->product->featureBar['browse']['allstory'] = $lang->product->allStory;
|
||||
$lang->product->featureBar['browse']['allstory'] = '全部';
|
||||
$lang->product->featureBar['browse']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->product->featureBar['browse']['assignedtome'] = $lang->product->assignedToMe;
|
||||
$lang->product->featureBar['browse']['openedbyme'] = $lang->product->openedByMe;
|
||||
@@ -216,7 +216,7 @@ $lang->product->featureBar['browse']['reviewbyme'] = $lang->product->reviewByM
|
||||
$lang->product->featureBar['browse']['draftstory'] = $lang->product->draftStory;
|
||||
$lang->product->featureBar['browse']['more'] = $lang->more;
|
||||
|
||||
$lang->product->featureBar['all']['all'] = '所有' . $lang->productCommon;
|
||||
$lang->product->featureBar['all']['all'] = '全部' . $lang->productCommon;
|
||||
$lang->product->featureBar['all']['noclosed'] = $lang->product->unclosed;
|
||||
$lang->product->featureBar['all']['closed'] = $lang->product->statusList['closed'];
|
||||
|
||||
|
||||
@@ -388,8 +388,10 @@ $projectIDParam = $isProjectStory ? "projectID=$projectID&" : '';
|
||||
<div class="table-actions btn-toolbar">
|
||||
<div class='btn-group dropup'>
|
||||
<?php
|
||||
$disabled = $canBatchEdit ? '' : "disabled='disabled'";
|
||||
$actionLink = $this->createLink('story', 'batchEdit', "productID=$productID&projectID=$projectID&branch=$branch&storyType=$storyType");
|
||||
foreach($stories as $story) $storyProductIds[$story->product] = $story->product;
|
||||
$storyProductID = count($storyProductIds) > 1 ? 0 : $productID;
|
||||
$disabled = $canBatchEdit ? '' : "disabled='disabled'";
|
||||
$actionLink = $this->createLink('story', 'batchEdit', "productID=$storyProductID&projectID=$projectID&branch=$branch&storyType=$storyType");
|
||||
?>
|
||||
<?php if($canBatchEdit or $canBatchClose or $canBatchUnlink or $canBatchReview or $canBatchChangeStage or $canBatchChangeBranch) echo html::commonButton($lang->edit, "data-form-action='$actionLink' $disabled");?>
|
||||
<?php if($canBatchEdit or $canBatchClose or $canBatchUnlink or $canBatchReview or $canBatchChangeStage or $canBatchChangeBranch):?>
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
<?php if(count($track) != 0):?>
|
||||
<?php $i = 0;?>
|
||||
<?php foreach($track as $storyID => $story):?>
|
||||
<?php if($i != 1) echo '<tr>';?>
|
||||
<?php if($i > 0) echo '<tr>';?>
|
||||
<td>
|
||||
<?php if(isset($story->parent) and $story->parent > 0):?><span class="label label-badge label-light" title="<?php echo $this->lang->story->children;?>"><?php echo $this->lang->story->childrenAB;?></span><?php endif;?>
|
||||
<?php echo html::a($this->createLink($module, 'view', "storyID=$storyID"), $story->title, '',"title='$story->title' data-app='$tab'");?>
|
||||
@@ -108,7 +108,7 @@
|
||||
<?php echo html::a($this->createLink('bug', 'view', "bugID=$bugID"), $bug->title, '', "title='$bug->title'") . '<br/>';?>
|
||||
<?php endforeach;?>
|
||||
</td>
|
||||
<?php if($i != 1) echo '</tr>';?>
|
||||
<?php if($i > 0) echo '</tr>';?>
|
||||
<?php $i++;?>
|
||||
<?php endforeach;?>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -135,7 +135,7 @@ $lang->productplan->endLetterChildTip = "父计划[%s]的完成日期:%s,
|
||||
$lang->productplan->beginLetterParentTip = "子计划[%s]的开始日期:%s,不能小于父计划的开始日期: %s";
|
||||
$lang->productplan->endGreaterParentTip = "子计划[%s]的完成日期:%s,不能大于父计划的完成日期: %s";
|
||||
|
||||
$lang->productplan->featureBar['browse']['all'] = '所有';
|
||||
$lang->productplan->featureBar['browse']['all'] = '全部';
|
||||
$lang->productplan->featureBar['browse']['undone'] = '未完成';
|
||||
$lang->productplan->featureBar['browse']['wait'] = '未开始';
|
||||
$lang->productplan->featureBar['browse']['doing'] = '进行中';
|
||||
|
||||
@@ -12,9 +12,11 @@ tbody.sortable > tr > td.sort-handler {color: #3c4353 !important;}
|
||||
.has-prefix > span {flex: none;}
|
||||
.has-prefix > a {padding-left: 5px;}
|
||||
|
||||
.has-suffix > a {max-width: calc(100% - 100px); padding-right: 5px; color: #0c60e1; display: inline-block; max-width: calc(100% - 50px);}
|
||||
.has-suffix > a {padding-right: 5px; color: #0c60e1; display: inline-block; max-width: calc(100% - 50px);}
|
||||
|
||||
.is-nest-child span.table-nest-icon {visibility: hidden; width: 0;}
|
||||
div.checkbox-primary + span.table-nest-icon {margin-left: 0px !important;}
|
||||
|
||||
#checkAll + label.hover:after {border-width: 0px;}
|
||||
.c-budget {width:100px; text-align: right; padding-right:16px !important;}
|
||||
.c-status {width: 65px !important;}
|
||||
.c-status {width: 65px !important;}
|
||||
|
||||
@@ -143,7 +143,7 @@ $lang->program->statusList['doing'] = '进行中';
|
||||
$lang->program->statusList['suspended'] = '已挂起';
|
||||
$lang->program->statusList['closed'] = '已关闭';
|
||||
|
||||
$lang->program->featureBar['browse']['all'] = '所有';
|
||||
$lang->program->featureBar['browse']['all'] = '全部';
|
||||
$lang->program->featureBar['browse']['unclosed'] = '未关闭';
|
||||
$lang->program->featureBar['browse']['wait'] = '未开始';
|
||||
$lang->program->featureBar['browse']['doing'] = '进行中';
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
<?php $label = "<span class='text'>$label</span>";?>
|
||||
<?php echo html::a(inlink('browse', "status=$key&orderBy=$orderBy"), $label, '', "class='btn btn-link $active'");?>
|
||||
<?php endforeach;?>
|
||||
<?php if($status == 'all' or $status == 'bySearch') echo html::checkbox('showClosed', array('1' => $lang->program->showClosed), '', $this->cookie->showClosed ? 'checked=checked' : '');?>
|
||||
<?php if(common::hasPriv('project', 'batchEdit') and $programType != 'bygrid' and $hasProject === true) echo html::checkbox('editProject', array('1' => $lang->project->edit), '', $this->cookie->editProject ? 'checked=checked' : '');?>
|
||||
<a class="btn btn-link querybox-toggle" id='bysearchTab'><i class="icon icon-search muted"></i> <?php echo $lang->user->search;?></a>
|
||||
</div>
|
||||
|
||||
@@ -245,14 +245,14 @@ $lang->project->modelList['scrum'] = "Scrum";
|
||||
$lang->project->modelList['waterfall'] = "瀑布";
|
||||
$lang->project->modelList['kanban'] = "看板";
|
||||
|
||||
$lang->project->featureBar['browse']['all'] = '所有';
|
||||
$lang->project->featureBar['browse']['all'] = '全部';
|
||||
$lang->project->featureBar['browse']['undone'] = '未完成';
|
||||
$lang->project->featureBar['browse']['wait'] = '未开始';
|
||||
$lang->project->featureBar['browse']['doing'] = '进行中';
|
||||
$lang->project->featureBar['browse']['suspended'] = '已挂起';
|
||||
$lang->project->featureBar['browse']['closed'] = '已关闭';
|
||||
|
||||
$lang->project->featureBar['build']['all'] = '所有版本';
|
||||
$lang->project->featureBar['build']['all'] = '全部版本';
|
||||
|
||||
$lang->project->aclList['private'] = "私有 (只有项目负责人、团队成员和干系人可访问)";
|
||||
$lang->project->aclList['open'] = "公开 (有项目视图权限即可访问)";
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<?php
|
||||
$buildName = $build ? " <span class='label label-danger'>Build:{$build->name}</span>" : '';
|
||||
$module = $type != 'bysearch' ? "¶m=$param" : '';
|
||||
echo html::a($this->inlink('bug', "projectID={$project->id}&productID={$productID}&branch=$branchID&orderBy=status,id_desc&build=$buildID&type=all$module"), "<span class='text'>{$lang->bug->allBugs}</span>" . ($type == 'all' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='allTab' class='btn btn-link" . ('all' == $type ? ' btn-active-text' : '') . "'");
|
||||
echo html::a($this->inlink('bug', "projectID={$project->id}&productID={$productID}&branch=$branchID&orderBy=status,id_desc&build=$buildID&type=all$module"), "<span class='text'>{$lang->bug->featureBar['browse']['all']}</span>" . ($type == 'all' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='allTab' class='btn btn-link" . ('all' == $type ? ' btn-active-text' : '') . "'");
|
||||
echo html::a($this->inlink('bug', "projectID={$project->id}&productID={$productID}&branch=$branchID&orderBy=status,id_desc&build=$buildID&type=unresolved$module"), "<span class='text'>{$lang->bug->unResolved}</span>" . ($type == 'unresolved' ? " <span class='label label-light label-badge'>{$pager->recTotal}</span>$buildName" : ''), '', "id='unresolvedTab' class='btn btn-link" . ('unresolved' == $type ? ' btn-active-text' : '') . "'");
|
||||
?>
|
||||
<a class="btn btn-link querybox-toggle" id="bysearchTab"><i class="icon icon-search muted"></i> <?php echo $lang->bug->search;?></a>
|
||||
|
||||
@@ -210,7 +210,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->project->end;?></th>
|
||||
<td><?php echo $project->end;?></td>
|
||||
<td><?php echo $project->end = $project->end == LONG_TIME ? $this->lang->project->longTime : $project->end;;?></td>
|
||||
<th><?php echo $lang->project->realEndAB;?></th>
|
||||
<td><?php echo $project->realEnd == '0000-00-00' ? '' : $project->realEnd;?></td>
|
||||
</tr>
|
||||
@@ -246,6 +246,8 @@
|
||||
<td><?php echo $statData->taskCount;?></td>
|
||||
<th><?php echo $lang->bug->common;?></th>
|
||||
<td><?php echo $statData->bugCount;?></td>
|
||||
<th><?php echo $lang->project->budget;?></th>
|
||||
<td><?php echo $project->budget;?></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
@@ -24,7 +24,7 @@ $lang->projectstory->batchUnlinkTip = '其他需求已经移除,如下需求
|
||||
|
||||
global $app;
|
||||
$app->loadLang('product');
|
||||
$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
|
||||
$lang->projectstory->featureBar['story']['allstory'] = '全部';
|
||||
$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
|
||||
$lang->projectstory->featureBar['story']['draft'] = $lang->product->draftStory;
|
||||
$lang->projectstory->featureBar['story']['reviewing'] = $lang->product->reviewingStory;
|
||||
|
||||
@@ -95,6 +95,6 @@ $lang->release->notifyList['ET'] = "所在{$lang->execution->common}团队成员
|
||||
$lang->release->notifyList['PT'] = "所在项目团队成员";
|
||||
$lang->release->notifyList['CT'] = "抄送给";
|
||||
|
||||
$lang->release->featureBar['browse']['all'] = $lang->release->all;
|
||||
$lang->release->featureBar['browse']['all'] = '全部';
|
||||
$lang->release->featureBar['browse']['normal'] = $lang->release->statusList['normal'];
|
||||
$lang->release->featureBar['browse']['terminate'] = $lang->release->statusList['terminate'];
|
||||
|
||||
@@ -292,6 +292,8 @@ class report extends control
|
||||
$this->loadModel('dept');
|
||||
$this->loadModel('user');
|
||||
|
||||
$super = common::hasPriv('report', 'allAnnualData');
|
||||
|
||||
$firstAction = $this->dao->select('*')->from(TABLE_ACTION)->orderBy('id')->limit(1)->fetch();
|
||||
$currentYear = date('Y');
|
||||
$firstYear = empty($firstAction) ? $currentYear : substr($firstAction->date, 0, 4);
|
||||
@@ -329,7 +331,7 @@ class report extends control
|
||||
|
||||
$noDepartment = array('0' => '/' . $this->lang->dept->noDepartment);
|
||||
$depts = $this->dept->getOptionMenu();
|
||||
if(!$this->app->user->admin)
|
||||
if(!$super)
|
||||
{
|
||||
$depts = ($dept and isset($depts[$dept])) ? array($dept => $depts[$dept]) : $noDepartment;
|
||||
}
|
||||
|
||||
+11
-10
@@ -9,16 +9,17 @@
|
||||
* @version $Id: en.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->report->index = 'Report Home';
|
||||
$lang->report->list = 'Report';
|
||||
$lang->report->item = 'Item';
|
||||
$lang->report->value = 'Value';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'Undefined';
|
||||
$lang->report->query = 'Query';
|
||||
$lang->report->annual = 'Annual Summary';
|
||||
$lang->report->project = 'Project';
|
||||
$lang->report->PO = 'PO';
|
||||
$lang->report->index = 'Report Home';
|
||||
$lang->report->list = 'Report';
|
||||
$lang->report->item = 'Item';
|
||||
$lang->report->value = 'Value';
|
||||
$lang->report->percent = '%';
|
||||
$lang->report->undefined = 'Undefined';
|
||||
$lang->report->query = 'Query';
|
||||
$lang->report->annual = 'Annual Summary';
|
||||
$lang->report->project = 'Project';
|
||||
$lang->report->PO = 'PO';
|
||||
$lang->report->viewEveryoneAnnual = 'View everyone annual summary';
|
||||
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
|
||||
@@ -9,16 +9,17 @@
|
||||
* @version $Id: zh-cn.php 5080 2013-07-10 00:46:59Z wyd621@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->report->index = '统计首页';
|
||||
$lang->report->list = '统计报表';
|
||||
$lang->report->item = '条目';
|
||||
$lang->report->value = '值';
|
||||
$lang->report->percent = '百分比';
|
||||
$lang->report->undefined = '未设定';
|
||||
$lang->report->query = '查询';
|
||||
$lang->report->annual = '年度总结';
|
||||
$lang->report->project = '项目';
|
||||
$lang->report->PO = 'PO';
|
||||
$lang->report->index = '统计首页';
|
||||
$lang->report->list = '统计报表';
|
||||
$lang->report->item = '条目';
|
||||
$lang->report->value = '值';
|
||||
$lang->report->percent = '百分比';
|
||||
$lang->report->undefined = '未设定';
|
||||
$lang->report->query = '查询';
|
||||
$lang->report->annual = '年度总结';
|
||||
$lang->report->project = '项目';
|
||||
$lang->report->PO = 'PO';
|
||||
$lang->report->viewEveryoneAnnual = '查看所有人年度总结';
|
||||
|
||||
$lang->report->colors[] = 'AFD8F8';
|
||||
$lang->report->colors[] = 'F6BD0F';
|
||||
|
||||
@@ -98,12 +98,13 @@ class reportModel extends model
|
||||
*/
|
||||
public function getExecutions($begin = 0, $end = 0)
|
||||
{
|
||||
$tasks = $this->dao->select('t1.*, t2.name as executionName, t3.name as projectName')->from(TABLE_TASK)->alias('t1')
|
||||
$permission = common::hasPriv('report', 'showProject') or $this->app->user->admin;
|
||||
$tasks = $this->dao->select('t1.*, t2.name as executionName, t3.name as projectName')->from(TABLE_TASK)->alias('t1')
|
||||
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.execution = t2.id')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t3')->on('t1.project = t3.id')
|
||||
->where('t1.status')->ne('cancel')
|
||||
->andWhere('t1.deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->sprints)->fi()
|
||||
->beginIF(!$permission)->andWhere('t2.id')->in($this->app->user->view->sprints)->fi()
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->andWhere('t1.parent')->lt(1)
|
||||
->andWhere('t2.status')->eq('closed')
|
||||
@@ -140,11 +141,12 @@ class reportModel extends model
|
||||
*/
|
||||
public function getProducts($conditions, $storyType = 'story')
|
||||
{
|
||||
$products = $this->dao->select('t1.id as id, t1.code, t1.name, t1.PO')->from(TABLE_PRODUCT)->alias('t1')
|
||||
$permission = common::hasPriv('report', 'showProduct') or $this->app->user->admin;
|
||||
$products = $this->dao->select('t1.id as id, t1.code, t1.name, t1.PO')->from(TABLE_PRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id')
|
||||
->where('t1.deleted')->eq(0)
|
||||
->beginIF(strpos($conditions, 'closedProduct') === false)->andWhere('t1.status')->ne('closed')->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi()
|
||||
->beginIF(!$permission)->andWhere('t1.id')->in($this->app->user->view->products)->fi()
|
||||
->orderBy('t2.order_asc, t1.line_desc, t1.order_asc')
|
||||
->fetchAll('id');
|
||||
|
||||
|
||||
@@ -606,7 +606,7 @@ class story extends control
|
||||
|
||||
/* Init vars. */
|
||||
$planID = $plan;
|
||||
$pri = 0;
|
||||
$pri = 3;
|
||||
$estimate = '';
|
||||
$title = '';
|
||||
$spec = '';
|
||||
@@ -750,6 +750,7 @@ class story extends control
|
||||
$this->loadModel('file');
|
||||
$this->app->loadLang('bug');
|
||||
$story = $this->story->getById($storyID, 0, true);
|
||||
$this->commonAction($storyID);
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
@@ -793,8 +794,6 @@ class story extends control
|
||||
return print(js::locate($this->createLink($this->app->rawModule, 'view', $params), 'parent'));
|
||||
}
|
||||
|
||||
$this->commonAction($storyID);
|
||||
|
||||
/* Sort products. */
|
||||
$myProducts = array();
|
||||
$othersProducts = array();
|
||||
@@ -847,7 +846,7 @@ class story extends control
|
||||
if($product->type == 'normal' and !empty($story->branch)) $this->view->moduleOptionMenu += $this->tree->getModulesName($story->module);
|
||||
|
||||
$branch = $product->type == 'branch' ? ($story->branch > 0 ? $story->branch : '0') : 'all';
|
||||
$productStories = $this->story->getProductStoryPairs($story->product, $branch, 0, 'all', 'id_desc', 0, '');
|
||||
$productStories = $this->story->getProductStoryPairs($story->product, $branch, 0, 'all', 'id_desc', 0, '', $story->type);
|
||||
|
||||
$this->view->title = $this->lang->story->edit . "STORY" . $this->lang->colon . $this->view->story->title;
|
||||
$this->view->position[] = $this->lang->story->edit;
|
||||
|
||||
@@ -460,7 +460,7 @@ $lang->story->subDivideTip['subStory'] = '子需求无法细分';
|
||||
$lang->story->subDivideTip['notWait'] = '该需求%s,无法进行细分操作';
|
||||
$lang->story->subDivideTip['notActive'] = '需求不是激活状态,无法进行细分操作';
|
||||
|
||||
$lang->story->featureBar['browse']['all'] = $lang->all;
|
||||
$lang->story->featureBar['browse']['all'] = '全部';
|
||||
$lang->story->featureBar['browse']['unclosed'] = $lang->story->unclosed;
|
||||
$lang->story->featureBar['browse']['draft'] = $lang->story->statusList['draft'];
|
||||
$lang->story->featureBar['browse']['reviewing'] = $lang->story->statusList['reviewing'];
|
||||
|
||||
@@ -497,11 +497,12 @@ class storyModel extends model
|
||||
{
|
||||
if(empty($title)) continue;
|
||||
|
||||
$stories->reviewer[$i] = array_filter($stories->reviewer[$i]);
|
||||
if(empty($stories->reviewer[$i]) and empty($stories->reviewerDitto[$i])) $stories->reviewer[$i] = array();
|
||||
$reviewers = (isset($stories->reviewDitto[$i])) ? $reviewers : $stories->reviewer[$i];
|
||||
$stories->reviewer[$i] = $reviewers;
|
||||
$_POST['reviewer'][$i] = $reviewers;
|
||||
if(empty(array_filter($stories->reviewer[$i])) and $forceReview)
|
||||
if(empty($stories->reviewer[$i]) and $forceReview)
|
||||
{
|
||||
dao::$errors[] = $this->lang->story->errorEmptyReviewedBy;
|
||||
return false;
|
||||
@@ -4273,7 +4274,7 @@ class storyModel extends model
|
||||
{
|
||||
$menu .= "<div class='dividing-line'></div>";
|
||||
}
|
||||
|
||||
|
||||
$menu .= $this->buildMenu('story', 'edit', $params . "&kanbanGroup=default&storyType=$story->type", $story, $type, '', '', 'showinonlybody');
|
||||
|
||||
$tab = $this->app->tab == 'project' ? 'project' : 'qa';
|
||||
|
||||
@@ -45,10 +45,10 @@ $config->task->defaultLoadCount = 50;
|
||||
|
||||
$config->task->custom = new stdclass();
|
||||
$config->task->custom->createFields = $config->task->customCreateFields;
|
||||
$config->task->custom->batchCreateFields = 'module,story,assignedTo,estimate,desc,pri';
|
||||
$config->task->custom->batchCreateFields = 'module,story,assignedTo,estimate,estStarted,deadline,desc,pri';
|
||||
$config->task->custom->batchEditFields = 'module,assignedTo,status,pri,estimate,record,left';
|
||||
|
||||
$config->task->excludeCheckFileds = ',pri,estStartedDitto,deadlineDitto,parent,regions,lanes,';
|
||||
$config->task->excludeCheckFileds = ',pri,estStartedDitto,deadlineDitto,parent,regions,lanes,vision,region,';
|
||||
|
||||
$config->task->datatable = new stdclass();
|
||||
$config->task->datatable->defaultField = array('id', 'pri', 'name', 'status', 'assignedTo', 'finishedBy', 'estimate', 'consumed', 'left', 'progress', 'deadline', 'actions');
|
||||
|
||||
@@ -1149,7 +1149,7 @@ class task extends control
|
||||
$kanbanData = $this->loadModel('kanban')->getRDKanban($task->execution, $execLaneType, 'id_desc', 0, $execGroupBy, $rdSearchValue);
|
||||
$kanbanData = json_encode($kanbanData);
|
||||
|
||||
return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban($kanbanData)"));
|
||||
return print(js::reload('parent') . js::execute("parent.parent.updateKanban($kanbanData)"));
|
||||
}
|
||||
if($from == 'taskkanban')
|
||||
{
|
||||
@@ -1159,9 +1159,9 @@ class task extends control
|
||||
$kanbanData = $kanbanData[$kanbanType];
|
||||
$kanbanData = json_encode($kanbanData);
|
||||
|
||||
return print(js::closeModal('parent.parent', '', "parent.parent.updateKanban(\"task\", $kanbanData)"));
|
||||
return print(js::reload('parent') . js::execute("parent.parent.updateKanban(\"task\", $kanbanData)"));
|
||||
}
|
||||
return print(js::closeModal('parent.parent', 'this'));
|
||||
return print(js::reload('parent') . js::execute("if(typeof(parent.parent.ajaxRefresh) == 'function') parent.parent.ajaxRefresh()"));
|
||||
}
|
||||
return print(js::locate($this->createLink('task', 'view', "taskID=$taskID"), 'parent'));
|
||||
}
|
||||
@@ -1199,7 +1199,7 @@ class task extends control
|
||||
$actionID = $this->loadModel('action')->create('task', $estimate->task, 'EditEstimate', $this->post->work);
|
||||
$this->action->logHistory($actionID, $changes);
|
||||
|
||||
$url = $this->session->estimateList ? $this->session->estimateList : inlink('record', "taskID={$estimate->task}");
|
||||
$url = $this->session->estimateList ? $this->session->estimateList : inlink('recordEstimate', "taskID={$estimate->task}");
|
||||
return print(js::locate($url, 'parent'));
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
#testStoryBox table tr td input {border: 0px;}
|
||||
#testStoryBox table tr td .input-group .input-group-addon {border-left: 1px solid #dcdcdc; border-right: 1px solid #dcdcdc;}
|
||||
#testStoryBox table button.btn {border: 0px;}
|
||||
#testStoryBox .c-name {width: 300px;}
|
||||
#testStoryBox .c-name {width: 120px;}
|
||||
#testStoryBox .c-pri, #testStoryBox .c-estimate, #testStoryBox .c-actions {width: 70px;}
|
||||
#testStoryBox .c-date {width: 140px;}
|
||||
#testStoryBox .c-assignedTo {width: 100px; padding: 7px;}
|
||||
|
||||
+17
-3
@@ -1,6 +1,7 @@
|
||||
$(function()
|
||||
{
|
||||
if(config.onlybody == 'yes') $('.main-actions').css('width', '100%');
|
||||
limitIframeLevel();
|
||||
});
|
||||
|
||||
function assign(taskID, assignedTo)
|
||||
@@ -10,7 +11,20 @@ function assign(taskID, assignedTo)
|
||||
$('.assign').load(createLink('user', 'ajaxGetUser', 'taskID=' + taskID + '&assignedTo=' + assignedTo));
|
||||
}
|
||||
|
||||
$(document).ready(function()
|
||||
/**
|
||||
* Ajax refresh
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function ajaxRefresh()
|
||||
{
|
||||
limitIframeLevel();
|
||||
});
|
||||
$.get(location.href, function(data)
|
||||
{
|
||||
$data = $(data);
|
||||
$('#actionbox ol.histories-list').html($data.find('#actionbox ol.histories-list').html());
|
||||
$('.side-col').html($data.find('.side-col').html());
|
||||
|
||||
if($('#actionbox ol.histories-list #lastComment').length > 0) $('#actionbox ol.histories-list #lastComment').kindeditor();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -165,6 +165,7 @@ foreach(explode(',', $config->task->create->requiredFields) as $field)
|
||||
<?php $i++;?>
|
||||
<?php if($i > 30) break;?>
|
||||
<?php endforeach;?>
|
||||
<?php unset($members['ditto']);?>
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
|
||||
@@ -56,19 +56,23 @@
|
||||
<td>
|
||||
<div class='input-group'><?php echo html::input('currentConsumed', 0, "class='form-control'");?> <span class='input-group-addon'><?php echo $lang->task->hour;?></span></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo empty($task->team) ? $lang->task->consumed : $lang->task->myConsumed;?></th>
|
||||
<td>
|
||||
<?php $consumed = empty($task->team) ? $task->consumed : (float)$task->myConsumed;?>
|
||||
<?php
|
||||
echo "<span id='totalConsumed'>" . (float)$consumed . "</span> " . $lang->workingHour . html::hidden('consumed', $consumed);
|
||||
js::set('consumed', $consumed);
|
||||
?>
|
||||
<div class='table-row'>
|
||||
<div class='table-col strong w-80px text-right' style='padding-right:10px'><?php echo empty($task->team) ? $lang->task->consumed : $lang->task->myConsumed;?> </div>
|
||||
<div class='table-col'>
|
||||
<?php $consumed = empty($task->team) ? $task->consumed : (float)$task->myConsumed;?>
|
||||
<?php
|
||||
echo "<span id='totalConsumed'>" . (float)$consumed . "</span> " . $lang->workingHour . html::hidden('consumed', $consumed);
|
||||
js::set('consumed', $consumed);
|
||||
?>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
</tr>
|
||||
<tr class='<?php if($task->mode == 'multi') echo 'hidden'?>'>
|
||||
<th><?php echo (!empty($task->team) and $task->mode == 'linear') ? $lang->task->transferTo : $lang->task->assign;?></th>
|
||||
<th><?php echo $lang->task->assign;?></th>
|
||||
<td>
|
||||
<?php
|
||||
if(!empty($task->team) and $task->mode == 'linear')
|
||||
@@ -83,11 +87,25 @@
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo empty($task->team) ? $lang->task->realStarted : $lang->task->my . $lang->task->realStarted;?></th>
|
||||
<td><div class='datepicker-wrapper'><?php echo html::input('realStarted', $task->realStarted != '0000-00-00 00:00:00' ? $task->realStarted : '', "class='form-control form-datetime'");?></div></td><td></td>
|
||||
<th><?php echo $lang->task->realStarted;?></th>
|
||||
<td>
|
||||
<div class='datepicker-wrapper'>
|
||||
<?php
|
||||
$realStarted = $task->realStarted;
|
||||
$readonly = 'readonly';
|
||||
if(helper::isZeroDate($realStarted))
|
||||
{
|
||||
$realStarted = '';
|
||||
$readonly = '';
|
||||
}
|
||||
?>
|
||||
<?php echo html::input('realStarted', $realStarted, "class='form-control" . ($readonly ? '' : ' form-datetime') . "' $readonly");?>
|
||||
</div>
|
||||
</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo empty($task->team) ? $lang->task->finishedDate : $lang->task->my . $lang->task->finishedDate;?></th>
|
||||
<th><?php echo $lang->task->finishedDate;?></th>
|
||||
<td><div class='datepicker-wrapper'><?php echo html::input('finishedDate', helper::now(), "class='form-control form-datetime'");?></div></td><td></td>
|
||||
</tr>
|
||||
<tr class='hide'>
|
||||
|
||||
@@ -250,7 +250,7 @@ $lang->testcase->action->unlinkedfromproject = array('main' => '$date, 由 <st
|
||||
$lang->testcase->action->linked2execution = array('main' => '$date, 由 <strong>$actor</strong> 关联到' . $lang->executionCommon . ' <strong>$extra</strong>。');
|
||||
$lang->testcase->action->unlinkedfromexecution = array('main' => '$date, 由 <strong>$actor</strong> 从' . $lang->executionCommon . ' <strong>$extra</strong> 移除。');
|
||||
|
||||
$lang->testcase->featureBar['browse']['all'] = $lang->testcase->allCases;
|
||||
$lang->testcase->featureBar['browse']['all'] = '全部';
|
||||
$lang->testcase->featureBar['browse']['wait'] = '待评审';
|
||||
$lang->testcase->featureBar['browse']['needconfirm'] = $lang->testcase->needConfirm;
|
||||
$lang->testcase->featureBar['browse']['group'] = '分组查看';
|
||||
|
||||
@@ -2504,8 +2504,8 @@ class testcaseModel extends model
|
||||
return $this->buildMenu('testcase', 'confirmstorychange', $params, $case, 'browse', 'confirm', 'hiddenwin', '', '', '', $this->lang->confirm);
|
||||
}
|
||||
|
||||
$menu .= $this->buildMenu('testtask', 'results', "runID=0&$params", $case, 'browse', '', '', 'iframe', true, "data-width='95%'");
|
||||
$menu .= $this->buildMenu('testtask', 'runCase', "runID=0&$params&version=$case->version", $case, 'browse', 'play', '', 'runCase iframe', false, "data-width='95%'");
|
||||
$menu .= $this->buildMenu('testtask', 'results', "runID=0&$params", $case, 'browse', '', '', 'iframe', true, "data-width='95%'");
|
||||
|
||||
$editParams = $params;
|
||||
if($this->app->tab == 'project') $editParams .= "&comment=false&projectID={$this->session->project}";
|
||||
|
||||
@@ -24,3 +24,4 @@ $(function()
|
||||
|
||||
$('tr:first').click();
|
||||
});
|
||||
|
||||
|
||||
@@ -148,7 +148,7 @@ $lang->testtask->finishedDateLess = '实际完成日期不能小于开始日期
|
||||
$lang->testtask->finishedDateMore = '实际完成日期不能大于今天';
|
||||
|
||||
$lang->testtask->assignedToMe = '指派给我';
|
||||
$lang->testtask->allCases = '所有用例';
|
||||
$lang->testtask->allCases = '全部用例';
|
||||
|
||||
$lang->testtask->lblCases = '用例列表';
|
||||
$lang->testtask->lblUnlinkCase = '移除用例';
|
||||
|
||||
@@ -1622,8 +1622,8 @@ class testtaskModel extends model
|
||||
|
||||
common::printIcon('testcase', 'createBug', "product=$run->product&branch=$run->branch&extra=executionID=$task->execution,buildID=$task->build,caseID=$run->case,version=$run->version,runID=$run->id,testtask=$task->id", $run, 'list', 'bug', '', 'iframe', '', "data-width='90%'");
|
||||
|
||||
common::printIcon('testtask', 'results', "id=$run->id", $run, 'list', '', '', 'iframe', '', "data-width='90%'");
|
||||
common::printIcon('testtask', 'runCase', "id=$run->id", $run, 'list', 'play', '', 'runCase iframe', false, "data-width='95%'");
|
||||
common::printIcon('testtask', 'results', "id=$run->id", $run, 'list', '', '', 'iframe', '', "data-width='90%'");
|
||||
|
||||
if(common::hasPriv('testtask', 'unlinkCase', $run))
|
||||
{
|
||||
|
||||
@@ -1452,7 +1452,7 @@ class treeModel extends model
|
||||
$module = $this->getById((int)$moduleID);
|
||||
if(empty($module)) return array();
|
||||
|
||||
return $this->dao->select('id')->from(TABLE_MODULE)->where("CONCAT(',', path, ',')")->like("%,$module->path,%")->andWhere('deleted')->eq(0)->fetchPairs();
|
||||
return $this->dao->select('id')->from(TABLE_MODULE)->where("CONCAT(',', path, ',')")->like("%$module->path%")->andWhere('deleted')->eq(0)->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -29,7 +29,7 @@ fields:
|
||||
range: [],1-99,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,1-100,[]{4}
|
||||
- field: password
|
||||
note: "密码"
|
||||
range: 123qwe!@#{346}
|
||||
range: 123Qwe!@#{346}
|
||||
format: md5
|
||||
- field: role
|
||||
note: "职位"
|
||||
|
||||
@@ -15,7 +15,7 @@ class apiCheckModel
|
||||
global $argv;
|
||||
$path = $argv[1];
|
||||
$entries = '';
|
||||
if($argv[2]) $entries = $argv[2];
|
||||
if(isset($argv[2])) $entries = $argv[2];
|
||||
$this->run($argv[1], $entries);
|
||||
}
|
||||
|
||||
|
||||
@@ -145,8 +145,14 @@ class db
|
||||
{
|
||||
$this->dao->query('DROP DATABASE IF EXISTS ' . $this->config->test->dbPrefix . $i);
|
||||
$this->dao->query('CREATE DATABASE ' . $this->config->test->dbPrefix . $i);
|
||||
|
||||
shell_exec("mysql -h{$this->config->db->host} -u {$this->config->db->user} -p{$this->config->db->password} -P {$this->config->db->port} {$this->config->test->dbPrefix}{$i} < {$this->sqlFile}");
|
||||
if($this->config->db->host = 'localhost' and $this->config->db->port = '3306')
|
||||
{
|
||||
shell_exec("mysql -u {$this->config->db->user} -p{$this->config->db->password} {$this->config->test->dbPrefix}{$i} < {$this->sqlFile}");
|
||||
}
|
||||
else
|
||||
{
|
||||
shell_exec("mysql -h{$this->config->db->host} -u {$this->config->db->user} -p{$this->config->db->password} -P {$this->config->db->port} {$this->config->test->dbPrefix}{$i} < {$this->sqlFile}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+19
-5
@@ -218,12 +218,19 @@ function zdRun()
|
||||
function copyDB()
|
||||
{
|
||||
global $config, $dao;
|
||||
|
||||
$dumpCommand = "mysqldump -h%s -P%s -u%s -p%s %s --add-drop-table=false > %s";
|
||||
$sqlFile = TEST_BASEHPATH . DS . 'tmp/raw.sql';
|
||||
$sqlFile = TEST_BASEHPATH . DS . 'tmp/raw.sql';
|
||||
if($config->db->host = 'localhost' and $config->db->port = '3306')
|
||||
{
|
||||
$dumpCommand = "mysqldump -u%s -p%s %s --add-drop-table=false > %s";
|
||||
$dumpCommand = sprintf($dumpCommand, $config->db->user, $config->db->password, $config->test->rawDB, $sqlFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
$dumpCommand = "mysqldump -h%s -P%s -u%s -p%s %s --add-drop-table=false > %s";
|
||||
$dumpCommand = sprintf($dumpCommand, $config->db->host, $config->db->port, $config->db->user, $config->db->password, $config->test->rawDB, $sqlFile);
|
||||
}
|
||||
|
||||
$currentDBNum = $dao->query("select count(*) as num from information_schema.SCHEMATA where SCHEMA_NAME like '" . $config->test->dbPrefix . "%'")->fetch();
|
||||
$dumpCommand = sprintf($dumpCommand, $config->db->host, $config->db->port, $config->db->user, $config->db->password, $config->test->rawDB, $sqlFile);
|
||||
shell_exec($dumpCommand);
|
||||
|
||||
$dbNum = $config->test->dbNum;
|
||||
@@ -238,7 +245,14 @@ function copyDB()
|
||||
{
|
||||
if($currentDBNum->num > 0) $dao->query('DROP DATABASE IF EXISTS ' . $db);
|
||||
$dao->query('CREATE DATABASE ' . $db);
|
||||
shell_exec("mysql -h{$config->db->host} -P {$config->db->port} -u{$config->db->user} -p{$config->db->password} $db < $sqlFile");
|
||||
if($config->db->host = 'localhost' and $config->db->port = '3306')
|
||||
{
|
||||
shell_exec("mysql -u{$config->db->user} -p{$config->db->password} $db < $sqlFile");
|
||||
}
|
||||
else
|
||||
{
|
||||
shell_exec("mysql -h{$config->db->host} -P {$config->db->port} -u{$config->db->user} -p{$config->db->password} $db < $sqlFile");
|
||||
}
|
||||
echo '数据库<' . $db . '>复制成功!' . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user