Merge branch '15.6'

This commit is contained in:
王怡栋
2021-11-01 15:23:15 +08:00
107 changed files with 1865 additions and 256 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';
+1 -1
View File
@@ -15,7 +15,7 @@ $lang->action->common = 'Log';
$lang->action->id = 'ID';
$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 = 'Object Name';
+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';
+1 -1
View File
@@ -15,7 +15,7 @@ $lang->action->common = '系统日志';
$lang->action->id = '编号';
$lang->action->product = $lang->productCommon;
$lang->action->project = '项目';
$lang->action->execution = $lang->executionCommon;
$lang->action->execution = $lang->execution->common;
$lang->action->objectType = '对象类型';
$lang->action->objectID = '对象ID';
$lang->action->objectName = '对象名称';
+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 = '還原';
+2 -2
View File
@@ -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;
+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'>
+1 -1
View File
@@ -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');
+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
@@ -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
@@ -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;
+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();
+14 -2
View File
@@ -361,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)
+4 -2
View File
@@ -216,8 +216,7 @@ 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');
@@ -255,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)
{
+2
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,6 +28,7 @@ $lang->company->website = '官網';
$lang->company->backyard = '內網';
$lang->company->guest = '匿名登錄';
$lang->company->admins = '管理員';
$lang->company->deleted = '已刪除';
$lang->company->product = $lang->productCommon;
$lang->company->project = '項目';
+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'] = '失敗';
+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
@@ -2,7 +2,7 @@
global $config;
$lang->custom->common = 'Custom';
$lang->custom->ID = 'ID';
$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 = '恢復預設';
+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 = "刪除部門";
+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)
{
+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 = '搜索';
+3
View File
@@ -154,6 +154,7 @@ class docModel extends model
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();
@@ -183,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 = '最後編輯';
$lang->entry->editedDate = '編輯時間';
$lang->entry->date = '請求時間';
$lang->entry->url = '請求地址';
$lang->entry->calledTime = '調用時間';
$lang->entry->editedBy = '由誰編輯';
$lang->entry->deleted = '已刪除';
$lang->entry->confirmDelete = '您確認要刪除該應用嗎?';
$lang->entry->help = '使用說明';
+1 -1
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';
+1 -1
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';
+1 -1
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';
+1 -1
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 . '类型';
+7 -1
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}團隊的成員";
@@ -315,7 +321,7 @@ if($config->systemMode == 'new') $lang->execution->copyTeamTitle = "選擇
/* 交互提示。*/
$lang->execution->confirmDelete = "您確定刪除{$lang->executionCommon}[%s]嗎?";
$lang->execution->confirmUnlinkMember = "您確定從該{$lang->executionCommon}中移除該用戶嗎?";
$lang->execution->confirmUnlinkStory = "移除該{$lang->SRCommon}后,該{$lang->SRCommon}關联的用例将被移除,該{$lang->SRCommon}关联的任務将被取消,請確認。";
$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}中移除後再操作。";
+3 -1
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')));
}
/**
@@ -1180,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';
+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
@@ -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';
+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 = '上傳時間:';
+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 = '暫時沒有項目';
+3 -2
View File
@@ -233,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');
+4 -2
View File
@@ -174,8 +174,10 @@ $lang->install->success = "Đã được cài đặt!";
$lang->install->login = 'Đăng nhập ZenTao';
$lang->install->register = 'Đăng ký cộng đồng ZenTao';
$lang->install->joinZentao = <<<EOT
<p>Bạn đã cài đặt ZenTao %s.<strong class='text-danger'> Vui lòng xóa install.php</strong>.</p><p>Chú ý: Để nhận tin tức mới nhất về ZenTao, vui lòng đăng ký trên Cộng đồng ZenTao(<a href='https://www.zentao.pm' class='alert-link' target='_blank'>www.zentao.pm</a>).</p>
$lang->install->successLabel = "<p>Bạn đã cài đặt ZenTao %s.</p>";
$lang->install->successNoticeLabel = "<p>Bạn đã cài đặt ZenTao %s.<strong class='text-danger'> Vui lòng xóa install.php</strong>.</p>";
$lang->install->joinZentao = <<<EOT
<p>Chú ý: Để nhận tin tức mới nhất về ZenTao, vui lòng đăng ký trên Cộng đồng ZenTao(<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
@@ -206,8 +206,10 @@ $lang->install->success = "安装成功";
$lang->install->login = '登录禅道管理系统';
$lang->install->register = '禅道社区注册';
$lang->install->joinZentao = <<<EOT
<p>您已经成功安装禅道管理系统%s,<strong class='text-danger'>请及时删除install.php</strong>。</p><p>友情提示:为了您及时获得禅道的最新动态,请在禅道社区(<a href='https://www.zentao.net' class='alert-link' target='_blank'>www.zentao.net</a>)进行登记。</p>
$lang->install->successLabel = "<p>您已经成功安装禅道管理系统%s。</p>";
$lang->install->successNoticeLabel = "<p>您已经成功安装禅道管理系统%s,<strong class='text-danger'>请及时删除install.php</strong>。</p>";
$lang->install->joinZentao = <<<EOT
<p>友情提示:为了您及时获得禅道的最新动态,请在禅道社区(<a href='https://www.zentao.net' class='alert-link' target='_blank'>www.zentao.net</a>)进行登记。</p>
EOT;
$lang->install->product = array('chanzhi', 'zdoo', 'xuanxuan', 'ydisk', 'meshiot');
+5 -3
View File
@@ -58,7 +58,7 @@ $lang->install->introductionContent = <<<EOT
<p>項目用來組織相應的人力進行研發,做好項目過程的跟蹤管理,多快好省地完成項目。</p>
</div>
<div class='block-details block-right'>
<p class='block-title'><i class='icon icon-product'></i><strong>執行</strong></p>
<p class='block-title'><i class='icon icon-run'></i><strong>執行</strong></p>
<p>執行用來做任務的分解、指派和跟蹤,保證項目目標可以落實到人來執行。<p>
</div>
</div>
@@ -206,8 +206,10 @@ $lang->install->success = "安裝成功";
$lang->install->login = '登錄禪道管理系統';
$lang->install->register = '禪道社區註冊';
$lang->install->joinZentao = <<<EOT
<p>您已經成功安裝禪道管理系統%s,<strong class='text-danger'>請及時刪除install.php</strong>。</p><p>友情提示:為了您及時獲得禪道的最新動態,請在禪道社區(<a href='https://www.zentao.net' class='alert-link' target='_blank'>www.zentao.net</a>)進行登記。</p>
$lang->install->successLabel = "<p>您已經成功安裝禪道管理系統%s。</p>";
$lang->install->successNoticeLabel = "<p>您已經成功安裝禪道管理系統%s,<strong class='text-danger'>請及時刪除install.php</strong>。</p>";
$lang->install->joinZentao = <<<EOT
<p>友情提示:為了您及時獲得禪道的最新動態,請在禪道社區(<a href='https://www.zentao.net' class='alert-link' target='_blank'>www.zentao.net</a>)進行登記。</p>
EOT;
$lang->install->product = array('chanzhi', 'zdoo', 'xuanxuan', 'ydisk', 'meshiot');
+4 -1
View File
@@ -18,7 +18,10 @@
<div class='modal-body'>
<div class='alert with-icon alert-pure'>
<i class='icon-check-circle'></i>
<div class='content'><?php echo nl2br(sprintf($lang->install->joinZentao, $config->version, $this->createLink('admin', 'register'), $this->createLink('admin', 'bind'), inlink('step6')));?></div>
<div class='content'>
<?php $joinZentao = ($installFileDeleted ? $lang->install->successLabel : $lang->install->successNoticeLabel) . $lang->install->joinZentao;?>
<?php echo nl2br(sprintf($joinZentao, $config->version, $this->createLink('admin', 'register'), $this->createLink('admin', 'bind'), inlink('step6')));?>
</div>
</div>
</div>
<div class='modal-footer'>
+6
View File
@@ -38,6 +38,12 @@ $lang->job->customParam = '自定義構建參數';
$lang->job->paramName = '名稱';
$lang->job->paramValue = '值';
$lang->job->custom = '自定義';
$lang->job->createdBy = '由誰創建';
$lang->job->createdDate = '創建日期';
$lang->job->editedBy = '由誰編輯';
$lang->job->editedDate = '編輯日期';
$lang->job->lastTag = '最後標籤';
$lang->job->deleted = '已刪除';
$lang->job->lblBasic = '基本信息';
+2
View File
@@ -92,6 +92,7 @@ $lang->misc->feature->downloadFile = 'Download introduction';
$lang->misc->feature->tutorialDesc = '<p>ZenTao 15.0 has new functions, and you know how to use it through the "<strong>Tutorial</strong>".</p><p>Click your [<span style="color: #0c60e1">Avatar-Theme-Young Blue</span>] to set it.</p>';
$lang->misc->feature->themeDesc = '<p>ZenTao 15.0+ a new "Youth Blue" theme, the pages are more beautiful and the experience is more friendly.</p><p>Click your [<span style="color: #0c60e1">Avatar-Theme-Young Blue</span>] to set it.</p>';
$lang->misc->releaseDate['15.6'] = '2021-10-12';
$lang->misc->releaseDate['15.5'] = '2021-09-14';
$lang->misc->releaseDate['15.4'] = '2021-08-23';
$lang->misc->releaseDate['15.3'] = '2021-08-04';
@@ -157,6 +158,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
$lang->misc->feature->all['15.6'][] = array('title' => 'Fix bug.', 'desc' => '');
$lang->misc->feature->all['15.5'][] = array('title' => 'Add Program / Product / Project Kanban, global addition function and novice guidance. Fix bug.', 'desc' => '');
$lang->misc->feature->all['15.4'][] = array('title' => 'Fix bug', 'desc' => '');
$lang->misc->feature->all['15.3'][] = array('title' => 'Adjust interface style and document, fix bug', 'desc' => '');
+2
View File
@@ -92,6 +92,7 @@ $lang->misc->feature->downloadFile = '下载新版本功能介绍文档';
$lang->misc->feature->tutorialDesc = "<p>禅道15系列新增了多项功能,您可以通过“<strong>新手引导教程</strong>”快速了解禅道的基本使用方法。</p><p>通过鼠标经过 [<span style='color: #0c60e1'>头像-新手引导</span>],点击新手引导,即可进入新手引导教程。</p>";
$lang->misc->feature->themeDesc = "<p>禅道15系列上线了全新的“青春蓝”主题,页面呈现更加美观,体验更加友好。</p><p>通过鼠标经过 [<span style='color: #0c60e1'>头像-主题-青春蓝</span>],点击青春蓝,即可设置成功。</p>";
$lang->misc->releaseDate['15.6'] = '2021-10-12';
$lang->misc->releaseDate['15.5'] = '2021-09-14';
$lang->misc->releaseDate['15.4'] = '2021-08-23';
$lang->misc->releaseDate['15.3'] = '2021-08-04';
@@ -157,6 +158,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
$lang->misc->feature->all['15.6'][] = array('title' => '修复Bug。', 'desc' => '');
$lang->misc->feature->all['15.5'][] = array('title' => '增加项目集/产品/项目看板视图、全局添加功能、新手引导。 修复Bug。', 'desc' => '');
$lang->misc->feature->all['15.4'][] = array('title' => '修复Bug', 'desc' => '');
$lang->misc->feature->all['15.3'][] = array('title' => '实现界面风格改动和文档优化,修复Bug', 'desc' => '');
+2
View File
@@ -92,6 +92,7 @@ $lang->misc->feature->downloadFile = '下載新版本功能介紹文檔';
$lang->misc->feature->tutorialDesc = "<p>禪道15系列新增了多項功能,您可以通過“<strong>新手引導教程</strong>”快速瞭解禪道的基本使用方法。</p><p>通過滑鼠經過 [<span style='color: #0c60e1'>頭像-新手引導</span>],點擊新手引導,即可進入新手引導教程。</p>";
$lang->misc->feature->themeDesc = "<p>禪道15系列上線了全新的“青春藍”主題,頁面呈現更加美觀,體驗更加友好。</p><p>通過滑鼠經過 [<span style='color: #0c60e1'>頭像-主題-青春藍</span>],點擊青春藍,即可設置成功。</p>";
$lang->misc->releaseDate['15.6'] = '2021-10-12';
$lang->misc->releaseDate['15.5'] = '2021-09-14';
$lang->misc->releaseDate['15.4'] = '2021-08-23';
$lang->misc->releaseDate['15.3'] = '2021-08-04';
@@ -157,6 +158,7 @@ $lang->misc->releaseDate['7.2.stable'] = '2015-05-22';
$lang->misc->releaseDate['7.1.stable'] = '2015-03-07';
$lang->misc->releaseDate['6.3.stable'] = '2014-11-07';
$lang->misc->feature->all['15.6'][] = array('title' => '修復Bug。', 'desc' => '');
$lang->misc->feature->all['15.5'][] = array('title' => '增加項目集/產品/項目看板視圖、全局添加功能、新手引導。 修復Bug。', 'desc' => '');
$lang->misc->feature->all['15.4'][] = array('title' => '修復Bug', 'desc' => '');
$lang->misc->feature->all['15.3'][] = array('title' => '實現界面風格改動和文檔優化,修復Bug', 'desc' => '');
+5 -1
View File
@@ -243,7 +243,11 @@ class personnel extends control
$this->dao->update($objectTable)->set('whitelist')->eq($newWhitelist)->where('id')->eq($acl->objectID)->exec();
$this->dao->delete()->from(TABLE_ACL)->where('id')->eq($id)->exec();
if($acl->objectType == 'product') $this->personnel->deleteProgramWhitelist($acl->objectID, $acl->account);
if($acl->objectType == 'product')
{
$product = $this->loadModel('product')->getByID($acl->objectID);
if($product->program) $this->personnel->deleteProgramWhitelist($product->program, $acl->account);
}
if($acl->objectType == 'sprint') $this->personnel->deleteProjectWhitelist($acl->objectID, $acl->account);
$this->loadModel('user')->updateUserView($acl->objectID, $acl->objectType, array($acl->account));
+52 -9
View File
@@ -670,18 +670,33 @@ class personnelModel extends model
/**
* Delete product whitelist.
*
* @param int $objectID
* @param int $productID
* @param string $account
* @access public
* @return void
*/
public function deleteProductWhitelist($objectID, $account = '')
public function deleteProductWhitelist($productID, $account = '')
{
$product = $this->dao->select('id,whitelist')->from(TABLE_PRODUCT)->where('id')->eq($objectID)->fetch('whitelist');
$product = $this->dao->select('id,whitelist')->from(TABLE_PRODUCT)->where('id')->eq($productID)->fetch();
if(empty($product)) return false;
$newWhitelist = str_replace(',' . $acl->account, '', $product->whitelist);
$this->dao->update(TABLE_PRODUCT)->set('whitelist')->eq($newWhitelist)->where('id')->eq($objectID)->exec();
$newWhitelist = str_replace(',' . $account, '', $product->whitelist);
$this->dao->update(TABLE_PRODUCT)->set('whitelist')->eq($newWhitelist)->where('id')->eq($productID)->exec();
$result = $this->dao->delete()->from(TABLE_ACL)
->where('objectID')->eq($productID)
->andWhere('account')->eq($account)
->andWhere('objectType')->eq('product')
->andWhere('source')->eq('sync')
->exec();
/* Update user view when delete success. */
if($result)
{
$viewProducts = $this->dao->select('products')->from(TABLE_USERVIEW)->where('account')->eq($account)->fetch('products');
$newViewProducts = trim(str_replace(",$productID,", '', ",$viewProducts,"), ',');
$this->dao->update(TABLE_USERVIEW)->set('products')->eq($newViewProducts)->where('account')->eq($account)->exec();
}
}
/**
@@ -694,7 +709,9 @@ class personnelModel extends model
*/
public function deleteProgramWhitelist($programID = 0, $account = '')
{
$program = $this->loadModel('program')->getByID($programID);
$program = $this->loadModel('program')->getByID($programID);
if(empty($program)) return false;
$products = $this->dao->select('id')->from(TABLE_PRODUCT)->where('program')->eq($programID)->andWhere('deleted')->eq('0')->fetchPairs('id');
$whitelist = $this->dao->select('*')->from(TABLE_ACL)->where('objectID')->in($products)->andWhere('account')->eq($account)->andWhere('objectType')->eq('product')->fetch();
@@ -703,7 +720,20 @@ class personnelModel extends model
{
$newWhitelist = str_replace(',' . $account, '', $program->whitelist);
$this->dao->update(TABLE_PROGRAM)->set('whitelist')->eq($newWhitelist)->where('id')->eq($programID)->exec();
$this->dao->delete()->from(TABLE_ACL)->where('objectID')->eq($programID)->andWhere('account')->eq($account)->andWhere('objectType')->eq('program')->exec();
$result = $this->dao->delete()->from(TABLE_ACL)
->where('objectID')->eq($programID)
->andWhere('account')->eq($account)
->andWhere('objectType')->eq('program')
->andWhere('source')->eq('sync')
->exec();
/* Update user view when delete success. */
if($result)
{
$viewPrograms = $this->dao->select('programs')->from(TABLE_USERVIEW)->where('account')->eq($account)->fetch('programs');
$newViewPrograms = trim(str_replace(",$programID,", '', ",$viewPrograms,"), ',');
$this->dao->update(TABLE_USERVIEW)->set('programs')->eq($newViewPrograms)->where('account')->eq($account)->exec();
}
}
$this->loadModel('user')->updateUserView($programID, 'program', array($account));
}
@@ -721,7 +751,7 @@ class personnelModel extends model
$project = $this->dao->select('id,project,whitelist')->from(TABLE_PROJECT)->where('id')->eq($objectID)->fetch();
if(empty($project)) return false;
$projectID = $project->project;
$projectID = $project->project ? $project->project : $objectID;
$sprints = $this->dao->select('id')->from(TABLE_PROJECT)->where('project')->eq($projectID)->andWhere('deleted')->eq('0')->fetchPairs('id');
$whitelist = $this->dao->select('*')->from(TABLE_ACL)->where('objectID')->in($sprints)->andWhere('account')->eq($account)->andWhere('objectType')->eq('sprint')->fetch();
@@ -730,7 +760,20 @@ class personnelModel extends model
{
$newWhitelist = str_replace(',' . $account, '', $project->whitelist);
$this->dao->update(TABLE_PROJECT)->set('whitelist')->eq($newWhitelist)->where('id')->eq($projectID)->exec();
$this->dao->delete()->from(TABLE_ACL)->where('objectID')->eq($projectID)->andWhere('account')->eq($account)->andWhere('objectType')->eq('project')->exec();
$result = $this->dao->delete()->from(TABLE_ACL)
->where('objectID')->eq($projectID)
->andWhere('account')->eq($account)
->andWhere('objectType')->eq('project')
->andWhere('source')->eq('sync')
->exec();
/* Update user view when delete success. */
if($result)
{
$viewProjects = $this->dao->select('projects')->from(TABLE_USERVIEW)->where('account')->eq($account)->fetch('projects');
$newViewProjects = trim(str_replace(",$projectID,", '', ",$viewProjects,"), ',');
$this->dao->update(TABLE_USERVIEW)->set('projects')->eq($newViewProjects)->where('account')->eq($account)->exec();
}
}
$this->loadModel('user')->updateUserView($projectID, 'project', array($account));
}
+1 -1
View File
@@ -697,7 +697,7 @@ class product extends control
if(!$product)
{
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('product', 'index')));
}
$product->desc = $this->loadModel('file')->setImgSize($product->desc);
+4
View File
@@ -93,6 +93,7 @@ $lang->product->code = "{$lang->productCommon}代號";
$lang->product->line = "{$lang->productCommon}綫";
$lang->product->lineName = "{$lang->productCommon}綫名稱";
$lang->product->order = '排序';
$lang->product->bind = '是否獨立產品';
$lang->product->type = "{$lang->productCommon}類型";
$lang->product->typeAB = "類型";
$lang->product->status = '狀態';
@@ -102,6 +103,7 @@ $lang->product->manager = '負責人';
$lang->product->PO = "{$lang->productCommon}負責人";
$lang->product->QD = '測試負責人';
$lang->product->RD = '發佈負責人';
$lang->product->feedback = '反饋負責人';
$lang->product->acl = '訪問控制';
$lang->product->whitelist = '白名單';
$lang->product->branch = '所屬%s';
@@ -116,6 +118,8 @@ $lang->product->iterationInfo = '迭代 %s 次';
$lang->product->iterationView = '查看詳情';
$lang->product->createdBy = '由誰創建';
$lang->product->createdDate = '創建日期';
$lang->product->createdVersion = '創建版本';
$lang->product->mailto = '抄送給';
$lang->product->searchStory = '搜索';
$lang->product->assignedToMe = '指給我';
+1 -1
View File
@@ -542,7 +542,7 @@ class productModel extends model
$line->parent = 0;
$line->grade = 1;
$line->name = $this->post->lineName;
$line->root = $product->program;
$line->root = $this->config->systemMode == 'new' ? $product->program : 0;
$line->order = $maxOrder;
$this->dao->insert(TABLE_MODULE)->data($line)->exec();
+1 -1
View File
@@ -29,7 +29,7 @@
<?php endif;?>
<tr>
<th class='w-140px'><?php echo $lang->product->line;?></th>
<?php if($programID):?>
<?php if($config->systemMode == 'classic' or $programID):?>
<td>
<div class='input-group'>
<?php echo html::select("line", $lines, '', "class='form-control hidden line-exist'");?>
+1 -1
View File
@@ -261,7 +261,7 @@ class productplan extends control
if(!$plan)
{
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('product', 'index')));
}
$this->session->set('storyList', $this->app->getURI(true) . '&type=' . 'story', 'product');
+1
View File
@@ -67,6 +67,7 @@ $lang->productplan->children = "子計劃";
$lang->productplan->childrenAB = "子";
$lang->productplan->order = "排序";
$lang->productplan->deleted = "已刪除";
$lang->productplan->mailto = "抄送給";
$lang->productplan->endList[7] = '一星期';
$lang->productplan->endList[14] = '兩星期';
+2 -2
View File
@@ -347,7 +347,7 @@ class productplanModel extends model
->data($plan)
->autoCheck()
->batchCheck($this->config->productplan->create->requiredFields, 'notempty')
->checkIF(!$this->post->future && !empty($_POST['begin']) && !empty($_POST['end']), 'end', 'gt', $plan->begin)
->checkIF(!$this->post->future && !empty($_POST['begin']) && !empty($_POST['end']), 'end', 'ge', $plan->begin)
->exec();
if(!dao::isError())
{
@@ -389,7 +389,7 @@ class productplanModel extends model
->data($plan)
->autoCheck()
->batchCheck($this->config->productplan->edit->requiredFields, 'notempty')
->checkIF(!$this->post->future && !empty($_POST['begin']) && !empty($_POST['end']), 'end', 'gt', $plan->begin)
->checkIF(!$this->post->future && !empty($_POST['begin']) && !empty($_POST['end']), 'end', 'ge', $plan->begin)
->where('id')->eq((int)$planID)
->exec();
if(!dao::isError())
+1 -1
View File
@@ -85,7 +85,7 @@ $lang->program->beginGreateChild = "子項目集的最小開始日期:%s,
$lang->program->endLetterChild = "子項目的最大完成日期:%s,父項目的完成日期不能小於子項目的最大完成日期";
$lang->program->closeErrorMessage = '存在子項目集或項目為未關閉狀態';
$lang->program->hasChildren = '該項目集有子項目集或項目存在,不能刪除。';
$lang->program->hasChildren = '該項目集有產品存在,不能刪除。';
$lang->program->hasProduct = '該項目集有產品存在,不能刪除。';
$lang->program->confirmDelete = "您確定要刪除嗎?";
$lang->program->readjustTime = '重新調整項目集起止時間';
$lang->program->accessDenied = '你無權訪問該項目集';
+12 -8
View File
@@ -1247,9 +1247,13 @@ class programModel extends model
$hour = (object)$emptyHour;
foreach($projectTasks as $task)
{
$hour->totalConsumed += $task->consumed;
if(isset($executions[$task->execution])) $hour->totalEstimate += $task->estimate;
if($task->status != 'cancel' and $task->status != 'closed' and isset($executions[$task->execution])) $hour->totalLeft += $task->left;
if(isset($executions[$task->execution]))
{
$hour->totalConsumed += $task->consumed;
$hour->totalEstimate += $task->estimate;
if(strpos('cancel,closed', $task->status) !== false) $hour->totalLeft += $task->left;
}
}
$hours[$projectID] = $hour;
}
@@ -1267,11 +1271,11 @@ class programModel extends model
/* Get the number of left tasks. */
if($this->cookie->projectType and $this->cookie->projectType == 'bycard')
{
$leftTasks = $this->dao->select('project,count(*) as tasks')->from(TABLE_TASK)
->where('project')->in($projectKeys)
->andWhere('status')->notIn('cancel,closed')
->andWhere('execution')->in(array_keys($executions))
->groupBy('project')
$leftTasks = $this->dao->select('t2.parent as project, count(*) as tasks')->from(TABLE_TASK)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.execution = t2.id')
->where('t1.execution')->in(array_keys($executions))
->andWhere('t1.status')->notIn('cancel,closed')
->groupBy('t2.parent')
->fetchAll('project');
}
+5 -3
View File
@@ -633,7 +633,7 @@ class project extends control
if(empty($project) || strpos('scrum,waterfall', $project->model) === false)
{
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('project', 'browse')));
}
$this->project->setMenu($projectID);
@@ -1544,10 +1544,12 @@ class project extends control
/* Delete the execution under the project. */
$executionIdList = $this->loadModel('execution')->getByProject($projectID);
$url = $this->createLink('project', 'browse');
if(empty($executionIdList))
{
if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
die(js::reload('parent'));
die(js::locate($url, 'parent'));
}
$this->dao->update(TABLE_EXECUTION)->set('deleted')->eq(1)->where('id')->in(array_keys($executionIdList))->exec();
@@ -1557,7 +1559,7 @@ class project extends control
if($this->viewType == 'json') return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess));
$this->session->set('project', '');
die(js::reload('parent'));
die(js::locate($url, 'parent'));
}
}
+1 -2
View File
@@ -82,7 +82,6 @@ $lang->project->milestone = 'Milestone';
$lang->project->output = 'Output';
$lang->project->path = 'Path';
$lang->project->grade = 'Grade';
$lang->project->statge = '';
$lang->project->version = 'Version';
$lang->project->parentVersion = 'Parent Version';
$lang->project->planDuration = 'Plan Duration';
@@ -90,9 +89,9 @@ $lang->project->realDuration = 'Real Duration';
$lang->project->openedVersion = 'Opened Version';
$lang->project->pri = 'Priority';
$lang->project->openedBy = 'OpenedBy';
$lang->project->openedDate = 'OpenedDate';
$lang->project->lastEditedBy = 'Last EditedBy';
$lang->project->lastEditedDate = 'Last EditedDate';
$lang->project->openedDate = 'OpenedDate';
$lang->project->closedBy = 'ClosedBy';
$lang->project->closedDate = 'ClosedDate';
$lang->project->canceledBy = 'CanceledBy';
+19
View File
@@ -58,6 +58,7 @@ $lang->project->copyTeamTitle = '選擇一個項目團隊來複制';
/* Fields. */
$lang->project->common = '項目';
$lang->project->id = '項目編號';
$lang->project->project = '所屬項目';
$lang->project->stage = '階段';
$lang->project->model = '項目管理方式';
$lang->project->PM = '負責人';
@@ -74,9 +75,23 @@ $lang->project->end = '計劃完成';
$lang->project->status = '狀態';
$lang->project->subStatus = '子狀態';
$lang->project->type = '項目類型';
$lang->project->lifetime = '項目周期';
$lang->project->attribute = '階段類型';
$lang->project->percent = '工作量占比';
$lang->project->milestone = '里程碑';
$lang->project->output = '輸出';
$lang->project->path = '路徑';
$lang->project->grade = '層級';
$lang->project->version = '版本';
$lang->project->parentVersion = '父版本';
$lang->project->planDuration = '計劃周期天數';
$lang->project->realDuration = '實際周期天數';
$lang->project->openedVersion = '創建版本';
$lang->project->pri = '優先順序';
$lang->project->openedBy = '由誰創建';
$lang->project->openedDate = '創建日期';
$lang->project->lastEditedBy = '最後編輯人';
$lang->project->lastEditedDate = '最後編輯日期';
$lang->project->closedBy = '由誰關閉';
$lang->project->closedDate = '關閉日期';
$lang->project->canceledBy = '由誰取消';
@@ -132,7 +147,11 @@ $lang->project->longTime = '長期';
$lang->project->future = '待定';
$lang->project->moreProject = '更多項目';
$lang->project->days = '可用工作日';
$lang->project->mailto = '抄送給';
$lang->project->etc = "等";
$lang->project->product = '所屬產品';
$lang->project->branch = '所屬分支';
$lang->project->plan = '所屬計劃';
/* Project Kanban. */
$lang->project->typeList = array();
+19 -26
View File
@@ -124,7 +124,7 @@ class projectModel extends model
if(!isset($projects[$this->session->project]))
{
$this->session->set('project', key($projects), $this->app->tab);
if($projectID && strpos(",{$this->app->user->view->projects},", ",{$this->session->project},") === false) $this->accessDenied();
if($projectID and strpos(",{$this->app->user->view->projects},", ",{$this->session->project},") === false and !empty($projects)) $this->accessDenied();
}
/* Reset program priv. */
@@ -213,10 +213,11 @@ class projectModel extends model
->groupBy('root')
->fetchAll('root');
$estimates = $this->dao->select('project, sum(estimate) as estimate')->from(TABLE_TASK)
->where('project')->in($projectIdList)
->andWhere('deleted')->eq(0)
->andWhere('parent')->lt(1)
$estimates = $this->dao->select('t2.parent as project, sum(estimate) as estimate')->from(TABLE_TASK)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.execution = t2.id')
->where('t2.parent')->in($projectIdList)
->andWhere('t1.deleted')->eq(0)
->andWhere('t1.parent')->lt(1)
->groupBy('project')
->fetchAll('project');
@@ -283,26 +284,20 @@ class projectModel extends model
->andWhere('type')->eq('project')
->groupBy('root')->fetchPairs();
$executionIdList = $this->dao->select('id')->from(TABLE_PROJECT)
->where('parent')->in($projectIdList)
->andWhere('deleted')->eq(0)
->fetchPairs();
$hours = $this->dao->select('project,
sum(consumed) as consumed,
sum(estimate) as estimate')
->from(TABLE_TASK)
->where('execution')->in($executionIdList)
->andWhere('deleted')->eq(0)
->andWhere('parent')->lt(1)
->groupBy('project')
$hours = $this->dao->select('t2.parent as project, sum(t1.consumed) as consumed, sum(t1.estimate) as estimate')->from(TABLE_TASK)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.execution = t2.id')
->where('t2.parent')->in($projectIdList)
->andWhere('t1.deleted')->eq(0)
->andWhere('t1.parent')->lt(1)
->groupBy('t2.parent')
->fetchAll('project');
$leftTasks = $this->dao->select('project, count(*) as tasks')->from(TABLE_TASK)
->where('execution')->in($executionIdList)
->andWhere('deleted')->eq(0)
->andWhere('status')->in('wait,doing,pause')
->groupBy('project')
$leftTasks = $this->dao->select('t2.parent as project, count(*) as tasks')->from(TABLE_TASK)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.execution = t2.id')
->where('t2.parent')->in($projectIdList)
->andWhere('t1.deleted')->eq(0)
->andWhere('t1.status')->in('wait,doing,pause')
->groupBy('t2.parent')
->fetchPairs();
$this->loadModel('product');
@@ -379,21 +374,18 @@ class projectModel extends model
ROUND(SUM(`left`), 2) AS totalLeft')
->from(TABLE_TASK)
->where('execution')->in(array_keys($executions))
->andWhere('project')->eq($projectID)
->andWhere('deleted')->eq(0)
->andWhere('parent')->lt(1)
->fetch();
$totalConsumed = $this->dao->select('ROUND(SUM(consumed), 1) AS totalConsumed')->from(TABLE_TASK)
->where('execution')->in(array_keys($executions))
->andWhere('project')->eq($projectID)
->andWhere('deleted')->eq(0)
->andWhere('parent')->lt(1)
->fetch('totalConsumed');
$closedTotalLeft = $this->dao->select('ROUND(SUM(`left`), 2) AS totalLeft')->from(TABLE_TASK)
->where('execution')->in(array_keys($executions))
->andWhere('project')->eq($projectID)
->andWhere('deleted')->eq(0)
->andWhere('parent')->lt(1)
->andWhere('status')->in('closed,cancel')
@@ -476,6 +468,7 @@ class projectModel extends model
*/
public function getPairsByProgram($programID = 0, $status = 'all')
{
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProjectPairs();
return $this->dao->select('id, name')->from(TABLE_PROJECT)
->where('type')->eq('project')
->andWhere('deleted')->eq(0)
+6
View File
@@ -1,5 +1,11 @@
<?php
/* Field. */
$lang->projectstory->project = "項目ID";
$lang->projectstory->product = "產品ID";
$lang->projectstory->story = "需求ID";
$lang->projectstory->version = "版本";
$lang->projectstory->order = "排序";
$lang->projectstory->common = "項目{$lang->SRCommon}";
$lang->projectstory->index = "{$lang->SRCommon}主頁";
$lang->projectstory->view = "{$lang->SRCommon}詳情";
+1 -1
View File
@@ -160,7 +160,7 @@ class release extends control
{
$releaseID = (int)$releaseID;
$release = $this->release->getByID($releaseID, true);
if(!$release) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$release) die(js::error($this->lang->notFound) . js::locate($this->createLink('product', 'index')));
if($type == 'story') $this->session->set('storyList', $this->app->getURI(true), 'product');
if($type == 'bug' or $type == 'leftBug') $this->session->set('bugList', $this->app->getURI(true), 'qa');
+4
View File
@@ -19,6 +19,10 @@ $lang->repo->deleteBug = '刪除評審';
$lang->repo->addComment = '添加備註';
$lang->repo->editComment = '編輯備註';
$lang->repo->deleteComment = '刪除備註';
$lang->repo->encrypt = '加密方式';
$lang->repo->repo = '代碼庫';
$lang->repo->parent = '父檔案夾';
$lang->repo->branch = '分支';
$lang->repo->browseAction = '瀏覽版本庫';
$lang->repo->createAction = '創建版本庫';
+4
View File
@@ -10,6 +10,10 @@
* @link http://www.zentao.net
*/
$lang->search->common = '搜索';
$lang->search->id = '編號';
$lang->search->editedDate = '編輯時間';
$lang->search->key = '鍵';
$lang->search->value = '值';
$lang->search->reset = '重置';
$lang->search->saveQuery = '保存查詢';
$lang->search->myQuery = '我的查詢';
+1 -1
View File
@@ -907,7 +907,7 @@ class story extends control
$storyID = (int)$storyID;
$story = $this->story->getById($storyID, $version, true);
if(!$story) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$story) die(js::error($this->lang->notFound) . js::locate($this->createLink('product', 'index')));
$story = $this->story->mergeReviewer($story, true);
+1
View File
@@ -98,6 +98,7 @@ $lang->story->source = "來源";
$lang->story->sourceNote = '來源備註';
$lang->story->fromBug = '來源Bug';
$lang->story->title = "{$lang->SRCommon}名稱";
$lang->story->type = "需求類型";
$lang->story->category = "類型";
$lang->story->color = '標題顏色';
$lang->story->toBug = '轉Bug';
+2 -2
View File
@@ -502,11 +502,11 @@
<td class='pd-0'>
<ul class='list-unstyled'>
<?php
$misc = isonlybody() ? "" : "class='iframe' data-width='80%'";
$misc = isonlybody() ? "showinonlybody" : "class='iframe' data-width='80%'";
foreach($cases as $case)
{
echo "<li title='[C]$case->id $case->title'>" . html::a($this->createLink('testcase', 'view', "caseID=$case->id", '', true), "[C] #$case->id $case->title", '',"data-toggle='modal'") . '</li>';
echo "<li title='[C]$case->id $case->title'>" . html::a($this->createLink('testcase', 'view', "caseID=$case->id", '', true), "[C] #$case->id $case->title", '', $misc) . '</li>';
}
?>
</ul>
+2 -4
View File
@@ -85,7 +85,6 @@ class task extends control
$execution = $this->execution->getById($executionID);
$taskLink = $this->createLink('execution', 'browse', "executionID=$executionID&tab=task");
$storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('execution', 'story', "executionID=$executionID");
/* Set menu. */
$this->execution->setMenu($execution->id);
@@ -167,7 +166,7 @@ class task extends control
}
elseif($this->post->after == 'toStoryList')
{
$response['locate'] = $storyLink;
$response['locate'] = $this->createLink('execution', 'story', "executionID=$executionID");
return $this->send($response);
}
else
@@ -280,7 +279,6 @@ class task extends control
{
$taskLink = $this->createLink('execution', 'browse', "executionID=$executionID");
}
$storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('execution', 'story', "executionID=$executionID");
/* Set menu. */
$this->execution->setMenu($execution->id);
@@ -692,7 +690,7 @@ class task extends control
if(!$task)
{
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 = $task->project;
+8 -5
View File
@@ -178,12 +178,15 @@ function setStoryModule()
var link = createLink('story', 'ajaxGetInfo', 'storyID=' + storyID);
$.getJSON(link, function(storyInfo)
{
$('#module').val(storyInfo.moduleID);
$("#module").trigger("chosen:updated");
if(storyInfo)
{
$('#module').val(storyInfo.moduleID);
$("#module").trigger("chosen:updated");
$('#storyEstimate').val(storyInfo.estimate);
$('#storyPri' ).val(storyInfo.pri);
$('#storyDesc' ).val(storyInfo.spec);
$('#storyEstimate').val(storyInfo.estimate);
$('#storyPri' ).val(storyInfo.pri);
$('#storyDesc' ).val(storyInfo.spec);
}
});
}
}
+3 -2
View File
@@ -58,8 +58,8 @@ $lang->task->id = 'ID';
$lang->task->project = 'Project';
$lang->task->execution = $lang->executionCommon;
$lang->task->module = 'Module';
$lang->task->design = 'Design';
$lang->task->moduleAB = 'Module';
$lang->task->design = 'Design';
$lang->task->story = 'Story';
$lang->task->storyAB = 'Story';
$lang->task->storySpec = 'Story Description';
@@ -98,6 +98,7 @@ $lang->task->estimateStartDate = 'Estimate Start Date';
$lang->task->actualStartDate = 'Actual Start Date';
$lang->task->planDuration = 'Plan Duration';
$lang->task->realDuration = 'Real Duration';
$lang->task->version = 'Version';
$lang->task->assign = 'Assign';
$lang->task->assignAction = 'Assign Task';
$lang->task->assignTo = $lang->task->assign;
@@ -105,10 +106,10 @@ $lang->task->batchAssignTo = 'Batch Assign';
$lang->task->assignedTo = 'AssignTo';
$lang->task->assignedToAB = 'AssignedTo';
$lang->task->assignedDate = 'AssignedDate';
$lang->task->activatedDate = 'Activated Date';
$lang->task->openedBy = 'CreatedBy';
$lang->task->openedDate = 'CreatedDate';
$lang->task->openedDateAB = 'CreatedOn';
$lang->task->activatedDate = 'Activated Date';
$lang->task->finishedBy = 'FinishedBy';
$lang->task->finishedByAB = 'FinishedBy';
$lang->task->finishedDate = 'ActualFinished';
+93 -79
View File
@@ -53,85 +53,99 @@ $lang->task->copy = '複製任務';
$lang->task->waitTask = '未開始的任務';
$lang->task->allModule = '所有模組';
$lang->task->common = '任務';
$lang->task->id = '編號';
$lang->task->project = '所屬項目';
$lang->task->execution = '所屬' . $lang->execution->common;
$lang->task->module = '所屬模組';
$lang->task->moduleAB = '模組';
$lang->task->story = "相關{$lang->SRCommon}";
$lang->task->storyAB = $lang->SRCommon;
$lang->task->storySpec = "{$lang->SRCommon}描述";
$lang->task->storyVerify = '驗收標準';
$lang->task->storyVersion = "{$lang->SRCommon}版本";
$lang->task->color = '標題顏色';
$lang->task->name = '任務名稱';
$lang->task->type = '任務類型';
$lang->task->typeAB = '類型';
$lang->task->sync2Gitlab = '同步到Gitlab';
$lang->task->pri = '優先順序';
$lang->task->mailto = '抄送給';
$lang->task->estimate = '最初預計';
$lang->task->estimateAB = '預計';
$lang->task->left = '預計剩餘';
$lang->task->leftAB = '剩餘';
$lang->task->consumed = '總計消耗';
$lang->task->currentConsumed = '本次消耗';
$lang->task->myConsumed = '我的總消耗';
$lang->task->consumedAB = '消耗';
$lang->task->hour = '小時';
$lang->task->consumedThisTime = '工時';
$lang->task->leftThisTime = '剩餘';
$lang->task->datePlan = '日程規劃';
$lang->task->estStarted = '預計開始';
$lang->task->realStarted = '實際開始';
$lang->task->date = '日期';
$lang->task->deadline = '截止日期';
$lang->task->deadlineAB = '截止';
$lang->task->status = '任務狀態';
$lang->task->subStatus = '子狀態';
$lang->task->desc = '任務描述';
$lang->task->assign = '指派';
$lang->task->assignAction = '指派任務';
$lang->task->assignTo = $lang->task->assign;
$lang->task->batchAssignTo = '批量指派';
$lang->task->assignedTo = '指派給';
$lang->task->assignedToAB = '指派給';
$lang->task->assignedDate = '指派日期';
$lang->task->openedBy = '由誰創建';
$lang->task->openedDate = '創建日期';
$lang->task->openedDateAB = '創建';
$lang->task->finishedBy = '由誰完成';
$lang->task->finishedByAB = '完成者';
$lang->task->finishedDate = '實際完成';
$lang->task->finishedDateAB = '實際完成';
$lang->task->finishedList = '完成者列表';
$lang->task->canceledBy = '由誰取消';
$lang->task->canceledDate = '取消時間';
$lang->task->closedBy = '由誰關閉';
$lang->task->closedDate = '關閉時間';
$lang->task->closedReason = '關閉原因';
$lang->task->lastEditedBy = '最後修改';
$lang->task->lastEditedDate = '最後修改日期';
$lang->task->lastEdited = '最後編輯';
$lang->task->recordEstimate = '工時';
$lang->task->editEstimate = '編輯工時';
$lang->task->deleteEstimate = '刪除工時';
$lang->task->colorTag = '顏色標籤';
$lang->task->files = '附件';
$lang->task->hasConsumed = '之前消耗';
$lang->task->multiple = '多人任務';
$lang->task->multipleAB = '多人';
$lang->task->team = '團隊';
$lang->task->transfer = '轉交';
$lang->task->transferTo = '轉交給';
$lang->task->children = '子任務';
$lang->task->childrenAB = '子';
$lang->task->parent = '父任務';
$lang->task->parentAB = '父';
$lang->task->lblPri = 'P';
$lang->task->lblHour = '(h)';
$lang->task->lblTestStory = "測試{$lang->SRCommon}";
$lang->task->common = '任務';
$lang->task->id = '編號';
$lang->task->project = '所屬項目';
$lang->task->execution = '所屬' . $lang->execution->common;
$lang->task->module = '所屬模組';
$lang->task->moduleAB = '模組';
$lang->task->design = '相關設計';
$lang->task->story = "相關{$lang->SRCommon}";
$lang->task->storyAB = $lang->SRCommon;
$lang->task->storySpec = "{$lang->SRCommon}描述";
$lang->task->storyVerify = '驗收標準';
$lang->task->storyVersion = "{$lang->SRCommon}版本";
$lang->task->designVersion = "設計版本";
$lang->task->color = '標題顏色';
$lang->task->name = '任務名稱';
$lang->task->type = '任務類型';
$lang->task->typeAB = '類型';
$lang->task->sync2Gitlab = '同步到Gitlab';
$lang->task->pri = '優先順序';
$lang->task->mailto = '抄送給';
$lang->task->estimate = '最初預計';
$lang->task->estimateAB = '預計';
$lang->task->left = '預計剩餘';
$lang->task->leftAB = '剩餘';
$lang->task->consumed = '總計消耗';
$lang->task->currentConsumed = '本次消耗';
$lang->task->myConsumed = '我的總消耗';
$lang->task->consumedAB = '消耗';
$lang->task->hour = '小時';
$lang->task->consumedThisTime = '工時';
$lang->task->leftThisTime = '剩餘';
$lang->task->datePlan = '日程規劃';
$lang->task->estStarted = '預計開始';
$lang->task->realStarted = '實際開始';
$lang->task->date = '日期';
$lang->task->deadline = '截止日期';
$lang->task->deadlineAB = '截止';
$lang->task->status = '任務狀態';
$lang->task->subStatus = '子狀態';
$lang->task->desc = '任務描述';
$lang->task->version = '版本';
$lang->task->estimateStartDate = '預計開始日期';
$lang->task->actualStartDate = '實際開始日期';
$lang->task->planDuration = '計劃持續天數';
$lang->task->realDuration = '實際持續天數';
$lang->task->version = '版本';
$lang->task->assign = '指派';
$lang->task->assignAction = '指派任務';
$lang->task->assignTo = $lang->task->assign;
$lang->task->batchAssignTo = '批量指派';
$lang->task->assignedTo = '指派給';
$lang->task->assignedToAB = '指派給';
$lang->task->assignedDate = '指派日期';
$lang->task->openedBy = '由誰創建';
$lang->task->openedDate = '創建日期';
$lang->task->openedDateAB = '創建';
$lang->task->activatedDate = '激活日期';
$lang->task->finishedBy = '由誰完成';
$lang->task->finishedByAB = '完成者';
$lang->task->finishedDate = '實際完成';
$lang->task->finishedDateAB = '實際完成';
$lang->task->finishedList = '完成者列表';
$lang->task->canceledBy = '由誰取消';
$lang->task->canceledDate = '取消時間';
$lang->task->closedBy = '由誰關閉';
$lang->task->closedDate = '關閉時間';
$lang->task->closedReason = '關閉原因';
$lang->task->lastEditedBy = '最後修改';
$lang->task->lastEditedDate = '最後修改日期';
$lang->task->lastEdited = '最後編輯';
$lang->task->recordEstimate = '工時';
$lang->task->editEstimate = '編輯工時';
$lang->task->deleteEstimate = '刪除工時';
$lang->task->colorTag = '顏色標籤';
$lang->task->files = '附件';
$lang->task->hasConsumed = '之前消耗';
$lang->task->multiple = '多人任務';
$lang->task->multipleAB = '多人';
$lang->task->team = '團隊';
$lang->task->transfer = '轉交';
$lang->task->transferTo = '轉交給';
$lang->task->children = '子任務';
$lang->task->childrenAB = '子';
$lang->task->parent = '父任務';
$lang->task->parentAB = '父';
$lang->task->lblPri = 'P';
$lang->task->lblHour = '(h)';
$lang->task->lblTestStory = "測試{$lang->SRCommon}";
/* Fields of zt_taskestimate. */
$lang->task->task = '任務';
$lang->task->account = '用戶名';
$lang->task->work = '工作內容';
$lang->task->recordEstimateAction = '添加工時';
+1 -1
View File
@@ -2495,7 +2495,7 @@ class taskModel extends model
/* Delayed or not?. */
if($task->status !== 'done' and $task->status !== 'cancel' and $task->status != 'closed')
{
if(!helper::isZeroDate($task->deadline))
if(!empty($taks->deadline) and !helper::isZeroDate($task->deadline))
{
$delay = helper::diffDate($today, $task->deadline);
if($delay > 0) $task->delay = $delay;
+1 -1
View File
@@ -614,7 +614,7 @@ class testcase extends control
if(!$case)
{
if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'fail', 'message' => '404 Not found'));
die(js::error($this->lang->notFound) . js::locate('back'));
die(js::error($this->lang->notFound) . js::locate($this->createLink('qa', 'index')));
}
if($case->auto == 'unit')
{
+9 -4
View File
@@ -1,15 +1,20 @@
/* Set the story priview link. */
function setPreview()
{
if(!$('#story').val())
if($('#story').val() == 0)
{
$('#preview').addClass('hidden');
}
else
{
storyLink = createLink('story', 'view', "storyID=" + $('#story').val());
var concat = config.requestType != 'GET' ? '?' : '&';
storyLink = storyLink + concat + 'onlybody=yes';
if(!isonlybody)
{
var concat = config.requestType != 'GET' ? '?' : '&';
storyLink = storyLink + concat + 'onlybody=yes';
}
$('#preview').addClass('iframe');
$('#preview').removeClass('hidden');
$('#preview').attr('href', storyLink);
}
@@ -131,7 +136,7 @@ $(function()
else if(e.keyCode == 13) selectItem($selected);
});
$("#preview").modalTrigger({width:960, type:'iframe'});
if(!isonlybody) $("#preview").modalTrigger({width:960, type:'iframe'});
$('[data-toggle=tooltip]').tooltip();
+16
View File
@@ -11,7 +11,14 @@
*/
$lang->testcase->id = '用例編號';
$lang->testcase->product = "所屬{$lang->productCommon}";
$lang->testcase->project = '所屬項目';
$lang->testcase->execution = '所屬執行';
$lang->testcase->module = '所屬模組';
$lang->testcase->auto = '自動化測試用例';
$lang->testcase->frame = '自動化測試框架';
$lang->testcase->howRun = '測試方式';
$lang->testcase->frequency = '使用頻率';
$lang->testcase->path = '路徑';
$lang->testcase->lib = "所屬庫";
$lang->testcase->branch = "分支/平台";
$lang->testcase->moduleAB = '模組';
@@ -37,6 +44,10 @@ $lang->testcase->linkCase = '相關用例';
$lang->testcase->linkCases = '關聯相關用例';
$lang->testcase->unlinkCase = '移除相關用例';
$lang->testcase->stage = '適用階段';
$lang->testcase->scriptedBy = '腳本由誰創建';
$lang->testcase->scriptedDate = '腳本創建日期';
$lang->testcase->scriptStatus = '腳本狀態';
$lang->testcase->scriptLocation = '腳本地址';
$lang->testcase->reviewedBy = '由誰評審';
$lang->testcase->reviewedDate = '評審時間';
$lang->testcase->reviewResult = '評審結果';
@@ -54,6 +65,7 @@ $lang->testcase->assignedTo = '指派給';
$lang->testcase->colorTag = '顏色標籤';
$lang->testcase->lastRunResult = '結果';
$lang->testcase->desc = '步驟';
$lang->testcase->parent = '上級步驟';
$lang->testcase->xml = 'XML';
$lang->testcase->expect = '預期';
$lang->testcase->allProduct = "所有{$lang->productCommon}";
@@ -73,8 +85,12 @@ $lang->testcase->sync = '同步';
$lang->testcase->ignore = '忽略';
$lang->testcase->fromTesttask = '來自測試單用例';
$lang->testcase->fromCaselib = '來自用例庫用例';
$lang->testcase->fromCaseID = '用例來源ID';
$lang->testcase->fromCaseVersion = '用例來源版本';
$lang->testcase->mailto = '抄送給';
$lang->testcase->deleted = '是否刪除';
$lang->testcase->browseUnits = '單元測試';
$lang->testcase->suite = '套件';
$lang->case = $lang->testcase; // 用於DAO檢查時使用。因為case是系統關鍵字,所以無法定義該模組為case,只能使用testcase,但表還是使用的case。
+3 -1
View File
@@ -15,6 +15,7 @@
<?php js::set('lblDelete', $lang->testcase->deleteStep);?>
<?php js::set('lblBefore', $lang->testcase->insertBefore);?>
<?php js::set('lblAfter', $lang->testcase->insertAfter);?>
<?php js::set('isonlybody', isonlybody());?>
<div id='mainContent' class='main-content'>
<div class='center-block'>
<div class='main-header'>
@@ -80,7 +81,8 @@
<?php if($storyID == 0): ?>
<a href='' id='preview' class='btn hidden'><?php echo $lang->preview;?></a>
<?php else:?>
<?php echo html::a($this->createLink('story', 'view', "storyID=$storyID", '', true), $lang->preview, '', "class='btn' id='preview'");?>
<?php $class = isonlybody() ? "showinonlybody" : "iframe";?>
<?php echo html::a($this->createLink('story', 'view', "storyID=$storyID", '', true), $lang->preview, '', "class='btn $class' id='preview'");?>
<?php endif;?>
</span>
</div>
+1 -1
View File
@@ -479,7 +479,7 @@ class testreport extends control
{
$reportID = (int)$reportID;
$report = $this->testreport->getById($reportID);
if(!$report) die(js::error($this->lang->notFound) . js::locate('back'));
if(!$report) die(js::error($this->lang->notFound) . js::locate($this->createLink('qa', 'index')));
$this->session->project = $report->project;
$browseLink = '';
+1
View File
@@ -1,5 +1,6 @@
<?php
$lang->testreport->common = '測試報告';
$lang->testreport->id = '編號';
$lang->testreport->browse = '報告列表';
$lang->testreport->create = '創建報告';
$lang->testreport->edit = '編輯報告';
-1
View File
@@ -26,7 +26,6 @@ $lang->testsuite->successSaved = 'Saved';
$lang->testsuite->id = 'ID';
$lang->testsuite->common = 'Test Suite';
$lang->testsuite->project = 'Project';
$lang->testsuite->suite = 'Test Suite';
$lang->testsuite->product = $lang->productCommon;
$lang->testsuite->name = 'Name';
$lang->testsuite->type = 'Type';
+2
View File
@@ -25,10 +25,12 @@ $lang->testsuite->successSaved = '保存成功';
$lang->testsuite->id = '編號';
$lang->testsuite->common = '套件';
$lang->testsuite->project = '所屬項目';
$lang->testsuite->product = '所屬' . $lang->productCommon;
$lang->testsuite->name = '名稱';
$lang->testsuite->type = '類型';
$lang->testsuite->desc = '描述';
$lang->testsuite->mailto = '抄送給';
$lang->testsuite->author = '訪問權限';
$lang->testsuite->addedBy = '由誰創建';
$lang->testsuite->addedDate = '創建時間';
+1 -1
View File
@@ -290,7 +290,7 @@ class testtask extends control
if(!$task)
{
if(defined('RUN_MODE') && RUN_MODE == 'api') return $this->send(array('status' => 'fail', 'message' => '404 Not found'));
die(js::error($this->lang->notFound) . js::locate('back'));
die(js::error($this->lang->notFound) . js::locate($this->createLink('qa', 'index')));
}
/* When the session changes, you need to query the related products again. */
+6
View File
@@ -47,6 +47,12 @@ $lang->testtask->all = "全部" . $lang->productCommon;
$lang->testtask->allTasks = '所有測試';
$lang->testtask->collapseAll = '全部摺疊';
$lang->testtask->expandAll = '全部展開';
$lang->testtask->auto = '自動化';
$lang->testtask->task = '測試單';
$lang->testtask->run = '執行編號';
$lang->testtask->job = '構建任務';
$lang->testtask->compile = '構建';
$lang->testtask->duration = '持續時間';
$lang->testtask->viewAction = "測試單概況";
$lang->testtask->casesAction = '查看用例';
+1
View File
@@ -56,6 +56,7 @@ $lang->todo->pri = '優先順序';
$lang->todo->name = '待辦名稱';
$lang->todo->status = '狀態';
$lang->todo->desc = '描述';
$lang->todo->config = '配置';
$lang->todo->private = '私人事務';
$lang->todo->cycleDay = '天';
$lang->todo->cycleWeek = '周';
+7 -7
View File
@@ -52,25 +52,25 @@ $lang->tutorial->tasks['createStory'] = array('title' => "創建{$lang->
$lang->tutorial->tasks['createStory']['nav'] = array('app' => 'product', 'module' => 'story', 'method' => 'create', 'menuModule' => 'story', 'menu' => '#productTableList>tr:not(.has-nest-child):first>.c-name>a,#heading>.header-btn:first,#navbar>.nav>li[data-id="all"],.create-story-btn', 'target' => '.create-story-btn', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => "提{$lang->SRCommon}");
$lang->tutorial->tasks['createStory']['desc'] = "<p>在系統創建一個新的{$lang->SRCommon}:</p><ul><li data-target='nav'>打開 <span class='task-nav'>{$lang->productCommon} <i class='icon icon-angle-right'></i> {$lang->SRCommon} <i class='icon icon-angle-right'></i> 提{$lang->SRCommon}</span> 頁面;</li><li data-target='form'>在{$lang->productCommon}表單中填寫要創建的{$lang->SRCommon}信息;</li><li data-target='submit'>保存{$lang->SRCommon}信息。</li></ul>";
$lang->tutorial->tasks['createProject'] = array('title' => '創建' . $lang->projectCommon);
$lang->tutorial->tasks['createProject'] = array('title' => '創建項目');
$lang->tutorial->tasks['createProject']['mode'] = 'new';
$lang->tutorial->tasks['createProject']['nav'] = array('app' => 'project', 'module' => 'project', 'method' => 'create', 'menuModule' => 'browse', 'menu' => '', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-project-btn', 'targetPageName' => '添加' . $lang->projectCommon);
$lang->tutorial->tasks['createProject']['desc'] = "<p>在系統創建一個新的{$lang->projectCommon}:</p><ul><li data-target='nav'>打開 <span class='task-nav'> {$lang->projectCommon} <i class='icon icon-angle-right'></i> {$lang->projectCommon}列表 <i class='icon icon-angle-right'></i> 創建{$lang->projectCommon}</span> 頁面;</li><li data-target='form'>在{$lang->projectCommon}表單中填寫要創建的{$lang->projectCommon}信息;</li><li data-target='submit'>保存{$lang->projectCommon}信息。</li></ul>";
$lang->tutorial->tasks['createProject']['nav'] = array('app' => 'project', 'module' => 'project', 'method' => 'create', 'menuModule' => 'browse', 'menu' => '', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-project-btn', 'targetPageName' => '添加項目');
$lang->tutorial->tasks['createProject']['desc'] = "<p>在系統創建一個新的項目:</p><ul><li data-target='nav'>打開 <span class='task-nav'> 項目 <i class='icon icon-angle-right'></i> 項目列表 <i class='icon icon-angle-right'></i> 創建項目</span> 頁面;</li><li data-target='form'>在項目表單中填寫要創建的項目信息;</li><li data-target='submit'>保存項目信息。</li></ul>";
$lang->tutorial->tasks['manageTeam'] = array('title' => "管理{$lang->projectCommon}團隊");
$lang->tutorial->tasks['manageTeam'] = array('title' => "管理項目團隊");
$lang->tutorial->tasks['manageTeam']['mode'] = 'new';
$lang->tutorial->tasks['manageTeam']['nav'] = array('app' => 'project', 'module' => 'project', 'method' => 'managemembers', 'menuModule' => '', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectTableList>tr:first>.c-name a,#navbar>.nav>li[data-id="settings"],#subNavbar>.nav>li[data-id="members"],.manage-team-btn', 'target' => '.manage-team-btn', 'vars' => 'projectID=0', 'form' => '#teamForm', 'requiredFields' => 'accounts1', 'submit' => '#submit', 'targetPageName' => '團隊管理');
$lang->tutorial->tasks['manageTeam']['desc'] = "<p>管理{$lang->projectCommon}團隊成員:</p><ul><li data-target='nav'>打開 <span class='task-nav'> {$lang->projectCommon} <i class='icon icon-angle-right'></i> 設置 <i class='icon icon-angle-right'></i> 團隊 <i class='icon icon-angle-right'></i> 團隊管理</span> 頁面;</li><li data-target='form'>選擇要加入{$lang->projectCommon}團隊的成員;</li><li data-target='submit'>保存團隊成員信息。</li></ul>";
$lang->tutorial->tasks['manageTeam']['desc'] = "<p>管理項目團隊成員:</p><ul><li data-target='nav'>打開 <span class='task-nav'> 項目 <i class='icon icon-angle-right'></i> 設置 <i class='icon icon-angle-right'></i> 團隊 <i class='icon icon-angle-right'></i> 團隊管理</span> 頁面;</li><li data-target='form'>選擇要加入項目團隊的成員;</li><li data-target='submit'>保存團隊成員信息。</li></ul>";
$lang->tutorial->tasks['createProjectExecution'] = array('title' => '添加' . $lang->executionCommon);
$lang->tutorial->tasks['createProjectExecution']['mode'] = 'new';
$lang->tutorial->tasks['createProjectExecution']['nav'] = array('app' => 'project', 'module' => 'execution', 'method' => 'create', 'menuModule' => 'browse', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectTableList>tr:first>.c-name a,#navbar>.nav>li[data-id="execution"],.create-execution-btn', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-execution-btn', 'targetPageName' => '添加' . $lang->executionCommon);
$lang->tutorial->tasks['createProjectExecution']['desc'] = "<p>在系統創建一個新的{$lang->executionCommon}:</p><ul><li data-target='nav'>打開 <span class='task-nav'> {$lang->projectCommon} <i class='icon icon-angle-right'></i> {$lang->executionCommon} <i class='icon icon-angle-right'></i> 添加{$lang->executionCommon}</span> 頁面;</li><li data-target='form'>在{$lang->executionCommon}表單中填寫要創建的{$lang->executionCommon}信息;</li><li data-target='submit'>保存{$lang->executionCommon}信息。</li></ul>";
$lang->tutorial->tasks['createProjectExecution']['desc'] = "<p>在系統創建一個新的{$lang->executionCommon}:</p><ul><li data-target='nav'>打開 <span class='task-nav'> 項目 <i class='icon icon-angle-right'></i> {$lang->executionCommon} <i class='icon icon-angle-right'></i> 添加{$lang->executionCommon}</span> 頁面;</li><li data-target='form'>在{$lang->executionCommon}表單中填寫要創建的{$lang->executionCommon}信息;</li><li data-target='submit'>保存{$lang->executionCommon}信息。</li></ul>";
$lang->tutorial->tasks['createExecution'] = array('title' => '創建' . $lang->executionCommon);
$lang->tutorial->tasks['createExecution']['mode'] = 'classic';
$lang->tutorial->tasks['createExecution']['nav'] = array('app' => 'execution', 'module' => 'execution', 'method' => 'create', 'menuModule' => 'browse', 'menu' => '#heading>.header-btn:first,#navbar>.nav>li[data-id="all"],.create-execution-btn', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-execution-btn', 'targetPageName' => '添加' . $lang->executionCommon);
$lang->tutorial->tasks['createExecution']['desc'] = "<p>在系統創建一個新的{$lang->executionCommon}:</p><ul><li data-target='nav'>打開 <span class='task-nav'> {$lang->projectCommon} <i class='icon icon-angle-right'></i> {$lang->executionCommon}列表 <i class='icon icon-angle-right'></i> 添加{$lang->executionCommon}</span> 頁面;</li><li data-target='form'>在表單中填寫要創建的{$lang->executionCommon}信息;</li><li data-target='submit'>保存{$lang->executionCommon}信息。</li></ul>";
$lang->tutorial->tasks['createExecution']['desc'] = "<p>在系統創建一個新的{$lang->executionCommon}:</p><ul><li data-target='nav'>打開 <span class='task-nav'> 項目 <i class='icon icon-angle-right'></i> {$lang->executionCommon}列表 <i class='icon icon-angle-right'></i> 添加{$lang->executionCommon}</span> 頁面;</li><li data-target='form'>在表單中填寫要創建的{$lang->executionCommon}信息;</li><li data-target='submit'>保存{$lang->executionCommon}信息。</li></ul>";
$lang->tutorial->tasks['manageExecutionTeam'] = array('title' => "管理團隊");
$lang->tutorial->tasks['manageExecutionTeam']['mode'] = 'classic';
+11
View File
@@ -155,6 +155,17 @@ class tutorialModel extends model
return $project;
}
/**
* Get tutorial project pairs.
*
* @access public
* @return array
*/
public function getProjectPairs()
{
return array(2 => 'Test Project');
}
/**
* Get project stats for tutorial
*
+28 -6
View File
@@ -341,7 +341,7 @@ class upgrade extends control
/* When upgrading historical data as a project, handle products that are not linked with the project. */
if(!empty($singleProducts)) $this->upgrade->computeProductAcl($singleProducts, $programID);
}
elseif($type == 'sprint')
elseif($type == 'sprint' or $type == 'noProject')
{
$linkedSprints = $this->post->sprints;
@@ -350,17 +350,22 @@ class upgrade extends control
if(dao::isError()) die(js::error(dao::getError()));
/* Process merged independent projects. */
$productIdList = array();
if($type == 'noProject')
{
$productIdList = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->in($linkedSprints)->fetchPairs();
}
if($_POST['projectType'] == 'execution')
{
/* Use historical projects as execution upgrades. */
$this->upgrade->processMergedData($programID, $projectList, $lineID, array(), $linkedSprints);
$this->upgrade->processMergedData($programID, $projectList, $lineID, $productIdList, $linkedSprints);
}
else
{
/* Use historical projects as project upgrades. */
foreach($linkedSprints as $sprint)
{
$this->upgrade->processMergedData($programID, $projectList[$sprint], $lineID, array(), array($sprint => $sprint));
$this->upgrade->processMergedData($programID, $projectList[$sprint], $lineID, $productIdList, array($sprint => $sprint));
}
}
}
@@ -453,6 +458,7 @@ class upgrade extends control
$this->view->lineGroups = $lineGroups;
$this->view->productGroups = $productGroups;
}
/* Get projects group by product. */
if($type == 'product')
{
@@ -486,7 +492,6 @@ class upgrade extends control
if(empty($noMergedProducts)) $this->locate($this->createLink('upgrade', 'mergeProgram', "type=sprint&programID=0&projectType=$projectType"));
/* Group project by product. */
$productGroups = array();
foreach($noMergedSprints as $sprint)
@@ -501,6 +506,7 @@ class upgrade extends control
$this->view->noMergedProducts = $noMergedProducts;
$this->view->productGroups = $productGroups;
}
/* Get no merged projects than is not linked product. */
if($type == 'sprint')
{
@@ -508,10 +514,26 @@ class upgrade extends control
$projectProducts = $this->dao->select('*')->from(TABLE_PROJECTPRODUCT)->where('project')->in(array_keys($noMergedSprints))->fetchGroup('project', 'product');
foreach($projectProducts as $sprintID => $products) unset($noMergedSprints[$sprintID]);
if(empty($noMergedSprints)) $this->locate($this->createLink('upgrade', 'mergeProgram', "type=moreLink"));
if(empty($noMergedSprints)) $this->locate($this->createLink('upgrade', 'mergeProgram', "type=noProject"));
$this->view->noMergedSprints = $noMergedSprints;
}
/* Get one no merged sprint that link more then two products and no project in the system. */
if($type == 'noProject')
{
$project = $this->dao->select('*')->from(TABLE_PROJECT)->where('type')->eq('project')->fetch();
if($project) $this->locate($this->createLink('upgrade', 'mergeProgram', 'type=moreLink'));
$noMergedSprints = $this->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq(0)->andWhere('path')->eq('')->orderBy('id_desc')->limit(1)->fetchAll('id');
$productPrograms = $this->dao->select('t3.id as id, t3.name as name')->from(TABLE_PROJECTPRODUCT)->alias('t1')
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id')
->leftJoin(TABLE_PROGRAM)->alias('t3')->on('t2.program=t3.id')
->where('t1.project')->eq(key($noMergedSprints))
->fetchPairs();
$this->view->noMergedSprints = $noMergedSprints;
}
/* Get no merged projects that link more then two products. */
if($type == 'moreLink')
{
@@ -549,7 +571,7 @@ class upgrade extends control
$currentProgramID = $programID ? $programID : key($programs);
$this->view->title = $this->lang->upgrade->mergeProgram;
$this->view->programs = $programs;
$this->view->programs = $type == 'noProject' ? $productPrograms : $programs;
$this->view->programID = $programID;
$this->view->projects = array('' => '') + $this->upgrade->getProjectPairsByProgram($currentProgramID);
$this->view->lines = $currentProgramID ? array('' => '') + $this->loadModel('product')->getLinePairs($currentProgramID) : array('' => '');
+9 -1
View File
@@ -522,6 +522,7 @@ $(function()
setProgramBegin(programBegin);
setProgramEnd(programEnd);
setProjectPM();
toggleProgram();
hiddenProject();
})
@@ -638,7 +639,7 @@ function getLineByProgram()
function toggleProgram(obj)
{
var $obj = $(obj);
if($obj.length == 0) return false;
if($obj.length == 0 && type != 'noProject') return false;
var $programs = $obj.closest('table').find('#programs');
if($obj.prop('checked'))
@@ -647,6 +648,8 @@ function toggleProgram(obj)
$('form .pgm-exist').addClass('hidden');
$programs.attr('disabled', 'disabled');
$('.programStatus').show();
$('#programStatus').val('wait');
$('#programStatus').removeAttr('disabled').trigger("chosen:updated");
$('form #newProject0').prop('checked', true);
$('form #newLine0').prop('checked', true);
@@ -658,6 +661,7 @@ function toggleProgram(obj)
$('form .pgm-exist').removeClass('hidden');
$('form .pgm-no-exist').addClass('hidden');
$('.programStatus').hide();
$('#programStatus').attr('disabled', 'disabled');
if(!$('#newProgram0').prop('disabled'))
{
@@ -827,12 +831,16 @@ function setProgramByProduct(product)
{
$(this).prop('checked', false);
$(this).attr('disabled', 'disabled');
$('#checkAllProducts').attr('disabled', 'disabled');
$('#checkAllProjects').attr('disabled', 'disabled');
$('[data-product=' + currentProductID + ']').prop('checked', false);
$('[data-product=' + currentProductID + ']').attr('disabled', 'disabled');
}
else if($(':checkbox:checked[data-programid=' + programID + ']').length == 0)
{
$(this).removeAttr('disabled');
$('#checkAllProducts').removeAttr('disabled');
$('#checkAllProjects').removeAttr('disabled');
$('[data-product=' + currentProductID + ']').removeAttr('disabled');
}
}
+1
View File
@@ -143,3 +143,4 @@ $lang->upgrade->fromVersions['15_0_3'] = '15.0.3';
$lang->upgrade->fromVersions['15_2'] = '15.2';
$lang->upgrade->fromVersions['15_3'] = '15.3';
$lang->upgrade->fromVersions['15_4'] = '15.4';
$lang->upgrade->fromVersions['15_5'] = '15.5';
+1
View File
@@ -923,6 +923,7 @@ class upgradeModel extends model
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan4.4.sql';
$confirmContent .= file_get_contents($xuanxuanSql);
}
case '15_5': $confirmContent .= file_get_contents($this->getUpgradeFile('15.5'));
}
return str_replace('zt_', $this->config->db->prefix, $confirmContent);
}
@@ -14,6 +14,7 @@
<td class='required'>
<div class='input-group'>
<?php echo html::select("programs", $programs, $programID, "class='form-control hidden pgm-exist' onchange='getProjectByProgram(this)'");?>
<?php if($type != 'noProject'):?>
<?php echo html::input("programName", '', "class='form-control pgm-no-exist'");?>
<span class='input-group-addon'>
<div class="checkbox-primary">
@@ -21,6 +22,7 @@
<label for="newProgram0"><?php echo $lang->upgrade->newProgram;?></label>
</div>
</span>
<?php endif;?>
</div>
<?php echo html::hidden('programID', '');?>
</td>
+1 -1
View File
@@ -1,7 +1,7 @@
<div class='alert alert-info'>
<?php
printf($lang->upgrade->mergeSummary, $noMergedProductCount, $noMergedSprintCount);
echo '<br />' . $lang->upgrade->mergeByProject;
if($type == 'moreLink') echo '<br />' . $lang->upgrade->mergeByProject;
?>
</div>
<div class='main-row'>
+2 -1
View File
@@ -12,6 +12,7 @@
?>
<?php include '../../common/view/header.lite.html.php';?>
<?php js::set('weekend', $config->execution->weekend);?>
<?php js::set('type', $type);?>
<div class='container'>
<form method='post' target='hiddenwin'>
<div class='modal-dialog'>
@@ -23,7 +24,7 @@
<?php include './mergebyline.html.php';?>
<?php elseif($type == 'product'):?>
<?php include './mergebyproduct.html.php';?>
<?php elseif($type == 'sprint'):?>
<?php elseif($type == 'sprint' or $type == 'noProject'):?>
<?php include './mergebysprint.html.php';?>
<?php elseif($type == 'moreLink'):?>
<div class='alert alert-info'>
+1 -1
View File
@@ -60,7 +60,7 @@ class user extends control
{
$userID = (int)$userID;
$user = $this->user->getById($userID, 'id');
if(empty($user)) die(js::error($this->lang->notFound) . js::locate('back'));
if(empty($user)) die(js::error($this->lang->notFound) . js::locate($this->createLink('my', 'team')));
if($user->deleted == 1) die(js::error($this->lang->user->noticeHasDeleted) . js::locate('back'));
/* Set thie url to session. */
+15
View File
@@ -57,6 +57,21 @@ $lang->user->cropAvatar = '剪切頭像';
$lang->user->cropAvatarTip = '拖拽選框來選擇頭像剪切範圍';
$lang->user->cropImageTip = '所使用的頭像圖片過小,建議圖片大小至少為 48x48,當前圖片大小為 %s';
$lang->user->captcha = '驗證碼';
$lang->user->avatar = '用戶頭像';
$lang->user->birthday = '生日';
$lang->user->nature = '性格特徵';
$lang->user->analysis = '影響分析';
$lang->user->strategy = '應對策略';
$lang->user->fails = '失敗次數';
$lang->user->locked = '鎖住日期';
$lang->user->scoreLevel = '積分等級';
$lang->user->clientStatus = '登錄狀態';
$lang->user->clientLang = '客戶端語言';
$lang->user->programs = '項目集';
$lang->user->products = $lang->productCommon;
$lang->user->projects = '項目';
$lang->user->sprints = $lang->execution->common;
$lang->user->identity = '身份';
$lang->user->legendBasic = '基本資料';
$lang->user->legendContribution = '個人貢獻';

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