ZenTao has two managment modes in version 15.0 and up. One is the classic management mode, providing two core features, Product and Project; the other is a new project management mode, with Program and Execution added. The following is an introduction to the new mode:
-
-
Program
-
Program is used to manage a group of products and projects, and the company executives or PMO can use it for strategic planning.
+
Product
Product is used to subdivide the company's strategy into requirements that can be developed, and the product manager can use it to make release plans.
@@ -202,6 +200,7 @@ $lang->install->cronList['moduleName=todo&methodName=createCycle'] = 'Creat
$lang->install->cronList['moduleName=ci&methodName=initQueue'] = 'Create recurring tasks';
$lang->install->cronList['moduleName=ci&methodName=checkCompileStatus'] = 'Synchronize Jenkins Status';
$lang->install->cronList['moduleName=ci&methodName=exec'] = 'Execute Jenkins';
+$lang->install->cronList['moduleName=mr&methodName=syncMR'] = 'Synchronize GitLab merge request';
$lang->install->success = "Installed!";
$lang->install->login = 'ZenTao Login';
diff --git a/module/install/lang/zh-tw.php b/module/install/lang/zh-tw.php
index e49d561c57..fef154d534 100644
--- a/module/install/lang/zh-tw.php
+++ b/module/install/lang/zh-tw.php
@@ -40,31 +40,31 @@ $lang->install->links = <<%s。
EOT;
-global $config;
-$lang->install->introduction = "禪道{$this->config->version}版本功能介紹";
+$lang->install->introduction = "禪道15系列功能介紹";
$lang->install->howToUse = "請問您計劃如何使用禪道的新版本呢";
+$lang->install->guideVideo = 'https://dl.cnezsoft.com/vedio/program0716.mp4';
$lang->install->introductionContent = <<
- 尊敬的用戶您好,歡迎您使用禪道%s。
- 禪道%s提供了兩種使用模式, 一種是經典管理模式,功能較為精簡,提供了產品和項目兩個核心功能;另一種是全新項目集管理模式,具備所有核心功能。如下是相關功能介紹,您可以根據需要選擇使用的模式。
+ 尊敬的用戶您好,歡迎您使用禪道項目管理系統。
+ 禪道自15系列開始提供了兩種使用模式,一種是經典管理模式,功能較為精簡,主要提供了產品和項目兩個核心功能;另一種是全新項目集管理模式,增加了項目集和執行的概念。下面是全新項目集管理模式的介紹:
-
項目集
項目集是一組相互關聯,且被協調管理的項目集合,可以進行多層級管理,屬於戰略層面的管理。
+
項目集
項目集用來管理一組相關的產品和項目,公司高層或者PMO可以用來做戰略規劃。
產品
-
產品是定義做什麼,主要是管理需求,通過產品可以管理用戶需求、研發需求、計劃以及發佈。
+
產品用來將公司的戰略細分為可以進行研發的需求,產品經理可以用來做產品的發佈計劃。
項目
-
項目是定義如何做,主要是在規定的時間、預算和質量目標範圍內完成項目的各種工作,屬於戰役層面的管理。
+
項目用來組織相應的人力進行研發,做好項目過程的跟蹤管理,多快好省地完成項目。
執行
-
我們把一個項目下的多個迭代/衝刺或階段統稱為執行,通過執行去完成項目的任務,屬於戰鬥層面的管理。
+
執行用來做任務的分解、指派和跟蹤,保證項目目標可以落實到人來執行。
EOT;
@@ -200,6 +200,7 @@ $lang->install->cronList['moduleName=todo&methodName=createCycle'] = '生
$lang->install->cronList['moduleName=ci&methodName=initQueue'] = '創建周期性任務';
$lang->install->cronList['moduleName=ci&methodName=checkCompileStatus'] = '同步Jenkins任務狀態';
$lang->install->cronList['moduleName=ci&methodName=exec'] = '執行Jenkins任務';
+$lang->install->cronList['moduleName=mr&methodName=syncMR'] = '定時同步GitLabMR信息';
$lang->install->success = "安裝成功";
$lang->install->login = '登錄禪道管理系統';
diff --git a/module/job/lang/zh-tw.php b/module/job/lang/zh-tw.php
index e42281a78e..511f29f58a 100644
--- a/module/job/lang/zh-tw.php
+++ b/module/job/lang/zh-tw.php
@@ -86,3 +86,4 @@ $lang->job->pipelineVariables = "變數";
$lang->job->pipelineVariablesKeyPlaceHolder = "輸入變數的名稱";
$lang->job->pipelineVariablesValuePlaceHolder = "輸入變數的值";
$lang->job->pipelineVariablesTips = "指定要在此次運行中使用的變數值。CI/CD設置中指定的值將用作預設值。";
+$lang->job->setReferenceTips = "在執行構建前,請先設置代碼庫的分支信息。";
diff --git a/module/mr/lang/zh-tw.php b/module/mr/lang/zh-tw.php
new file mode 100644
index 0000000000..e858cc8217
--- /dev/null
+++ b/module/mr/lang/zh-tw.php
@@ -0,0 +1,113 @@
+mr = new stdclass;
+$lang->mr->common = "合併請求";
+$lang->mr->create = "創建{$lang->mr->common}";
+$lang->mr->browse = "瀏覽{$lang->mr->common}";
+$lang->mr->list = $lang->mr->browse;
+$lang->mr->edit = "編輯{$lang->mr->common}";
+$lang->mr->delete = "刪除{$lang->mr->common}";
+$lang->mr->view = "{$lang->mr->common}詳情";
+$lang->mr->accept = "合併請求";
+$lang->mr->source = '源項目分支';
+$lang->mr->target = '目標項目分支';
+$lang->mr->viewDiff = '比對代碼';
+$lang->mr->viewInGitlab = '在GitLab查看';
+
+$lang->mr->id = 'ID';
+$lang->mr->mriid = "MR原始ID";
+$lang->mr->title = '名稱';
+$lang->mr->status = '狀態';
+$lang->mr->author = '創建人';
+$lang->mr->assignee = '指派給';
+$lang->mr->reviewer = '評審人';
+$lang->mr->mergeStatus = '是否可合併';
+$lang->mr->commits = '提交數';
+$lang->mr->changes = '更改數';
+
+$lang->mr->statusList = array();
+$lang->mr->statusList['opened'] = '開放中';
+$lang->mr->statusList['closed'] = '已關閉';
+$lang->mr->statusList['merged'] = '已合併';
+
+$lang->mr->mergeStatusList = array();
+$lang->mr->mergeStatusList['checking'] = '檢查中';
+$lang->mr->mergeStatusList['can_be_merged'] = '可合併';
+$lang->mr->mergeStatusList['cannot_be_merged'] = '不可自動合併';
+
+$lang->mr->description = '描述';
+$lang->mr->confirmDelete = '確認刪除該合併請求嗎?';
+$lang->mr->sourceProject = '源項目';
+$lang->mr->sourceBranch = '源分支';
+$lang->mr->targetProject = '目標項目';
+$lang->mr->targetBranch = '目標分支';
+
+$lang->mr->usersTips = '提示:如果無法選擇指派人和評審人,請先前往GitLab頁面綁定用戶。';
+$lang->mr->notFound = "此{$lang->mr->common}不存在。";
+
+$lang->mr->apiError = new stdclass;
+$lang->mr->apiError->createMR = "通過API創建合併請求失敗,失敗原因:%s";
+$lang->mr->apiError->sudo = "無法以當前用戶綁定的GitLab賬戶進行操作,失敗原因:%s";
+
+$lang->mr->createFailedFromAPI = "創建合併請求失敗。";
+$lang->mr->accessGitlabFailed = "當前無法連接到GitLab伺服器。";
+
+$lang->mr->from = "從";
+$lang->mr->to = "合併到";
+$lang->mr->at = "于";
+
+$lang->mr->pipeline = "流水綫";
+$lang->mr->pipelineSuccess = "已通過";
+$lang->mr->pipelineFailed = "未通過";
+$lang->mr->pipelineCancled = "已取消";
+$lang->mr->pipelineUnknown = "未知";
+
+$lang->mr->pipelineStatus = array();
+$lang->mr->pipelineStatus['success'] = "已通過";
+$lang->mr->pipelineStatus['failed'] = "未通過";
+$lang->mr->pipelineStatus['canceled'] = "已取消";
+
+$lang->mr->MRHasConflicts = "是否存在衝突";
+$lang->mr->hasConflicts = "存在衝突或等待提交";
+$lang->mr->hasNoConflict = "可以合併";
+$lang->mr->mergeByManual = "此合併請求可以手動合併,請使用以下";
+$lang->mr->commandLine = "合併命令";
+$lang->mr->acceptMR = "合併";
+$lang->mr->mergeFailed = "無法合併,請核對合併請求狀態";
+$lang->mr->mergeSuccess = "已成功合併";
+
+/**
+ * Merge Command Document.
+ *
+ * %s source_project::http_url_to_repo
+ * %s mr::source_branch
+ * %s source_project::path_with_namespace . '-' . mr::source_branch
+ * %s mr::target_branch
+ * %s source_project::path_with_namespace . '-' . mr::source_branch
+ * %s mr::target_branch
+ */
+$lang->mr->commandDocument = <<< EOD
+
在本地檢出、審核和手動合併
+
+
注意:您在本地合併後此合併請求將變為不可合併狀態,需要刪除此合併請求或者提交新的代碼。
+
+ 第 1 步. 獲取並查看此合併請求的分支
+
+ git fetch "%s" %s
+ git checkout -b "%s" FETCH_HEAD
+
+
+ 第 2 步. 在本地查看更改
+
+
+ 第 3 步. 合併分支並解決出現的任何衝突
+
+ git fetch origin
+ git checkout "%s"
+ git merge --no-ff "%s"
+
+
+ 第 4 步. 將合併結果推送到GitLab
+
git push origin "%s"
+
+
+EOD;
diff --git a/module/my/lang/zh-tw.php b/module/my/lang/zh-tw.php
index 2eb7d3cded..2f738aaa95 100644
--- a/module/my/lang/zh-tw.php
+++ b/module/my/lang/zh-tw.php
@@ -93,21 +93,21 @@ if($config->systemMode == 'new') $lang->my->executionLink = '執行預設着陸
$lang->my->programLinkList = array();
$lang->my->programLinkList['program-browse'] = '預設進入項目集列表,可以查看所有的項目集';
$lang->my->programLinkList['program-project'] = '預設進入最近一個項目集的項目列表,可以查看當前項目集下所有項目';
-if($config->systemMode == 'new') $lang->my->programLinkList['program-kanban'] = '默認進入項目集看板,可以視覺化的查看到所有項目集的進展情况';
+if($config->systemMode == 'new') $lang->my->programLinkList['program-kanban'] = '預設進入項目集看板,可以可視化的查看到所有項目集的進展情況';
$lang->my->productLinkList = array();
$lang->my->productLinkList['product-index'] = '預設進入產品主頁,可以瞭解公司整體的產品狀況';
$lang->my->productLinkList['product-all'] = '預設進入產品列表,可以查看所有的產品';
$lang->my->productLinkList['product-dashboard'] = '預設進入最近一個產品儀表盤,可以查看當前產品概況';
$lang->my->productLinkList['product-browse'] = '預設進入最近一個產品的需求列表,可以查看當前產品下的需求信息';
-$lang->my->productLinkList['product-kanban'] = '默認進入產品看板,可以視覺化的查看到所有產品的進展情况';
+$lang->my->productLinkList['product-kanban'] = '預設進入產品看板,可以可視化的查看到所有產品的進展情況';
global $config;
$lang->my->projectLinkList = array();
$lang->my->projectLinkList['project-browse'] = '預設進入項目列表,可以查看所有的項目';
$lang->my->projectLinkList['project-execution'] = '預設進入項目下所有執行列表,查看所有執行信息';
$lang->my->projectLinkList['project-index'] = '預設進入最近一個項目儀表盤,可以查看當前項目概況';
-if($config->systemMode == 'new') $lang->my->projectLinkList['project-kanban'] = '默認進入項目看板,可以視覺化的查看到所有項目的進展情况';
+if($config->systemMode == 'new') $lang->my->projectLinkList['project-kanban'] = '預設進入項目看板,可以可視化的查看到所有項目的進展情況';
$lang->my->executionLinkList = array();
if($config->systemMode == 'new')
diff --git a/module/personnel/model.php b/module/personnel/model.php
index a97a3a69bc..6fc1f3ddc1 100644
--- a/module/personnel/model.php
+++ b/module/personnel/model.php
@@ -87,7 +87,9 @@ class personnelModel extends model
{
foreach($userGroups[$account] as $groupID => $userGroup)
{
- $group = $groupInfo[$groupID];
+ $group = isset($groupInfo[$groupID]) ? $groupInfo[$groupID] : '';
+ if(!$group) continue;
+
if(!isset($group->programs))
{
$programRight = true;
diff --git a/module/product/lang/zh-tw.php b/module/product/lang/zh-tw.php
index ee420e40ad..a4e9b92f9a 100644
--- a/module/product/lang/zh-tw.php
+++ b/module/product/lang/zh-tw.php
@@ -132,15 +132,15 @@ $lang->product->unplan = "未計劃";
$lang->product->viewByUser = '按用戶查看';
/* Product Kanban. */
-$lang->product->myProduct = '我負責的產品';
-$lang->product->otherProduct = '其他產品';
-$lang->product->unclosedProduct = '未關閉的產品';
+$lang->product->myProduct = '我負責的' . $lang->productCommon;
+$lang->product->otherProduct = '其他' . $lang->productCommon;
+$lang->product->unclosedProduct = '未關閉的' . $lang->productCommon;
$lang->product->unexpiredPlan = '未過期的計劃';
$lang->product->doing = '進行中';
$lang->product->doingProject = '進行中的項目';
$lang->product->doingExecution = '進行中的執行';
$lang->product->doingClassicExecution = '進行中的' . $lang->executionCommon;
-$lang->product->normalRelease = '正常的發布';
+$lang->product->normalRelease = '正常的發佈';
$lang->product->emptyProgram = '無項目集歸屬產品';
$lang->product->allStory = '所有';
diff --git a/module/program/lang/en.php b/module/program/lang/en.php
index 685576ee93..ced16aba82 100644
--- a/module/program/lang/en.php
+++ b/module/program/lang/en.php
@@ -75,9 +75,6 @@ $lang->program->isStakeholderKey = 'Key stakeholder';
$lang->program->stakeholderTypeList['inside'] = 'Inside';
$lang->program->stakeholderTypeList['outside'] = 'Outside';
-$lang->program->typeList['my'] = 'My Programs';
-$lang->program->typeList['others'] = 'Others';
-
$lang->program->noProgram = 'No program.';
$lang->program->showClosed = 'Closed programs.';
$lang->program->tips = 'If a parent item set is selected, products under that parent item set can be associated. If no item set is selected, a product with the same name as the item is created by default and associated with that item.';
diff --git a/module/program/lang/zh-tw.php b/module/program/lang/zh-tw.php
index 05034c3283..53bf1b9e90 100644
--- a/module/program/lang/zh-tw.php
+++ b/module/program/lang/zh-tw.php
@@ -36,6 +36,7 @@ $lang->program->create = '添加項目集';
$lang->program->createGuide = '選擇項目模板';
$lang->program->edit = '編輯項目集';
$lang->program->browse = '項目集列表';
+$lang->program->kanbanAction = '項目集看板';
$lang->program->view = '項目集詳情';
$lang->program->copy = '複製項目集';
$lang->program->product = '產品列表';
@@ -63,7 +64,7 @@ $lang->program->changePRJUnit = '更新項目預算單位';
$lang->program->progress = '項目進度';
$lang->program->children = '子項目集';
-$lang->program->allInput = '項目集總投入';
+$lang->program->allInvest = '項目集總投入';
$lang->program->teamCount = '總人數';
$lang->program->longTime = '長期';
$lang->program->moreProgram = '更多項目集';
@@ -115,3 +116,17 @@ $lang->program->statusList['suspended'] = '已掛起';
$lang->program->statusList['closed'] = '已關閉';
$lang->program->featureBar['all'] = '所有';
+
+$lang->program->kanban = new stdclass();
+$lang->program->kanban->common = '項目集看板';
+$lang->program->kanban->typeList['my'] = '我參與的項目集';
+$lang->program->kanban->typeList['others'] = '其他項目集';
+
+$lang->program->kanban->openProducts = '未關閉的產品';
+$lang->program->kanban->unexpiredPlans = '未過期的計劃';
+$lang->program->kanban->waitingProjects = '未開始的項目';
+$lang->program->kanban->doingProjects = '進行中的項目';
+$lang->program->kanban->doingExecutions = '進行中的執行';
+$lang->program->kanban->normalReleases = '正常的發佈';
+
+$lang->program->kanban->laneColorList = array('#32C5FF', '#006AF1', '#9D28B2', '#FF8F26', '#FFC20E', '#00A78E', '#7FBB00', '#424BAC', '#C0E9FF', '#EC2761');
diff --git a/module/project/lang/en.php b/module/project/lang/en.php
index a5c106d505..437e68a9bf 100644
--- a/module/project/lang/en.php
+++ b/module/project/lang/en.php
@@ -61,6 +61,9 @@ $lang->project->id = 'ID';
$lang->project->stage = 'Stage';
$lang->project->model = 'Model';
$lang->project->PM = 'Manager';
+$lang->project->PO = 'Project Owner';
+$lang->project->QD = 'Test Leader';
+$lang->project->RD = 'Releaser';
$lang->project->name = 'Name';
$lang->project->category = 'Category';
$lang->project->desc = 'Description';
diff --git a/module/project/lang/zh-tw.php b/module/project/lang/zh-tw.php
index a4fbc07872..7277906acf 100644
--- a/module/project/lang/zh-tw.php
+++ b/module/project/lang/zh-tw.php
@@ -61,6 +61,9 @@ $lang->project->id = '項目編號';
$lang->project->stage = '階段';
$lang->project->model = '項目管理方式';
$lang->project->PM = '負責人';
+$lang->project->PO = '項目負責人';
+$lang->project->QD = '測試負責人';
+$lang->project->RD = '發佈負責人';
$lang->project->name = '項目名稱';
$lang->project->category = '項目類型';
$lang->project->desc = '項目描述';
@@ -131,6 +134,19 @@ $lang->project->moreProject = '更多項目';
$lang->project->days = '可用工作日';
$lang->project->etc = "等";
+/* Project Kanban. */
+$lang->project->typeList = array();
+$lang->project->typeList['my'] = '我負責的項目';
+$lang->project->typeList['other'] = '其他項目';
+
+$lang->project->waitProjects = '未開始的項目';
+$lang->project->doingProjects = '進行中的項目';
+$lang->project->doingExecutions = '進行中的執行';
+$lang->project->closedProjects = '已關閉的項目';
+$lang->project->noProgram = '無項目集歸屬項目';
+
+$lang->project->laneColorList = array('#32C5FF', '#006AF1', '#9D28B2', '#FF8F26', '#FFC20E', '#00A78E', '#7FBB00', '#424BAC', '#C0E9FF', '#EC2761');
+
$lang->project->productNotEmpty = '請關聯產品或創建產品。';
$lang->project->existProductName = '產品名稱已存在。';
$lang->project->changeProgram = '%s > 修改項目集';
diff --git a/module/projectstory/lang/zh-tw.php b/module/projectstory/lang/zh-tw.php
index 516e8ad9fe..658e7d20a9 100644
--- a/module/projectstory/lang/zh-tw.php
+++ b/module/projectstory/lang/zh-tw.php
@@ -18,7 +18,9 @@ $lang->projectstory->batchUnlinkTip = '其他需求已經移除,如下需求
global $app;
$app->loadLang('product');
-$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
-$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
-$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
-$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
+$lang->projectstory->featureBar['story']['allstory'] = $lang->product->allStory;
+$lang->projectstory->featureBar['story']['unclosed'] = $lang->product->unclosed;
+$lang->projectstory->featureBar['story']['changed'] = $lang->product->changedStory;
+$lang->projectstory->featureBar['story']['closed'] = $lang->product->closedStory;
+$lang->projectstory->featureBar['story']['linkedExecution'] = '已關聯' . $lang->execution->common;
+$lang->projectstory->featureBar['story']['unlinkedExecution'] = '未關聯' . $lang->execution->common;
diff --git a/module/story/lang/zh-tw.php b/module/story/lang/zh-tw.php
index d1f074257b..320f50741e 100644
--- a/module/story/lang/zh-tw.php
+++ b/module/story/lang/zh-tw.php
@@ -278,10 +278,10 @@ $lang->story->estimateMustBeNumber = '估算值必須是數字';
$lang->story->estimateMustBePlus = '估算值不能是負數';
$lang->story->form = new stdclass();
-$lang->story->form->area = "該{$lang->SRCommon}所屬範圍";
-$lang->story->form->desc = "描述及標準,什麼{$lang->SRCommon}?如何驗收?";
-$lang->story->form->resource = '資源分配,有誰完成?需要多少時間?';
-$lang->story->form->file = "附件,如果該{$lang->SRCommon}有相關檔案,請點此上傳。";
+$lang->story->form->area = "該{$lang->SRCommon}所屬範圍";
+$lang->story->form->desc = "描述及標準,什麼{$lang->SRCommon}?如何驗收?";
+$lang->story->form->resource = '資源分配,有誰完成?需要多少時間?';
+$lang->story->form->file = "附件,如果該{$lang->SRCommon}有相關檔案,請點此上傳。";
$lang->story->action = new stdclass();
$lang->story->action->reviewed = array('main' => '$date, 由
$actor 記錄評審意見,評審意見為
$extra。', 'extra' => 'reviewResultList');
@@ -289,7 +289,7 @@ $lang->story->action->rejectreviewed = array('main' => '$date, 由
story->action->recalled = array('main' => '$date, 由 $actor 撤銷評審。');
$lang->story->action->closed = array('main' => '$date, 由 $actor 關閉,原因為 $extra $appendLink。', 'extra' => 'reasonList');
$lang->story->action->reviewpassed = array('main' => '$date, 由 系統 判定,結果為 確認通過。');
-$lang->story->action->reviewrejected = array('main' => '$date, 由 系統 關閉,原因為 拒絕。');
+$lang->story->action->reviewrejected = array('main' => '$date, 由 系統 關閉,原因為 拒絶。');
$lang->story->action->reviewclarified = array('main' => '$date, 由 系統 判定,結果為 有待明確,請變更後重新發起評審。');
$lang->story->action->linked2plan = array('main' => '$date, 由 $actor 關聯到計劃 $extra。');
$lang->story->action->unlinkedfromplan = array('main' => '$date, 由 $actor 從計劃 $extra 移除。');
diff --git a/module/task/lang/zh-tw.php b/module/task/lang/zh-tw.php
index f4613b6278..31e83968d9 100644
--- a/module/task/lang/zh-tw.php
+++ b/module/task/lang/zh-tw.php
@@ -224,7 +224,9 @@ $lang->task->error->deadlineSmall = '"截止日期"必須大於"預計開始
$lang->task->error->alreadyStarted = '此任務已被啟動,不能重複啟動!';
$lang->task->error->realStartedEmpty = '實際開始不能為空';
$lang->task->error->finishedDateEmpty = '實際完成不能為空';
+$lang->task->error->finishedDateSmall = '實際完成不能小於實際開始';
$lang->task->error->alreadyConsumed = '當前選中的父任務已有消耗。';
+$lang->task->error->date = '日期不能大於今天';
/* Report. */
$lang->task->report = new stdclass();
diff --git a/module/testtask/lang/zh-tw.php b/module/testtask/lang/zh-tw.php
index 38fb65d520..523cd4921e 100644
--- a/module/testtask/lang/zh-tw.php
+++ b/module/testtask/lang/zh-tw.php
@@ -127,17 +127,17 @@ $lang->testtask->fail = '失敗';
$lang->testtask->showResult = '共執行%s次';
$lang->testtask->showFail = '失敗%s次';
-$lang->testtask->confirmDelete = '您確認要刪除該測試單嗎?';
-$lang->testtask->confirmUnlinkCase = '您確認要移除該用例嗎?';
-$lang->testtask->noticeNoOther = '該產品還沒有其他測試單';
-$lang->testtask->noTesttask = '暫時沒有測試單。';
-$lang->testtask->checkLinked = "請檢查測試單的產品是否與{$lang->executionCommon}相關聯";
-$lang->testtask->noImportData = '導入的XML沒有解析出數據。';
-$lang->testtask->unitXMLFormat = '請選擇Junit XML 格式的檔案。';
-$lang->testtask->titleOfAuto = "%s 自動化測試";
-$lang->testtask->cannotBeParsed = '導入的XML檔案內容格式錯誤,無法解析。';
-$lang->testtask->finishedDateLess = '實際完成日期不能小於開始日期%s';
-$lang->testtask->finishedDateMore = '實際完成日期不能大於今天';
+$lang->testtask->confirmDelete = '您確認要刪除該測試單嗎?';
+$lang->testtask->confirmUnlinkCase = '您確認要移除該用例嗎?';
+$lang->testtask->noticeNoOther = '該產品還沒有其他測試單';
+$lang->testtask->noTesttask = '暫時沒有測試單。';
+$lang->testtask->checkLinked = "請檢查測試單的產品是否與{$lang->executionCommon}相關聯";
+$lang->testtask->noImportData = '導入的XML沒有解析出數據。';
+$lang->testtask->unitXMLFormat = '請選擇Junit XML 格式的檔案。';
+$lang->testtask->titleOfAuto = "%s 自動化測試";
+$lang->testtask->cannotBeParsed = '導入的XML檔案內容格式錯誤,無法解析。';
+$lang->testtask->finishedDateError = '實際完成日期不能小於開始日期%s';
+$lang->testtask->finishedDateError2 = '實際完成日期不能大於今天';
$lang->testtask->assignedToMe = '指派給我';
$lang->testtask->allCases = '所有用例';
diff --git a/module/todo/lang/en.php b/module/todo/lang/en.php
index b12f55bd9d..38741766a2 100644
--- a/module/todo/lang/en.php
+++ b/module/todo/lang/en.php
@@ -96,12 +96,13 @@ $lang->todo->priList[2] = 'Important';
$lang->todo->priList[3] = 'Normal';
$lang->todo->priList[4] = 'Low';
-$lang->todo->typeList['custom'] = 'Custom';
-$lang->todo->typeList['cycle'] = 'Recur';
-$lang->todo->typeList['bug'] = 'Bug';
-$lang->todo->typeList['task'] = 'Task';
-$lang->todo->typeList['story'] = 'Story';
-$lang->todo->typeList['testtask'] = 'Testtask';
+$lang->todo->typeList['custom'] = 'Custom';
+$lang->todo->typeList['cycle'] = 'Recur';
+$lang->todo->typeList['bug'] = 'Bug';
+$lang->todo->typeList['task'] = 'Task';
+$lang->todo->typeList['story'] = 'Story';
+$lang->todo->typeList['testtask'] = 'Testtask';
+$lang->todo->typeList['mrapprove'] = 'MR Approve';
$lang->todo->confirmDelete = "Do you want to delete this todo?";
$lang->todo->thisIsPrivate = 'This is a private todo';
diff --git a/module/todo/lang/zh-tw.php b/module/todo/lang/zh-tw.php
index 8f6f981253..968174fcf6 100644
--- a/module/todo/lang/zh-tw.php
+++ b/module/todo/lang/zh-tw.php
@@ -70,6 +70,9 @@ $lang->todo->closedDate = '關閉時間';
$lang->todo->deadline = '過期時間';
$lang->todo->deleted = '已刪除';
+$lang->todo->cycleDaysLabel = '間隔天數';
+$lang->todo->beforeDaysLabel = '提前天數';
+
$lang->todo->every = '間隔';
$lang->todo->specify = '指定';
$lang->todo->everyYear = '每年';
@@ -93,12 +96,13 @@ $lang->todo->priList[2] = 2;
$lang->todo->priList[3] = 3;
$lang->todo->priList[4] = 4;
-$lang->todo->typeList['custom'] = '自定義';
-$lang->todo->typeList['cycle'] = '周期';
-$lang->todo->typeList['bug'] = 'Bug';
-$lang->todo->typeList['task'] = '任務';
-$lang->todo->typeList['story'] = $lang->SRCommon;
-$lang->todo->typeList['testtask'] = '測試單';
+$lang->todo->typeList['custom'] = '自定義';
+$lang->todo->typeList['cycle'] = '周期';
+$lang->todo->typeList['bug'] = 'Bug';
+$lang->todo->typeList['task'] = '任務';
+$lang->todo->typeList['story'] = $lang->SRCommon;
+$lang->todo->typeList['testtask'] = '測試單';
+$lang->todo->typeList['mrapprove'] = '合併請求審批';
$lang->todo->confirmDelete = "您確定要刪除這條待辦嗎?";
$lang->todo->thisIsPrivate = '這是一條私人事務。:)';
diff --git a/module/tutorial/lang/en.php b/module/tutorial/lang/en.php
index 75ddf25769..4e8cd5dc02 100644
--- a/module/tutorial/lang/en.php
+++ b/module/tutorial/lang/en.php
@@ -9,7 +9,6 @@
* @version $Id: zh-cn.php 5116 2013-07-12 06:37:48Z sunhao@cnezsoft.com $
* @link http://www.zentao.net
*/
-
$lang->tutorial = new stdclass();
$lang->tutorial->common = 'Tutorial';
$lang->tutorial->desc = 'You can know how to use ZenTao by doing tasks. It takes about 10 minutes, and you can quit anytime.';
@@ -22,11 +21,11 @@ $lang->tutorial->allTasks = 'All Tasks';
$lang->tutorial->previous = 'Previous';
$lang->tutorial->nextTask = 'Next';
$lang->tutorial->openTargetPage = 'Open %s';
-$lang->tutorial->targetAppTip = 'Open %s';
$lang->tutorial->atTargetPage = 'On %s';
$lang->tutorial->reloadTargetPage = 'Reload';
$lang->tutorial->target = 'Target';
-$lang->tutorial->targetPageTip = 'Open【%s】page by following this instruction.';
+$lang->tutorial->targetPageTip = 'Open【%s】page by following this instruction.';
+$lang->tutorial->targetAppTip = 'Open %s';
$lang->tutorial->requiredTip = '【%s】is required.';
$lang->tutorial->congratulateTask = 'Congratulations! You have finished【】!';
$lang->tutorial->serverErrorTip = 'Error!';
diff --git a/module/tutorial/lang/zh-tw.php b/module/tutorial/lang/zh-tw.php
index 1412008f5e..b355d1f163 100644
--- a/module/tutorial/lang/zh-tw.php
+++ b/module/tutorial/lang/zh-tw.php
@@ -25,6 +25,7 @@ $lang->tutorial->atTargetPage = '已在 目
$lang->tutorial->reloadTargetPage = '重新載入';
$lang->tutorial->target = '目標';
$lang->tutorial->targetPageTip = '按此指示打開【%s】頁面';
+$lang->tutorial->targetAppTip = '按此指示打開【%s】應用';
$lang->tutorial->requiredTip = '【%s】為必填項';
$lang->tutorial->congratulateTask = '恭喜,你完成了任務 【】!';
$lang->tutorial->serverErrorTip = '發生了一些錯誤。';
@@ -35,49 +36,49 @@ $lang->tutorial->dataNotSave = "教程任務中,數據不會保存。";
$lang->tutorial->tasks = array();
$lang->tutorial->tasks['createAccount'] = array('title' => '創建帳號');
-$lang->tutorial->tasks['createAccount']['nav'] = array('module' => 'user', 'method' => 'create', 'menuModule' => 'company', 'menu' => 'browseUser', 'form' => '#createForm', 'submit' => '#submit', 'target' => '.create-user-btn', 'targetPageName' => '添加用戶');
-$lang->tutorial->tasks['createAccount']['desc'] = "在系統創建一個新的用戶帳號:
- 打開 組織 用戶 添加用戶 頁面;
- 在添加用戶表單中填寫新用戶信息;
- 保存用戶信息。
";
+$lang->tutorial->tasks['createAccount']['nav'] = array('app' => 'admin', 'module' => 'user', 'method' => 'create', 'menuModule' => 'company', 'menu' => 'browseUser', 'form' => '#createForm', 'requiredFields' => 'account,realname,verifyPassword,password1,password2', 'submit' => '#submit', 'target' => '.create-user-btn', 'targetPageName' => '添加用戶');
+$lang->tutorial->tasks['createAccount']['desc'] = "在系統創建一個新的用戶帳號:
- 打開 後台 人員 用戶 添加用戶 頁面;
- 在添加用戶表單中填寫新用戶信息;
- 保存用戶信息。
";
-global $config;
-if($config->global->flow == 'full' or $config->global->flow != 'onlyTask')
-{
- $lang->tutorial->tasks['createProduct'] = array('title' => '創建' . $lang->productCommon);
- $lang->tutorial->tasks['createProduct']['nav'] = array('module' => 'product', 'method' => 'create', 'menu' => '#pageNav', 'form' => '#createForm', 'submit' => '#submit', 'target' => '.create-product-btn', 'targetPageName' => '添加' . $lang->productCommon);
- $lang->tutorial->tasks['createProduct']['desc'] = "在系統創建一個新的{$lang->productCommon}:
- 打開 {$lang->productCommon} 添加{$lang->productCommon} 頁面;
- 在表單中填寫要創建的{$lang->productCommon}信息;
- 保存{$lang->productCommon}信息。
";
-}
+$lang->tutorial->tasks['createProgram'] = array('title' => '創建項目集');
+$lang->tutorial->tasks['createProgram']['mode'] = 'new';
+$lang->tutorial->tasks['createProgram']['nav'] = array('app' => 'program', 'module' => 'program', 'method' => 'create', 'menuModule' => 'program', 'menu' => '#heading>.header-btn:first,#navbar>.nav>li[data-id="browse"],.create-program-btn', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-program-btn', 'targetPageName' => '添加項目集');
+$lang->tutorial->tasks['createProgram']['desc'] = "在系統創建一個新的項目集:
- 打開 項目集 項目集列表 添加項目集 頁面;
- 在添加項目集表單中填寫項目集信息;
- 保存項目集信息。
";
-if($config->global->flow == 'full' or $config->global->flow == 'onlyStory')
-{
- $lang->tutorial->tasks['createStory'] = array('title' => "創建{$lang->SRCommon}");
- $lang->tutorial->tasks['createStory']['nav'] = array('module' => 'story', 'method' => 'create', 'menuModule' => 'product', 'menu' => 'story', 'target' => '.create-story-btn', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => "提{$lang->SRCommon}");
- $lang->tutorial->tasks['createStory']['desc'] = "在系統創建一個新的{$lang->SRCommon}:
- 打開 {$lang->productCommon} {$lang->SRCommon} 添加{$lang->SRCommon} 頁面;
- 在表單中填寫要創建的{$lang->SRCommon}信息;
- 保存{$lang->SRCommon}信息。
";
-}
+$lang->tutorial->tasks['createProduct'] = array('title' => '創建' . $lang->productCommon);
+$lang->tutorial->tasks['createProduct']['nav'] = array('app' => 'product', 'module' => 'product', 'method' => 'create', 'menuModule' => 'product', 'menu' => 'all', 'form' => '#createForm', 'submit' => '#submit', 'target' => '.create-product-btn', 'targetPageName' => '添加' . $lang->productCommon);
+$lang->tutorial->tasks['createProduct']['desc'] = "在系統創建一個新的{$lang->productCommon}:
- 打開 {$lang->productCommon} {$lang->productCommon}列表 添加{$lang->productCommon} 頁面;
- 在表單中填寫要創建的{$lang->productCommon}信息;
- 保存{$lang->productCommon}信息。
";
-if($config->global->flow == 'full' or $config->global->flow == 'onlyTask')
-{
- $lang->tutorial->tasks['createProject'] = array('title' => '創建' . $lang->executionCommon);
- $lang->tutorial->tasks['createProject']['nav'] = array('module' => 'execution', 'method' => 'create', 'menu' => '#pageNav', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-project-btn', 'targetPageName' => '添加' . $lang->executionCommon);
- $lang->tutorial->tasks['createProject']['desc'] = "在系統創建一個新的{$lang->executionCommon}:
- 打開 {$lang->executionCommon} 添加{$lang->executionCommon} 頁面;
- 在表單中填寫要創建的{$lang->executionCommon}信息;
- 保存{$lang->executionCommon}信息。
";
+$lang->tutorial->tasks['createStory'] = array('title' => "創建{$lang->SRCommon}");
+$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'] = "在系統創建一個新的{$lang->SRCommon}:
- 打開 {$lang->productCommon} {$lang->SRCommon} 提{$lang->SRCommon} 頁面;
- 在表單中填寫要創建的{$lang->SRCommon}信息;
- 保存{$lang->SRCommon}信息。
";
- $lang->tutorial->tasks['manageTeam'] = array('title' => '管理團隊');
- $lang->tutorial->tasks['manageTeam']['nav'] = array('module' => 'execution', 'method' => 'managemembers', 'menu' => 'team', 'target' => '.manage-team-btn', 'form' => '#teamForm', 'requiredFields' => 'account1', 'submit' => '#submit', 'targetPageName' => '團隊管理');
- $lang->tutorial->tasks['manageTeam']['desc'] = "管理{$lang->executionCommon}團隊成員:
- 打開 {$lang->executionCommon} 團隊 團隊管理 頁面;
- 選擇要加入團隊的成員;
- 保存團隊成員信息。
";
+$lang->tutorial->tasks['createProject'] = array('title' => '創建' . $lang->projectCommon);
+$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'] = "在系統創建一個新的{$lang->projectCommon}:
- 打開 {$lang->projectCommon} {$lang->projectCommon}列表 創建{$lang->projectCommon} 頁面;
- 在表單中填寫要創建的{$lang->projectCommon}信息;
- 保存{$lang->projectCommon}信息。
";
- if($config->global->flow == 'full')
- {
- $lang->tutorial->tasks['linkStory'] = array('title' => "關聯{$lang->SRCommon}");
- $lang->tutorial->tasks['linkStory']['nav'] = array('module' => 'execution', 'method' => 'linkStory', 'menu' => 'story', 'target' => '.link-story-btn', 'form' => '#linkStoryForm', 'formType' => 'table', 'submit' => '#submit', 'targetPageName' => "關聯{$lang->SRCommon}");
- $lang->tutorial->tasks['linkStory']['desc'] = "將{$lang->SRCommon}關聯到{$lang->executionCommon}:
- 打開 {$lang->executionCommon} {$lang->SRCommon} 關聯{$lang->SRCommon} 頁面;
- 在{$lang->SRCommon}列表中勾選要關聯的{$lang->SRCommon};
- 保存關聯的{$lang->SRCommon}信息。
";
- }
+$lang->tutorial->tasks['manageTeam'] = array('title' => "管理{$lang->projectCommon}團隊");
+$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', 'form' => '#teamForm', 'requiredFields' => 'accounts1', 'submit' => '#submit', 'targetPageName' => '團隊管理');
+$lang->tutorial->tasks['manageTeam']['desc'] = "管理{$lang->projectCommon}團隊成員:
- 打開 {$lang->projectCommon} 設置 團隊 團隊管理 頁面;
- 選擇要加入團隊的成員;
- 保存團隊成員信息。
";
- $lang->tutorial->tasks['createTask'] = array('title' => '分解任務');
- $lang->tutorial->tasks['createTask']['nav'] = array('module' => 'task', 'method' => 'create', 'menuModule' => 'execution', 'menu' => 'story', 'target' => '.btn-task-create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => '建任務');
- $lang->tutorial->tasks['createTask']['desc'] = "將{$lang->executionCommon}{$lang->SRCommon}分解為任務:
- 打開 {$lang->executionCommon} {$lang->SRCommon} 分解任務 頁面;
- 在表單中填寫任務信息;
- 保存任務信息。
";
-}
+$lang->tutorial->tasks['createExecution'] = array('title' => '創建' . $lang->executionCommon);
+$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'] = "在系統創建一個新的{$lang->executionCommon}:
- 打開 {$lang->executionCommon} {$lang->executionCommon}列表 添加{$lang->executionCommon} 頁面;
- 在表單中填寫要創建的{$lang->executionCommon}信息;
- 保存{$lang->executionCommon}信息。
";
-if($config->global->flow == 'full' or $config->global->flow == 'onlyTest')
-{
- $lang->tutorial->tasks['createBug'] = array('title' => '提Bug');
- $lang->tutorial->tasks['createBug']['nav'] = array('module' => 'bug', 'method' => 'create', 'menuModule' => 'qa', 'menu' => 'bug', 'target' => '.btn-bug-create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => '提Bug');
- $lang->tutorial->tasks['createBug']['desc'] = "在系統中提交一個Bug:
- 打開 測試 Bug 提Bug;
- 在表單中填寫Bug信息;
- 保存Bug信息。
";
-}
+$lang->tutorial->tasks['manageExecutionTeam'] = array('title' => "管理{$lang->executionCommon}團隊");
+$lang->tutorial->tasks['manageExecutionTeam']['mode'] = 'classic';
+$lang->tutorial->tasks['manageExecutionTeam']['nav'] = array('app' => 'execution', 'module' => 'execution', 'method' => 'managemembers', 'menuModule' => '', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#executionTableList>tr:first>.c-name>a,#navbar>.nav>li[data-id="settings"],#subNavbar>.nav>li[data-id="team"],.manage-team-btn', 'target' => '.manage-team-btn', 'form' => '#teamForm', 'requiredFields' => 'account1', 'submit' => '#submit', 'targetPageName' => '團隊管理');
+$lang->tutorial->tasks['manageExecutionTeam']['desc'] = "管理{$lang->executionCommon}團隊成員:
- 打開 {$lang->executionCommon} 設置 團隊 團隊管理 頁面;
- 選擇要加入團隊的成員;
- 保存團隊成員信息。
";
+
+$lang->tutorial->tasks['linkStory'] = array('title' => "關聯{$lang->SRCommon}");
+$lang->tutorial->tasks['linkStory']['nav'] = array('app' => 'execution', 'module' => 'execution', 'method' => 'linkStory', 'menuModule' => 'story', 'menu' => '', 'target' => '.link-story-btn', 'form' => '#linkStoryForm', 'formType' => 'table', 'submit' => '#submit', 'targetPageName' => "關聯{$lang->SRCommon}");
+$lang->tutorial->tasks['linkStory']['desc'] = "將{$lang->SRCommon}關聯到{$lang->executionCommon}:
- 打開 {$lang->executionCommon} {$lang->SRCommon} 關聯{$lang->SRCommon} 頁面;
- 在{$lang->SRCommon}列表中勾選要關聯的{$lang->SRCommon};
- 保存關聯的{$lang->SRCommon}信息。
";
+
+$lang->tutorial->tasks['createTask'] = array('title' => '分解任務');
+$lang->tutorial->tasks['createTask']['nav'] = array('app' => 'execution', 'module' => 'task', 'method' => 'create', 'menuModule' => 'story', 'menu' => '', 'target' => '.btn-task-create', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => '建任務');
+$lang->tutorial->tasks['createTask']['desc'] = "將{$lang->executionCommon}{$lang->SRCommon}分解為任務:
- 打開 {$lang->executionCommon} {$lang->SRCommon} 分解任務 頁面;
- 在表單中填寫任務信息;
- 保存任務信息。
";
+
+$lang->tutorial->tasks['createBug'] = array('title' => '提Bug');
+$lang->tutorial->tasks['createBug']['nav'] = array('app' => 'qa', 'module' => 'bug', 'method' => 'create', 'menuModule' => 'bug', 'menu' => 'bug', 'target' => '.create-bug-btn', 'vars' => 'productID=0', 'form' => '#dataform', 'submit' => '#submit', 'targetPageName' => '提Bug');
+$lang->tutorial->tasks['createBug']['desc'] = "在系統中提交一個Bug:
- 打開 測試 Bug 提Bug;
- 在表單中填寫Bug信息;
- 保存Bug信息。
";
diff --git a/module/upgrade/lang/version.php b/module/upgrade/lang/version.php
index 88091e1602..1e343452b6 100644
--- a/module/upgrade/lang/version.php
+++ b/module/upgrade/lang/version.php
@@ -142,3 +142,4 @@ $lang->upgrade->fromVersions['15_0_2'] = '15.0.2';
$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';
diff --git a/module/upgrade/lang/zh-tw.php b/module/upgrade/lang/zh-tw.php
index 6313c1801d..46475709ea 100644
--- a/module/upgrade/lang/zh-tw.php
+++ b/module/upgrade/lang/zh-tw.php
@@ -50,7 +50,7 @@ $lang->upgrade->sureExecute = '確認執行';
$lang->upgrade->forbiddenExt = '以下插件與新版本不兼容,已經自動禁用:';
$lang->upgrade->updateFile = '需要更新附件信息。';
$lang->upgrade->noticeSQL = '檢查到你的資料庫跟標準不一致,嘗試修復失敗。請執行以下SQL語句,再刷新頁面檢查。';
-$lang->upgrade->afterDeleted = '以上檔案未能刪除, 刪除後刷新!';
+$lang->upgrade->afterDeleted = '請執行上面命令刪除檔案, 刪除後刷新!';
$lang->upgrade->mergeProgram = '數據遷移';
$lang->upgrade->mergeTips = '數據遷移提示';
$lang->upgrade->toPMS15Guide = '禪道開源版15版本升級';
@@ -111,6 +111,7 @@ $lang->upgrade->dataMethod = '數據遷移方式';
$lang->upgrade->begin = '開始日期';
$lang->upgrade->end = '結束日期';
$lang->upgrade->selectProject = '目標項目';
+$lang->upgrade->programName = '項目集名稱';
$lang->upgrade->projectName = '項目名稱';
$lang->upgrade->newProgram = '新建';
diff --git a/module/upgrade/model.php b/module/upgrade/model.php
index c1fbec195d..8e7af491cf 100644
--- a/module/upgrade/model.php
+++ b/module/upgrade/model.php
@@ -712,6 +712,8 @@ class upgradeModel extends model
{
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan4.2.sql';
$this->execSQL($xuanxuanSql);
+ $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan4.4.sql';
+ $this->execSQL($xuanxuanSql);
}
}
$this->appendExec('15_4');
@@ -914,6 +916,8 @@ class upgradeModel extends model
{
$xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan4.2.sql';
$confirmContent .= file_get_contents($xuanxuanSql);
+ $xuanxuanSql = $this->app->getAppRoot() . 'db' . DS . 'upgradexuanxuan4.4.sql';
+ $confirmContent .= file_get_contents($xuanxuanSql);
}
}
return str_replace('zt_', $this->config->db->prefix, $confirmContent);