diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 1022241c32..0b48cf9674 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -17,7 +17,6 @@ $lang->action->objectID = 'ID'; $lang->action->objectName = 'Name'; $lang->action->actor = 'Actor'; $lang->action->action = 'Action'; -$lang->action->actionID = 'ActionID'; $lang->action->date = 'Date'; $lang->action->trash = 'Trash'; @@ -99,6 +98,10 @@ $lang->action->desc->diff1 = 'changed %s, old i $lang->action->desc->diff2 = 'changed %s, the diff is:' . "\n" . "
%s
" . "\n"; $lang->action->desc->diff3 = "changed file's name %s to %s."; +/* The desc of actions for link and unlink related case. */ +$lang->action->desc->linkrelatedcase = '$date, linked related case $extra by $actor.' . "\n"; +$lang->action->desc->unlinkrelatedcase = '$date, unlinked related case $extra by $actor.' . "\n"; + /* The action labels. */ $lang->action->label = new stdclass(); $lang->action->label->created = 'created'; @@ -131,6 +134,14 @@ $lang->action->label->changestatus = 'change status'; $lang->action->label->marked = 'edited'; $lang->action->label->linked2project = "link to {$lang->projectCommon}"; $lang->action->label->unlinkedfromproject = "unlik from {$lang->projectCommon}"; +$lang->action->label->linkrelatedbug = "linked related Bug"; +$lang->action->label->unlinkrelatedbug = "unlinked related Bug"; +$lang->action->label->linkrelatedcase = "linked related case"; +$lang->action->label->unlinkrelatedcase = "unlinked related case"; +$lang->action->label->linkrelatedstory = "linked related story"; +$lang->action->label->unlinkrelatedstory = "unlinked related story"; +$lang->action->label->subdividestory = "subdivided story"; +$lang->action->label->unlinkchildstory = "unlinked child story"; $lang->action->label->started = 'started'; $lang->action->label->restarted = 'continued'; $lang->action->label->recordestimate = 'Hours'; diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index 69c9212e27..bbb92b37fa 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -17,7 +17,6 @@ $lang->action->objectID = '对象ID'; $lang->action->objectName = '对象名称'; $lang->action->actor = '操作者'; $lang->action->action = '动作'; -$lang->action->actionID = '记录ID'; $lang->action->date = '日期'; $lang->action->trash = '回收站'; @@ -99,6 +98,10 @@ $lang->action->desc->diff1 = '修改了 %s, $lang->action->desc->diff2 = '修改了 %s,区别为:' . "\n" . "
%s
" . "\n"; $lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n"; +/* 关联用例和移除用例时的历史操作记录。*/ +$lang->action->desc->linkrelatedcase = '$date, 由 $actor 关联相关用例 $extra。' . "\n"; +$lang->action->desc->unlinkrelatedcase = '$date, 由 $actor 移除相关用例 $extra。' . "\n"; + /* 用来显示动态信息。*/ $lang->action->label = new stdclass(); $lang->action->label->created = '创建'; @@ -131,6 +134,14 @@ $lang->action->label->changestatus = '修改状态'; $lang->action->label->marked = '编辑了'; $lang->action->label->linked2project = "关联{$lang->projectCommon}"; $lang->action->label->unlinkedfromproject = "移除{$lang->projectCommon}"; +$lang->action->label->linkrelatedbug = "关联了相关Bug"; +$lang->action->label->unlinkrelatedbug = "移除了相关Bug"; +$lang->action->label->linkrelatedcase = "关联了相关用例"; +$lang->action->label->unlinkrelatedcase = "移除了相关用例"; +$lang->action->label->linkrelatedstory = "关联了相关需求"; +$lang->action->label->unlinkrelatedstory = "移除了相关需求"; +$lang->action->label->subdividestory = "细分了需求"; +$lang->action->label->unlinkchildstory = "移除了细分需求"; $lang->action->label->started = '开始了'; $lang->action->label->restarted = '继续了'; $lang->action->label->recordestimate = '记录了工时'; diff --git a/module/admin/lang/en.php b/module/admin/lang/en.php index 79b1a9e48a..76cd9caa15 100644 --- a/module/admin/lang/en.php +++ b/module/admin/lang/en.php @@ -12,18 +12,11 @@ $lang->admin->common = 'Admin'; $lang->admin->index = 'Index'; $lang->admin->checkDB = 'Repair data'; -$lang->admin->company = 'Company'; -$lang->admin->user = 'User'; -$lang->admin->group = 'Group'; $lang->admin->sso = 'Integrate RanZhi'; $lang->admin->safeIndex = 'Safe'; $lang->admin->checkWeak = 'Check weak'; -$lang->admin->welcome = 'Welcome to ZenTaoPMS.'; - -$lang->admin->browseCompany = 'Browse Company'; $lang->admin->info = new stdclass(); -$lang->admin->info->caption = 'zentao information'; $lang->admin->info->version = 'The current version of the system is %s,'; $lang->admin->info->links = 'You can visit the following link:'; $lang->admin->info->account = 'Your account in zentao community is %s. '; @@ -43,7 +36,6 @@ $lang->admin->register->success = "Register success"; $lang->admin->bind = new stdclass(); $lang->admin->bind->caption = 'Bind with community account'; -$lang->admin->bind->action = 'bind'; $lang->admin->bind->success = "Bind success"; $lang->admin->safe = new stdclass(); diff --git a/module/admin/lang/zh-cn.php b/module/admin/lang/zh-cn.php index 3e0a6b93cf..80132ee740 100644 --- a/module/admin/lang/zh-cn.php +++ b/module/admin/lang/zh-cn.php @@ -12,18 +12,11 @@ $lang->admin->common = '后台管理'; $lang->admin->index = '后台管理首页'; $lang->admin->checkDB = '检查数据库'; -$lang->admin->company = '公司管理'; -$lang->admin->user = '用户管理'; -$lang->admin->group = '分组管理'; $lang->admin->sso = '然之集成'; $lang->admin->safeIndex = '安全'; $lang->admin->checkWeak = '弱口令检查'; -$lang->admin->welcome = '欢迎使用禅道管理软件后台管理系统'; - -$lang->admin->browseCompany = '浏览公司'; $lang->admin->info = new stdclass(); -$lang->admin->info->caption = '禅道系统信息'; $lang->admin->info->version = '当前系统的版本是%s,'; $lang->admin->info->links = '您可以访问以下链接:'; $lang->admin->info->account = "您的禅道社区账户为%s。"; @@ -42,7 +35,6 @@ $lang->admin->register->bind = "如果您已经拥有社区账号,%s关 $lang->admin->register->success = "登记账户成功"; $lang->admin->bind = new stdclass(); -$lang->admin->bind->caption = '关联社区账号'; $lang->admin->bind->action = '关联'; $lang->admin->bind->success = "关联账户成功"; diff --git a/module/backup/lang/en.php b/module/backup/lang/en.php index ba016ef2a8..db9256eb06 100644 --- a/module/backup/lang/en.php +++ b/module/backup/lang/en.php @@ -8,7 +8,6 @@ $lang->backup->restore = 'Restore'; $lang->backup->change = 'Change hold days'; $lang->backup->changeAB = 'change'; -$lang->backup->name = 'Name'; $lang->backup->time = 'Time'; $lang->backup->files = 'Files'; $lang->backup->size = 'Size'; diff --git a/module/backup/lang/zh-cn.php b/module/backup/lang/zh-cn.php index 6fd69a9133..c91f0515d1 100644 --- a/module/backup/lang/zh-cn.php +++ b/module/backup/lang/zh-cn.php @@ -8,7 +8,6 @@ $lang->backup->restore = '还原'; $lang->backup->change = '修改保留时间'; $lang->backup->changeAB = '修改'; -$lang->backup->name = '文件名称'; $lang->backup->time = '备份时间'; $lang->backup->files = '备份文件'; $lang->backup->size = '大小'; diff --git a/module/block/lang/en.php b/module/block/lang/en.php index 4b271326ca..e176ca88e2 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -13,8 +13,6 @@ $lang->block = new stdclass(); $lang->block->num = 'Number'; $lang->block->type = 'Type'; $lang->block->orderBy = 'Order'; -$lang->block->status = 'Status'; -$lang->block->actions = 'Action'; $lang->block->availableBlocks = new stdclass(); diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index 05ed1f789b..4c42af0674 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -13,8 +13,6 @@ $lang->block = new stdclass(); $lang->block->num = '数量'; $lang->block->type = '类型'; $lang->block->orderBy = '排序'; -$lang->block->status = '状态'; -$lang->block->actions = '操作'; $lang->block->availableBlocks = new stdclass(); diff --git a/module/bug/control.php b/module/bug/control.php index 9fc571b773..a797e9e4b1 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -88,7 +88,7 @@ class bug extends control $pager = pager::init($recTotal, $recPerPage, $pageID); /* Get projects. */ - $projects = $this->loadModel('project')->getPairs() + array('0' => ''); + $projects = $this->loadModel('project')->getPairs('empty'); /* Get bugs. */ $bugs = $this->bug->getBugs($productID, $projects, $branch, $browseType, $moduleID, $queryID, $sort, $pager); @@ -105,7 +105,6 @@ class bug extends control /* Build the search form. */ $actionURL = $this->createLink('bug', 'browse', "productID=$productID&branch=$branch&browseType=bySearch&queryID=myQueryID"); $this->bug->buildSearchForm($productID, $this->products, $queryID, $actionURL); - $this->loadModel('search')->setSearchParams($this->config->bug->search); /* Set view. */ $this->view->title = $this->products[$productID] . $this->lang->colon . $this->lang->bug->common; @@ -882,72 +881,66 @@ class bug extends control * Link related bugs. * * @param int $bugID - * @param string $bugs * @param string $browseType * @param int $param * @access public * @return void */ - public function linkBugs($bugID, $bugs = '', $browseType = '', $param = 0) + public function linkBugs($bugID, $browseType = '', $param = 0) { /* Link bugs. */ if(!empty($_POST)) { - $bugs = $this->bug->linkBugs($bugID, $bugs); - if(isonlybody()) die(js::closeModal('parent.parent', '', "function(){parent.parent.loadLinkedBugs('$bugID', '$bugs')}")); + $this->bug->linkBugs($bugID); + if(isonlybody()) die(js::closeModal('parent.parent', '', "function(){parent.parent.loadLinkBugs('$bugID')}")); die(js::locate($this->createLink('bug', 'edit', "bugID=$bugID"), 'parent')); } - /* Get bug, productID and queryID. */ - $bug = $this->bug->getById($bugID); - $productID = $this->product->saveState($bug->product, $this->products); - $queryID = ($browseType == 'bysearch') ? (int)$param : 0; + /* Get bug and queryID. */ + $bug = $this->bug->getById($bugID); + $queryID = ($browseType == 'bysearch') ? (int)$param : 0; /* Set the menu. */ - $this->bug->setMenu($this->products, $productID, $bug->branch); + $this->bug->setMenu($this->products, $bug->product, $bug->branch); /* Build the search form. */ - $actionURL = $this->createLink('bug', 'linkBugs', "bugID=$bugID&bugs=$bugs&browseType=bySearch&queryID=myQueryID", '', true); - $this->bug->buildSearchForm($productID, $this->products, $queryID, $actionURL); - $this->loadModel('search')->setSearchParams($this->config->bug->search); + $actionURL = $this->createLink('bug', 'linkBugs', "bugID=$bugID&browseType=bySearch&queryID=myQueryID", '', true); + $this->bug->buildSearchForm($bug->product, $this->products, $queryID, $actionURL); /* Get bugs to link. */ - $allBugs = array(); - if($browseType == 'bySearch') $allBugs = $this->bug->getBySearch($bug->product, $quueryID, 'id', null); + $bugs2Link = $this->bug->getBugs2Link($bugID, $browseType, $queryID); /* Assign. */ - $this->view->title = $this->lang->bug->linkBugs . "BUG #$bug->id $bug->title - " . $this->products[$productID]; - $this->view->position[] = html::a($this->createLink('product', 'view', "productID=$productID"), $this->products[$productID]); + $this->view->title = $this->lang->bug->linkBugs . "BUG #$bug->id $bug->title - " . $this->products[$bug->product]; + $this->view->position[] = html::a($this->createLink('product', 'view', "productID=$bug->product"), $this->products[$bug->product]); $this->view->position[] = html::a($this->createLink('bug', 'view', "bugID=$bugID"), $bug->title); $this->view->position[] = $this->lang->bug->linkBugs; $this->view->bug = $bug; - $this->view->allBugs = $allBugs; + $this->view->bugs2Link = $bugs2Link; $this->view->users = $this->loadModel('user')->getPairs('noletter'); $this->display(); } /** - * AJAX: get linked bugs. + * AJAX: get linkBugs. * * @param int $bugID - * @param string $linkedBugs * @access public * @return string */ - public function ajaxGetLinkedBugs($bugID, $linkedBugs = '') + public function ajaxGetLinkBugs($bugID) { - /* Get bug and linked bugs. */ - $bug = $this->bug->getById($bugID); - $bugs = $this->bug->getLinkedBugs($linkedBugs); + /* Get linkbugs. */ + $bugs = $this->bug->getLinkBugs($bugID); /* Build linkBug list.*/ $output = ''; - foreach($bugs as $bugId => $title) + foreach($bugs as $bugId => $bugTitle) { $output .= '
  • '; - $output .= html::a(inlink('view', "bugID=$bugId"), "#$bugId " . $title); - $output .= html::a("javascript:deleteLinkedBug($bugID, $bugId)", '', '', "title='{$this->lang->unlink}' style='float:right'"); + $output .= html::a(inlink('view', "bugID=$bugId"), "#$bugId " . $bugTitle, '_blank'); + $output .= html::a("javascript:unlinkBug($bugID, $bugId)", '', '', "title='{$this->lang->unlink}' style='float:right'"); $output .= '
  • '; } @@ -955,24 +948,29 @@ class bug extends control } /** - * AJAX: delete a linked bug. + * AJAX: unlink related bug. * * @param int $bugID - * @param int $deleteBug + * @param int $bug2Unlink * @access public * @return string */ - public function ajaxDeleteLinkedBug($bugID, $deleteBug) + public function ajaxUnlinkBug($bugID, $bug2Unlink = 0) { - /* Get bug and bugs. */ - $bug = $this->bug->getById($bugID); - $bugs = $this->bug->deleteLinkedBug($bugID, $deleteBug); + /* Unlink related bug. */ + $this->bug->unlinkBug($bugID, $bug2Unlink); + + /* Get current linkbugs. */ + $bugs = $this->bug->getLinkBugs($bugID); /* Build linkBug list. */ - $output = ''; - foreach($bugs as $bugId => $title) + $output = ''; + foreach($bugs as $bugId => $bugTitle) { - $output .= '
  • ' . html::a(inlink('view', "bugID=$bugId"), "#$bugId " . $title) . html::a("javascript:deleteLinkedBug($bugID, $bugId)", '', '', "style='float:right'"); + $output .= '
  • '; + $output .= html::a(inlink('view', "bugID=$bugId"), "#$bugId " . $bugTitle, '_blank'); + $output .= html::a("javascript:unlinkBug($bugID, $bugId)", '', '', "title='{$this->lang->unlink}' style='float:right'"); + $output .= '
  • '; } die($output); diff --git a/module/bug/css/linkbugs.css b/module/bug/css/linkbugs.css index 0220a59207..c7e5a58b26 100644 --- a/module/bug/css/linkbugs.css +++ b/module/bug/css/linkbugs.css @@ -1 +1 @@ -#linkBugsForm {min-height: 200px} +#linkBugsForm {min-height: 300px} diff --git a/module/bug/js/edit.js b/module/bug/js/edit.js index 9893463fcd..132c554553 100644 --- a/module/bug/js/edit.js +++ b/module/bug/js/edit.js @@ -56,29 +56,28 @@ function loadModuleRelated() } /** - * Delete a linked bug. + * Unlink related bug. * * @param int $bugID - * @param int $deleteBug + * @param int $bug2Unlink * @access public * @return void */ -function deleteLinkedBug(bugID, deleteBug) +function unlinkBug(bugID, bug2Unlink) { - deleteLink = createLink('bug', 'ajaxDeleteLinkedBug', 'bugID=' + bugID + '&deleteBug=' + deleteBug); - $('#linkBugBox').load(deleteLink); + link = createLink('bug', 'ajaxUnlinkBug', 'bugID=' + bugID + '&bug2Unlink=' + bug2Unlink); + $('#linkBugBox').load(link); } /** - * Load linked bugs. + * Load linkBugs. * * @param int $bugID - * @param string $linkedBugs * @access public * @return void */ -function loadLinkedBugs(bugID, linkedBugs) +function loadLinkBugs(bugID) { - bugLink = createLink('bug', 'ajaxGetLinkedBugs', 'bugID=' + bugID + '&linkedBugs=' + linkedBugs); + bugLink = createLink('bug', 'ajaxGetLinkBugs', 'bugID=' + bugID); $('#linkBugBox').load(bugLink); } diff --git a/module/bug/lang/en.php b/module/bug/lang/en.php index 8382dc6a98..42c4d4ad5a 100644 --- a/module/bug/lang/en.php +++ b/module/bug/lang/en.php @@ -15,10 +15,8 @@ $lang->bug->id = 'ID'; $lang->bug->product = $lang->productCommon; $lang->bug->productplan = 'Plan'; $lang->bug->module = 'Module'; -$lang->bug->path = 'Path'; $lang->bug->project = $lang->projectCommon; $lang->bug->story = 'Story'; -$lang->bug->storyVersion = 'Story Version'; $lang->bug->task = 'Task'; $lang->bug->title = 'Title'; $lang->bug->severity = 'Severity'; @@ -26,22 +24,16 @@ $lang->bug->severityAB = 'S'; $lang->bug->pri = 'Priority'; $lang->bug->type = 'Type'; $lang->bug->os = 'OS'; -$lang->bug->plan = 'Plan'; -$lang->bug->hardware = 'Hardware'; $lang->bug->browser = 'Browser'; -$lang->bug->machine = 'Machine'; -$lang->bug->found = 'How found'; $lang->bug->steps = 'Steps'; $lang->bug->status = 'Status'; $lang->bug->statusAB = 'Status'; $lang->bug->activatedCount = 'Activated count'; -$lang->bug->activatedCountAB = 'Activated count'; $lang->bug->confirmed = 'Confirmed'; $lang->bug->toTask = 'To task'; $lang->bug->toStory = 'To story'; $lang->bug->mailto = 'Mailto'; $lang->bug->openedBy = 'Opened By'; -$lang->bug->openedByAB = 'Opened'; $lang->bug->openedDate = 'Opened date'; $lang->bug->openedDateAB = 'Date'; $lang->bug->openedBuild = 'Opened Build'; @@ -58,7 +50,6 @@ $lang->bug->closedBy = 'Closed By'; $lang->bug->closedDate = 'Closed Date'; $lang->bug->duplicateBug = 'Duplicate'; $lang->bug->lastEditedBy = 'Last Edited By'; -$lang->bug->lastEditedDate = 'Last Edited Date'; $lang->bug->linkBug = 'Related'; $lang->bug->linkBugs = 'Link bugs'; $lang->bug->case = 'Case'; @@ -92,15 +83,9 @@ $lang->bug->delete = 'Delete Bug'; $lang->bug->deleted = 'Deleted'; $lang->bug->saveTemplate = 'Save template'; $lang->bug->deleteTemplate = 'Delete template'; -$lang->bug->customFields = 'Custom'; -$lang->bug->restoreDefault = 'Default'; -$lang->bug->ajaxGetUserBugs = 'API: My Bugs'; -$lang->bug->ajaxGetModuleOwner = 'API: Get module default owner'; $lang->bug->confirmStoryChange = 'Confirm Story Change'; /* Browse tabs. */ -$lang->bug->selectProduct = "Select {$lang->productCommon}"; -$lang->bug->byModule = 'ByModule'; $lang->bug->assignToMe = 'MyBugs'; $lang->bug->openedByMe = 'MyOpen'; $lang->bug->resolvedByMe = 'MyResolve'; @@ -112,51 +97,30 @@ $lang->bug->unclosed = 'Unclosed'; $lang->bug->longLifeBugs = 'Longlife'; $lang->bug->postponedBugs = 'Postponed'; $lang->bug->allBugs = 'Allbug'; -$lang->bug->moduleBugs = 'ByModule'; $lang->bug->byQuery = 'Search'; $lang->bug->needConfirm = 'StoryChanged'; $lang->bug->allProduct = "All {$lang->productCommon}s"; $lang->bug->ditto = 'Ditto'; /* Labels. */ -$lang->bug->lblProductAndModule = "{$lang->productCommon}&Module"; -$lang->bug->lblProjectAndTask = "{$lang->projectCommon}&Task"; -$lang->bug->lblStory = 'Story'; -$lang->bug->lblTypeAndSeverity = 'Type&Severity'; -$lang->bug->lblSystemBrowserAndHardware = 'OS&Browser'; $lang->bug->lblAssignedTo = 'Assigned to'; $lang->bug->lblMailto = 'Mailto'; $lang->bug->lblLastEdited = 'Last edited'; $lang->bug->lblResolved = 'Resolved'; -$lang->bug->lblAllFields = 'All Fields'; -$lang->bug->lblCustomFields = 'Custom Fields'; $lang->bug->allUsers = 'All users'; $lang->bug->allBuilds = 'All'; /* Legends. */ $lang->bug->legendBasicInfo = 'Basic info'; -$lang->bug->legendMailto = 'Mailto'; $lang->bug->legendAttatch = 'Files'; -$lang->bug->legendLinkBugs = 'Related bug'; $lang->bug->legendPrjStoryTask = "{$lang->projectCommon}, story & task"; -$lang->bug->legendCases = 'Related case'; $lang->bug->legendSteps = 'Steps'; -$lang->bug->legendAction = 'Action'; -$lang->bug->legendHistory = 'History'; $lang->bug->legendComment = 'Comment'; $lang->bug->legendLife = 'Lifetime'; $lang->bug->legendMisc = 'Misc'; /* Action buttons. */ $lang->bug->buttonConfirm = 'Confirm'; -$lang->bug->buttonCopy = 'Copy'; -$lang->bug->buttonAssign = 'Assgin'; -$lang->bug->buttonEdit = 'Edit'; -$lang->bug->buttonActivate = 'Activate'; -$lang->bug->buttonResolve = 'Resolve'; -$lang->bug->buttonClose = 'Close'; -$lang->bug->buttonToList = 'Back'; -$lang->bug->buttonCreateTestcase = 'Create Case'; /* Confirm messags. */ $lang->bug->confirmChangeProduct = "Change {$lang->productCommon} will change {$lang->projectCommon}, task and story also, are you sure?"; @@ -360,8 +324,8 @@ $lang->bug->action->tostory = array('main' => '$date, To story by bug->action->totask = array('main' => '$date, To task by $actor, ID is $extra.'); $lang->bug->action->linked2plan = array('main' => '$date, Link to plan by $actor,ID is $extra。'); $lang->bug->action->unlinkedfromplan = array('main' => '$date, Unlink from plan $extra by $actor.'); -$lang->bug->action->linked2bug = array('main' => '$date, linked related bugs $extra by $actor.'); -$lang->bug->action->unlinkedbug = array('main' => '$date, removed related bugs $extra by $actor.'); +$lang->bug->action->linkrelatedbug = array('main' => '$date, link related bug $extra by $actor.'); +$lang->bug->action->unlinkrelatedbug = array('main' => '$date, unlink related bug $extra by $actor.'); $lang->bug->placeholder = new stdclass(); $lang->bug->placeholder->chooseBuilds = 'Choose builds...'; diff --git a/module/bug/lang/zh-cn.php b/module/bug/lang/zh-cn.php index dae8bbb8e6..7e3e36cb16 100644 --- a/module/bug/lang/zh-cn.php +++ b/module/bug/lang/zh-cn.php @@ -15,10 +15,8 @@ $lang->bug->id = 'Bug编号'; $lang->bug->product = '所属' . $lang->productCommon; $lang->bug->productplan = '所属计划'; $lang->bug->module = '所属模块'; -$lang->bug->path = '模块路径'; $lang->bug->project = '所属' . $lang->projectCommon; $lang->bug->story = '相关需求'; -$lang->bug->storyVersion = '需求版本'; $lang->bug->task = '相关任务'; $lang->bug->title = 'Bug标题'; $lang->bug->severity = '严重程度'; @@ -26,22 +24,16 @@ $lang->bug->severityAB = '级别'; $lang->bug->pri = '优先级'; $lang->bug->type = 'Bug类型'; $lang->bug->os = '操作系统'; -$lang->bug->plan = '所属计划'; -$lang->bug->hardware = '硬件平台'; $lang->bug->browser = '浏览器'; -$lang->bug->machine = '机器硬件'; -$lang->bug->found = '如何发现'; $lang->bug->steps = '重现步骤'; $lang->bug->status = 'Bug状态'; $lang->bug->statusAB = '状态'; $lang->bug->activatedCount = '激活次数'; -$lang->bug->activatedCountAB = '激活次数'; $lang->bug->confirmed = '是否确认'; $lang->bug->toTask = '转任务'; $lang->bug->toStory = '转需求'; $lang->bug->mailto = '抄送给'; $lang->bug->openedBy = '由谁创建'; -$lang->bug->openedByAB = '创建'; $lang->bug->openedDate = '创建日期'; $lang->bug->openedDateAB = '创建日期'; $lang->bug->openedBuild = '影响版本'; @@ -58,7 +50,6 @@ $lang->bug->closedBy = '由谁关闭'; $lang->bug->closedDate = '关闭日期'; $lang->bug->duplicateBug = '重复ID'; $lang->bug->lastEditedBy = '最后修改者'; -$lang->bug->lastEditedDate = '最后修改日期'; $lang->bug->linkBug = '相关Bug'; $lang->bug->linkBugs = '关联Bug'; $lang->bug->case = '相关用例'; @@ -92,15 +83,9 @@ $lang->bug->delete = '删除'; $lang->bug->deleted = '已删除'; $lang->bug->saveTemplate = '保存模板'; $lang->bug->deleteTemplate = '删除模板'; -$lang->bug->customFields = '自定义字段'; -$lang->bug->restoreDefault = '恢复默认'; -$lang->bug->ajaxGetUserBugs = '接口:我的Bug'; -$lang->bug->ajaxGetModuleOwner = '接口:获得模块的默认指派人'; $lang->bug->confirmStoryChange = '确认需求变动'; /* 查询条件列表。*/ -$lang->bug->selectProduct = '请选择' . $lang->productCommon; -$lang->bug->byModule = '按模块'; $lang->bug->assignToMe = '指派给我'; $lang->bug->openedByMe = '由我创建'; $lang->bug->resolvedByMe = '由我解决'; @@ -112,51 +97,30 @@ $lang->bug->unclosed = '未关闭'; $lang->bug->longLifeBugs = '久未处理'; $lang->bug->postponedBugs = '被延期'; $lang->bug->allBugs = '所有'; -$lang->bug->moduleBugs = '按模块'; $lang->bug->byQuery = '搜索'; $lang->bug->needConfirm = '需求变动'; $lang->bug->allProduct = '所有' . $lang->productCommon; $lang->bug->ditto = '同上'; /* 页面标签。*/ -$lang->bug->lblProductAndModule = $lang->productCommon . '模块'; -$lang->bug->lblProjectAndTask = $lang->projectCommon . '任务'; -$lang->bug->lblStory = '相关需求'; -$lang->bug->lblTypeAndSeverity = '类型/严重程度'; -$lang->bug->lblSystemBrowserAndHardware = '系统/浏览器'; $lang->bug->lblAssignedTo = '当前指派'; $lang->bug->lblMailto = '抄送给'; $lang->bug->lblLastEdited = '最后修改'; $lang->bug->lblResolved = '由谁解决'; -$lang->bug->lblAllFields = '所有字段'; -$lang->bug->lblCustomFields = '自定义字段'; $lang->bug->allUsers = '所有用户'; $lang->bug->allBuilds = '所有'; /* legend列表。*/ $lang->bug->legendBasicInfo = '基本信息'; -$lang->bug->legendMailto = '抄送给'; $lang->bug->legendAttatch = '附件'; -$lang->bug->legendLinkBugs = '相关Bug'; $lang->bug->legendPrjStoryTask = $lang->projectCommon . '/需求/任务'; -$lang->bug->legendCases = '相关用例'; $lang->bug->legendSteps = '重现步骤'; -$lang->bug->legendAction = '操作'; -$lang->bug->legendHistory = '历史记录'; $lang->bug->legendComment = '备注'; $lang->bug->legendLife = 'BUG的一生'; $lang->bug->legendMisc = '其他相关'; /* 功能按钮。*/ $lang->bug->buttonConfirm = '确认'; -$lang->bug->buttonCopy = '复制'; -$lang->bug->buttonAssign = '指派'; -$lang->bug->buttonEdit = '编辑'; -$lang->bug->buttonActivate = '激活'; -$lang->bug->buttonResolve = '解决'; -$lang->bug->buttonClose = '关闭'; -$lang->bug->buttonToList = '返回'; -$lang->bug->buttonCreateTestcase = '转用例'; /* 交互提示。*/ $lang->bug->confirmChangeProduct = "修改{$lang->productCommon}会导致相应的{$lang->projectCommon}、需求和任务发生变化,确定吗?"; @@ -360,8 +324,8 @@ $lang->bug->action->tostory = array('main' => '$date, 由 $acto $lang->bug->action->totask = array('main' => '$date, 由 $actor 导入为任务,编号为 $extra。'); $lang->bug->action->linked2plan = array('main' => '$date, 由 $actor 关联到计划 $extra。'); $lang->bug->action->unlinkedfromplan = array('main' => '$date, 由 $actor 从计划 $extra 移除。'); -$lang->bug->action->linked2bug = array('main' => '$date, 由 $actor 关联相关Bug $extra。'); -$lang->bug->action->unlinkedbug = array('main' => '$date, 由 $actor 移除相关Bug $extra。'); +$lang->bug->action->linkrelatedbug = array('main' => '$date, 由 $actor 关联相关Bug $extra。'); +$lang->bug->action->unlinkrelatedbug = array('main' => '$date, 由 $actor 移除相关Bug $extra。'); $lang->bug->placeholder = new stdclass(); $lang->bug->placeholder->chooseBuilds = '选择相关版本...'; diff --git a/module/bug/model.php b/module/bug/model.php index faab114289..28cefef577 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -795,61 +795,88 @@ class bugModel extends model } /** - * Link bugs. + * Link related bugs. * * @param int $bugID - * @param string $bugs * @access public - * @return string + * @return void */ - public function linkBugs($bugID, $bugs = '') + public function linkBugs($bugID) { - if($this->post->bugs == false) return $bugs; + if($this->post->bugs == false) return; - $bugs = implode(',', $this->post->bugs) . ',' . trim($bugs, ','); + $bug = $this->getById($bugID); + $bugs2Link = $this->post->bugs; + + $bugs = implode(',', $bugs2Link) . ',' . trim($bug->linkBug, ','); $this->dao->update(TABLE_BUG)->set('linkBug')->eq(trim($bugs, ','))->where('id')->eq($bugID)->exec(); if(dao::isError()) die(js::error(dao::getError())); - $this->loadModel('action')->create('bug', $bugID, 'linked2Bug', '', implode(',', $this->post->bugs)); - - return $bugs; + $this->loadModel('action')->create('bug', $bugID, 'linkRelatedBug', '', implode(',', $bugs2Link)); } /** - * Delete a linked bug. + * Get bugs to link. * * @param int $bugID - * @param int $deleteBug + * @param string $browseType + * @param int $queryID * @access public * @return array */ - public function deleteLinkedBug($bugID, $deleteBug = 0) + public function getBugs2Link($bugID, $browseType = 'bySearch', $queryID) { - $bug = $this->getById($bugID); + if($browseType == 'bySearch') + { + $bug = $this->getById($bugID); + $bugs2Link = $this->getBySearch($bug->product, $queryID, 'id', null); + foreach($bugs2Link as $key => $bug2Link) + { + if($bug2Link->id == $bugID) unset($bugs2Link[$key]); + if(in_array($bug2Link->id, explode(',', $bug->linkBug))) unset($bugs2Link[$key]); + } + return $bugs2Link; + } + else + { + return array(); + } + } + + /** + * Unlink related bug. + * + * @param int $bugID + * @param int $bug2Unlink + * @access public + * @return void + */ + public function unlinkBug($bugID, $bug2Unlink = 0) + { + $bug = $this->getById($bugID); $bugs = explode(',', trim($bug->linkBug, ',')); foreach($bugs as $key => $bugId) { - if($bugId == $deleteBug) unset($bugs[$key]); + if($bugId == $bug2Unlink) unset($bugs[$key]); } $bugs = implode(',', $bugs); $this->dao->update(TABLE_BUG)->set('linkBug')->eq($bugs)->where('id')->eq($bugID)->exec(); if(dao::isError()) die(js::error(dao::getError())); - $this->loadModel('action')->create('bug', $bugID, 'unLinkedBug', '', $deleteBug); - - return $this->getLinkedBugs($bugs); + $this->loadModel('action')->create('bug', $bugID, 'unlinkRelatedBug', '', $bug2Unlink); } /** - * Get linked bugs. + * Get linkBugs. * - * @param string $bugs + * @param int $bugID * @access public * @return array */ - public function getLinkedBugs($bugs) + public function getLinkBugs($bugID) { - return $this->dao->select('id, title')->from(TABLE_BUG)->where('id')->in($bugs)->fetchPairs(); + $bug = $this->getById($bugID); + return $this->dao->select('id, title')->from(TABLE_BUG)->where('id')->in($bug->linkBug)->fetchPairs(); } /** @@ -882,6 +909,8 @@ class bugModel extends model $this->config->bug->search['fields']['branch'] = $this->lang->product->branch; $this->config->bug->search['params']['branch']['values'] = array('' => '') + $this->loadModel('branch')->getPairs($productID, 'noempty'); } + + $this->loadModel('search')->setSearchParams($this->config->bug->search); } /** diff --git a/module/bug/view/edit.html.php b/module/bug/view/edit.html.php index ac2c81d1b1..38df2ea8d0 100644 --- a/module/bug/view/edit.html.php +++ b/module/bug/view/edit.html.php @@ -233,7 +233,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild); bug->linkBug;?> - createLink('bug', 'linkBugs', "bugID=$bug->id&bugs=$bug->linkBug", '', true), $lang->bug->linkBugs, '', "data-toggle='modal' data-type='iframe' data-width='85%'");?> + createLink('bug', 'linkBugs', "bugID=$bug->id", '', true), $lang->bug->linkBugs, '', "data-toggle='modal' data-type='iframe' data-width='95%'");?>