diff --git a/module/branch/lang/zh-tw.php b/module/branch/lang/zh-tw.php index 32b3cc684d..19f458e650 100644 --- a/module/branch/lang/zh-tw.php +++ b/module/branch/lang/zh-tw.php @@ -3,6 +3,7 @@ $lang->branch->common = '分支'; $lang->branch->manage = '分支管理'; $lang->branch->sort = '排序'; $lang->branch->delete = '分支刪除'; +$lang->branch->add = '添加'; $lang->branch->manageTitle = '%s管理'; $lang->branch->all = '所有'; diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index 02bca87613..f41c593689 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -59,9 +59,11 @@ $lang->history = '歷史記錄'; $lang->attatch = '附件'; $lang->reverse = '切換順序'; $lang->switchDisplay = '切換顯示'; +$lang->expand = '展開全部'; +$lang->collapse = '收起'; $lang->addFiles = '上傳了附件 '; $lang->files = '附件 '; -$lang->pasteText = '粘貼文本 '; +$lang->pasteText = '多項錄入'; $lang->uploadImages = '多圖上傳 '; $lang->timeout = '連接超時,請檢查網絡環境,或重試!'; $lang->repairTable = '資料庫表可能損壞,請用phpmyadmin或myisamchk檢查修復。'; @@ -74,6 +76,7 @@ $lang->tutorial = '新手教程'; $lang->changeLog = '修改日誌'; $lang->manual = '手冊'; $lang->customMenu = '自定義導航'; +$lang->customField = '自定義表單項'; $lang->tutorialConfirm = '檢測到你尚未退出新手教程模式,是否現在退出?'; $lang->preShortcutKey = '[快捷鍵:←]'; @@ -191,15 +194,15 @@ $lang->product = new stdclass(); $lang->product->menu = new stdclass(); $lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->menu->dynamic = '動態|product|dynamic|productID=%s'; $lang->product->menu->plan = array('link' => '計劃|productplan|browse|productID=%s', 'subModule' => 'productplan'); $lang->product->menu->release = array('link' => '發佈|release|browse|productID=%s', 'subModule' => 'release'); -$lang->product->menu->roadmap = '路線圖|product|roadmap|productID=%s'; +$lang->product->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s"; $lang->product->menu->doc = array('link' => '文檔|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); +$lang->product->menu->dynamic = '動態|product|dynamic|productID=%s'; +$lang->product->menu->roadmap = '路線圖|product|roadmap|productID=%s'; $lang->product->menu->branch = '@branch@|branch|manage|productID=%s'; $lang->product->menu->module = '模組|tree|browse|productID=%s&view=story'; $lang->product->menu->view = array('link' => '概況|product|view|productID=%s', 'alias' => 'edit'); -$lang->product->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s"; $lang->story = new stdclass(); $lang->productplan = new stdclass(); diff --git a/module/file/lang/zh-tw.php b/module/file/lang/zh-tw.php index 4ce0889ff1..2901182513 100644 --- a/module/file/lang/zh-tw.php +++ b/module/file/lang/zh-tw.php @@ -18,7 +18,7 @@ $lang->file->edit = '重命名'; $lang->file->inputFileName = '請輸入附件名稱'; $lang->file->delete = '刪除附件'; $lang->file->label = '標題:'; -$lang->file->maxUploadSize = "%s"; +$lang->file->maxUploadSize = "(不超過%s)"; $lang->file->applyTemplate = "應用模板"; $lang->file->tplTitle = "模板名稱"; $lang->file->setPublic = "設置公共模板"; @@ -39,15 +39,15 @@ $lang->file->addedDate = '添加時間'; $lang->file->downloads = '下載次數'; $lang->file->extra = '備註'; -$lang->file->dragFile = '請拖拽檔案到此處'; -$lang->file->errorNotExists = "檔案夾 '%s' 不存在"; -$lang->file->errorCanNotWrite = "檔案夾 '%s' 不可寫,請改變檔案夾的權限。在linux中輸入指令:sudo chmod -R 777 %s"; -$lang->file->confirmDelete = " 您確定刪除該附件嗎?"; -$lang->file->errorFileSize = " 檔案大小已經超過限制,可能不能成功上傳!"; -$lang->file->errorFileUpload = " 檔案上傳失敗,檔案大小可能超出限制"; -$lang->file->errorFileFormate = " 檔案上傳失敗,檔案格式不在規定範圍內"; -$lang->file->errorFileMove = " 檔案上傳失敗,移動檔案時出錯"; -$lang->file->dangerFile = " 您選擇的檔案存在安全風險,系統將不予上傳。"; -$lang->file->errorSuffix = '壓縮包格式錯誤,只能上傳zip壓縮包!'; -$lang->file->errorExtract = '解壓縮失敗!可能檔案已經損壞,或壓縮包裡含有非法上傳檔案。'; +$lang->file->dragFile = '請拖拽檔案到此處'; +$lang->file->errorNotExists = "檔案夾 '%s' 不存在"; +$lang->file->errorCanNotWrite = "檔案夾 '%s' 不可寫,請改變檔案夾的權限。在linux中輸入指令:sudo chmod -R 777 %s"; +$lang->file->confirmDelete = " 您確定刪除該附件嗎?"; +$lang->file->errorFileSize = " 檔案大小已經超過%s,可能不能成功上傳!"; +$lang->file->errorFileUpload = " 檔案上傳失敗,檔案大小可能超出限制"; +$lang->file->errorFileFormate = " 檔案上傳失敗,檔案格式不在規定範圍內"; +$lang->file->errorFileMove = " 檔案上傳失敗,移動檔案時出錯"; +$lang->file->dangerFile = " 您選擇的檔案存在安全風險,系統將不予上傳。"; +$lang->file->errorSuffix = '壓縮包格式錯誤,只能上傳zip壓縮包!'; +$lang->file->errorExtract = '解壓縮失敗!可能檔案已經損壞,或壓縮包裡含有非法上傳檔案。'; $lang->file->uploadImagesExplain = '註:請上傳"jpg, jpeg, gif, png"格式的圖片,程序會以檔案名作為標題,以圖片作為內容。'; diff --git a/module/product/lang/zh-tw.php b/module/product/lang/zh-tw.php index 3c6dc12185..30e1c77288 100644 --- a/module/product/lang/zh-tw.php +++ b/module/product/lang/zh-tw.php @@ -56,20 +56,26 @@ $lang->product->confirmDelete = " 您確定刪除該{$lang->productCommon}嗎 $lang->product->errorNoProduct = "還沒有創建{$lang->productCommon}!"; $lang->product->accessDenied = "您無權訪問該{$lang->productCommon}"; -$lang->product->id = "編號"; -$lang->product->name = "{$lang->productCommon}名稱"; -$lang->product->code = "{$lang->productCommon}代號"; -$lang->product->line = '產品綫'; -$lang->product->order = '排序'; -$lang->product->type = "{$lang->productCommon}類型"; -$lang->product->status = '狀態'; -$lang->product->desc = "{$lang->productCommon}描述"; -$lang->product->PO = "{$lang->productCommon}負責人"; -$lang->product->QD = '測試負責人'; -$lang->product->RD = '發佈負責人'; -$lang->product->acl = '訪問控制'; -$lang->product->whitelist = '分組白名單'; -$lang->product->branch = '所屬%s'; +$lang->product->id = "編號"; +$lang->product->name = "{$lang->productCommon}名稱"; +$lang->product->code = "{$lang->productCommon}代號"; +$lang->product->line = '產品綫'; +$lang->product->order = '排序'; +$lang->product->type = "{$lang->productCommon}類型"; +$lang->product->status = '狀態'; +$lang->product->desc = "{$lang->productCommon}描述"; +$lang->product->manager = '負責人'; +$lang->product->PO = "{$lang->productCommon}負責人"; +$lang->product->QD = '測試負責人'; +$lang->product->RD = '發佈負責人'; +$lang->product->acl = '訪問控制'; +$lang->product->whitelist = '分組白名單'; +$lang->product->branch = '所屬%s'; +$lang->product->qa = '測試'; +$lang->product->release = '發佈'; +$lang->product->latestDynamic = "最新動態"; +$lang->product->iteration = "版本迭代"; +$lang->product->iterationInfo = "迭代 %s 次"; $lang->product->searchStory = '搜索'; $lang->product->assignedToMe = '指給我'; diff --git a/module/productplan/view/browse.html.php b/module/productplan/view/browse.html.php index 1892b087db..66d2f9ccba 100644 --- a/module/productplan/view/browse.html.php +++ b/module/productplan/view/browse.html.php @@ -66,7 +66,7 @@ - id?> + id;?> id"), $plan->title);?> diff --git a/module/project/lang/en.php b/module/project/lang/en.php index d59049ef8b..312f607272 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -278,8 +278,8 @@ $lang->printKanban->taskStatus = 'Status'; $lang->printKanban->typeList['all'] = 'All'; $lang->printKanban->typeList['increment'] = 'Increment'; -$lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; +$lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; $lang->project->featureBar['task']['assignedtome'] = $lang->project->assignedToMe; $lang->project->featureBar['task']['myinvolved'] = $lang->project->myInvolved; $lang->project->featureBar['task']['delayed'] = 'Delayed'; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index e2125ee75a..257cbcbe07 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -171,7 +171,7 @@ $lang->project->groupFilter['pri']['noset'] = '未设置'; $lang->project->groupFilter['assignedTo']['undone'] = '未完成'; $lang->project->groupFilter['assignedTo']['all'] = $lang->project->all; -$lang->project->byQuery = '搜索'; +$lang->project->byQuery = '搜索'; /* 查询条件列表。*/ $lang->project->allProject = "所有{$lang->projectCommon}"; @@ -278,8 +278,8 @@ $lang->printKanban->taskStatus = '状态'; $lang->printKanban->typeList['all'] = '全部'; $lang->printKanban->typeList['increment'] = '增量'; -$lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; +$lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; $lang->project->featureBar['task']['assignedtome'] = $lang->project->assignedToMe; $lang->project->featureBar['task']['myinvolved'] = $lang->project->myInvolved; $lang->project->featureBar['task']['delayed'] = '已延期'; diff --git a/module/project/lang/zh-tw.php b/module/project/lang/zh-tw.php index 843b203f0c..79a43428d5 100644 --- a/module/project/lang/zh-tw.php +++ b/module/project/lang/zh-tw.php @@ -171,7 +171,7 @@ $lang->project->groupFilter['pri']['noset'] = '未設置'; $lang->project->groupFilter['assignedTo']['undone'] = '未完成'; $lang->project->groupFilter['assignedTo']['all'] = $lang->project->all; -$lang->project->byQuery = '搜索'; +$lang->project->byQuery = '搜索'; /* 查詢條件列表。*/ $lang->project->allProject = "所有{$lang->projectCommon}"; @@ -278,8 +278,8 @@ $lang->printKanban->taskStatus = '狀態'; $lang->printKanban->typeList['all'] = '全部'; $lang->printKanban->typeList['increment'] = '增量'; -$lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; $lang->project->featureBar['task']['all'] = $lang->project->allTasks; +$lang->project->featureBar['task']['unclosed'] = $lang->project->unclosed; $lang->project->featureBar['task']['assignedtome'] = $lang->project->assignedToMe; $lang->project->featureBar['task']['myinvolved'] = $lang->project->myInvolved; $lang->project->featureBar['task']['delayed'] = '已延期'; diff --git a/module/project/view/task.html.php b/module/project/view/task.html.php index 36070025a2..0aed040377 100644 --- a/module/project/view/task.html.php +++ b/module/project/view/task.html.php @@ -20,8 +20,6 @@ js::set('productID', $productID); js::set('projectID', $projectID); js::set('browseType', $browseType); ?> - -
@@ -207,7 +202,7 @@ js::set('browseType', $browseType); - + task->printCell($field, $task, $users, $browseType, $branchGroups, $modulePairs, $useDatatable ? 'datatable' : 'table');?> children)):?> diff --git a/module/story/config.php b/module/story/config.php index 6af3cf4beb..cc7e2ea343 100644 --- a/module/story/config.php +++ b/module/story/config.php @@ -193,5 +193,5 @@ $config->story->datatable->fieldList['caseCount']['name'] = $lang->story->ca $config->story->datatable->fieldList['actions']['title'] = 'actions'; $config->story->datatable->fieldList['actions']['fixed'] = 'right'; -$config->story->datatable->fieldList['actions']['width'] = '160'; +$config->story->datatable->fieldList['actions']['width'] = '156'; $config->story->datatable->fieldList['actions']['required'] = 'yes'; diff --git a/module/story/lang/zh-tw.php b/module/story/lang/zh-tw.php index 228e22c989..601617f8a3 100644 --- a/module/story/lang/zh-tw.php +++ b/module/story/lang/zh-tw.php @@ -23,6 +23,7 @@ $lang->story->batchClose = '批量關閉'; $lang->story->activate = '激活'; $lang->story->delete = "刪除"; $lang->story->view = "需求詳情"; +$lang->story->setting = "設置"; $lang->story->tasks = "相關任務"; $lang->story->bugs = "相關Bug"; $lang->story->cases = "相關用例"; diff --git a/module/task/config.php b/module/task/config.php index 93bc0664bd..89f09267bc 100644 --- a/module/task/config.php +++ b/module/task/config.php @@ -55,7 +55,7 @@ if($config->global->flow == 'onlyTask') } $config->task->datatable = new stdclass(); -$config->task->datatable->defaultField = array('id', 'pri', 'name', 'status', 'deadline', 'openedDate', 'assignedTo', 'finishedBy', 'estimate', 'consumed', 'left', 'actions'); +$config->task->datatable->defaultField = array('id', 'pri', 'name', 'status', 'assignedTo', 'finishedBy', 'estimate', 'consumed', 'left', 'progress', 'deadline', 'actions'); $config->task->datatable->fieldList['id']['title'] = 'idAB'; $config->task->datatable->fieldList['id']['fixed'] = 'left'; @@ -79,27 +79,27 @@ $config->task->datatable->fieldList['type']['required'] = 'no'; $config->task->datatable->fieldList['status']['title'] = 'statusAB'; $config->task->datatable->fieldList['status']['fixed'] = 'no'; -$config->task->datatable->fieldList['status']['width'] = '60'; +$config->task->datatable->fieldList['status']['width'] = '70'; $config->task->datatable->fieldList['status']['required'] = 'no'; $config->task->datatable->fieldList['estimate']['title'] = 'estimateAB'; $config->task->datatable->fieldList['estimate']['fixed'] = 'no'; -$config->task->datatable->fieldList['estimate']['width'] = '57'; +$config->task->datatable->fieldList['estimate']['width'] = '70'; $config->task->datatable->fieldList['estimate']['required'] = 'no'; $config->task->datatable->fieldList['consumed']['title'] = 'consumedAB'; $config->task->datatable->fieldList['consumed']['fixed'] = 'no'; -$config->task->datatable->fieldList['consumed']['width'] = '50'; +$config->task->datatable->fieldList['consumed']['width'] = '70'; $config->task->datatable->fieldList['consumed']['required'] = 'no'; $config->task->datatable->fieldList['left']['title'] = 'leftAB'; $config->task->datatable->fieldList['left']['fixed'] = 'no'; -$config->task->datatable->fieldList['left']['width'] = '40'; +$config->task->datatable->fieldList['left']['width'] = '70'; $config->task->datatable->fieldList['left']['required'] = 'no'; $config->task->datatable->fieldList['progress']['title'] = 'progress'; $config->task->datatable->fieldList['progress']['fixed'] = 'no'; -$config->task->datatable->fieldList['progress']['width'] = '40'; +$config->task->datatable->fieldList['progress']['width'] = '70'; $config->task->datatable->fieldList['progress']['required'] = 'no'; $config->task->datatable->fieldList['progress']['sort'] = 'no'; @@ -130,7 +130,7 @@ $config->task->datatable->fieldList['realStarted']['required'] = 'no'; $config->task->datatable->fieldList['assignedTo']['title'] = 'assignedTo'; $config->task->datatable->fieldList['assignedTo']['fixed'] = 'no'; -$config->task->datatable->fieldList['assignedTo']['width'] = '80'; +$config->task->datatable->fieldList['assignedTo']['width'] = '120'; $config->task->datatable->fieldList['assignedTo']['required'] = 'no'; $config->task->datatable->fieldList['assignedDate']['title'] = 'assignedDate'; @@ -197,5 +197,5 @@ $config->task->datatable->fieldList['lastEditedDate']['required'] = 'no'; $config->task->datatable->fieldList['actions']['title'] = 'actions'; $config->task->datatable->fieldList['actions']['fixed'] = 'right'; -$config->task->datatable->fieldList['actions']['width'] = '180'; +$config->task->datatable->fieldList['actions']['width'] = '156'; $config->task->datatable->fieldList['actions']['required'] = 'yes'; diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index bc7de853a2..7756eba616 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -53,9 +53,9 @@ $lang->task->type = '任务类型'; $lang->task->pri = '优先级'; $lang->task->mailto = '抄送给'; $lang->task->estimate = '最初预计'; -$lang->task->estimateAB = '预'; +$lang->task->estimateAB = '预计'; $lang->task->left = '预计剩余'; -$lang->task->leftAB = '剩'; +$lang->task->leftAB = '剩余'; $lang->task->consumed = '总消耗'; $lang->task->consumedAB = '消耗'; $lang->task->hour = '小时'; diff --git a/module/task/lang/zh-tw.php b/module/task/lang/zh-tw.php index 9c9b30446c..74064b18e4 100644 --- a/module/task/lang/zh-tw.php +++ b/module/task/lang/zh-tw.php @@ -53,9 +53,9 @@ $lang->task->type = '任務類型'; $lang->task->pri = '優先順序'; $lang->task->mailto = '抄送給'; $lang->task->estimate = '最初預計'; -$lang->task->estimateAB = '預'; +$lang->task->estimateAB = '預計'; $lang->task->left = '預計剩餘'; -$lang->task->leftAB = '剩'; +$lang->task->leftAB = '剩餘'; $lang->task->consumed = '總消耗'; $lang->task->consumedAB = '消耗'; $lang->task->hour = '小時'; diff --git a/module/task/model.php b/module/task/model.php index 6b9592c6cc..a4ea4e4a10 100644 --- a/module/task/model.php +++ b/module/task/model.php @@ -2073,18 +2073,30 @@ class taskModel extends model */ public function printCell($col, $task, $users, $browseType, $branchGroups, $modulePairs = array(), $mode = 'datatable', $child = false) { + $canBatchEdit = common::hasPriv('task', 'batchEdit', !empty($task) ? $task : null); + $canBatchClose = (common::hasPriv('task', 'batchClose', !empty($task) ? $task : null) && strtolower($browseType) != 'closedBy'); + $canBatchCancel = common::hasPriv('task', 'batchCancel', !empty($task) ? $task : null); + $canBatchChangeModule = common::hasPriv('task', 'batchChangeModule', !empty($task) ? $task : null); + $canBatchAssignTo = common::hasPriv('task', 'batchAssignTo', !empty($task) ? $task : null); + + $canBatchAction = $canBatchEdit or $canBatchClose or $canBatchCancel or $canBatchChangeModule or $canBatchAssignTo; + $canView = common::hasPriv('task', 'view'); $taskLink = helper::createLink('task', 'view', "taskID=$task->id"); $account = $this->app->user->account; $id = $col->id; if($col->show) { - $class = ''; + $class = "c-{$id}"; if($id == 'status') $class .= ' task-' . $task->status; if($id == 'id') $class .= ' cell-id'; if($id == 'name') $class .= ' text-left'; if($id == 'deadline' and isset($task->delay)) $class .= ' delayed'; - if($id == 'assignedTo' && $task->assignedTo == $account) $class .= ' red'; + if($id == 'assignedTo') + { + $class .= ' c-actions'; + if($task->assignedTo == $account) $class .= ' red'; + } $title = ''; if($id == 'name') $title = " title='{$task->name}'"; @@ -2094,12 +2106,14 @@ class taskModel extends model switch($id) { case 'id': - if($mode == 'table') echo " "; - echo $canView ? html::a($taskLink, sprintf('%03d', $task->id)) : sprintf('%03d', $task->id); + echo "
"; + if($mode == 'table' && $canBatchAction) echo ""; + echo sprintf('%03d', $task->id); + echo '
'; break; case 'pri': - echo ""; - echo $task->pri == '0' ? '' : zget($this->lang->task->priList, $task->pri); + echo ""; + echo zget($this->lang->task->priList, $task->pri, $task->pri); echo ""; break; case 'name': @@ -2146,6 +2160,7 @@ class taskModel extends model echo $task->realStarted; break; case 'assignedTo': + common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task, 'list', '', '', 'iframe', true); echo zget($users, $task->assignedTo); break; case 'assignedDate': @@ -2201,16 +2216,22 @@ class taskModel extends model echo substr($task->lastEditedDate, 5, 11); break; case 'actions': - common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task, 'list', '', '', 'iframe', true); - common::printIcon('task', 'start', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); - - if($browseType == 'needconfirm') + if($task->storyStatus == 'changed' or $browseType == 'needconfirm') { $this->lang->task->confirmStoryChange = $this->lang->confirm; - common::printIcon('task', 'confirmStoryChange', "taskid=$task->id", '', 'list', '', 'hiddenwin'); + common::printIcon('task', 'confirmStoryChange', "taskid=$task->id", '', 'list', '', 'hiddenwin', 'btn-wide'); + break; } - common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); - if($task->status == 'finished') common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); + + echo "
"; + if($task->status == 'wait') common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); + echo "
"; + + if($task->status == 'wait') common::printIcon('task', 'start', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); + if($task->status == 'pause') common::printIcon('task', 'restart', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); + if($task->status == 'done' or $task->status == 'cancel' or $task->status == 'closed') common::printIcon('task', 'close', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); + if($task->status == 'doing') common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'iframe', true); + common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'iframe', true); common::printIcon('task', 'edit', "taskID=$task->id", $task, 'list'); if(empty($task->team) or empty($task->children))