diff --git a/module/bug/config.php b/module/bug/config.php index 6ac9bc0717..4008b48e33 100644 --- a/module/bug/config.php +++ b/module/bug/config.php @@ -38,7 +38,7 @@ $config->bug->list->exportFields = 'id, product, branch, module, project, story, lastEditedDate, files'; $config->bug->list->customCreateFields = 'project,story,task,pri,severity,os,browser,deadline,mailto,keywords'; -$config->bug->list->customBatchCreateFields = 'module,project,steps,type,pri,severity,os,browser,keywords'; +$config->bug->list->customBatchCreateFields = 'module,project,steps,type,pri,deadline,severity,os,browser,keywords'; $config->bug->list->customBatchEditFields = 'type,severity,pri,productplan,assignedTo,deadline,status,resolvedBy,resolution,os,browser,keywords'; $config->bug->custom = new stdclass(); diff --git a/module/bug/model.php b/module/bug/model.php index d812de7b2d..4b84c3d816 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -163,6 +163,7 @@ class bugModel extends model $bug->openedBuild = implode(',', $data->openedBuilds[$i]); $bug->color = $data->color[$i]; $bug->title = $data->title[$i]; + $bug->deadline = $data->deadlines[$i]; $bug->steps = nl2br($data->stepses[$i]); $bug->type = $data->types[$i]; $bug->pri = $data->pris[$i]; diff --git a/module/bug/view/batchcreate.html.php b/module/bug/view/batchcreate.html.php index 8e61ff3e94..73bd313475 100644 --- a/module/bug/view/batchcreate.html.php +++ b/module/bug/view/batchcreate.html.php @@ -11,6 +11,7 @@ */ ?> +
icons['bug']);?> @@ -27,11 +28,20 @@
config->bug->create->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->bug->list->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } +} ?>
@@ -40,16 +50,44 @@ foreach(explode(',', $showFields) as $field) - + - - - - - - - + + + + + + + + @@ -89,7 +127,8 @@ foreach(explode(',', $showFields) as $field) - + + @@ -122,7 +161,8 @@ foreach(explode(',', $showFields) as $field) - + + @@ -151,7 +191,8 @@ foreach(explode(',', $showFields) as $field) - + + diff --git a/module/bug/view/batchedit.html.php b/module/bug/view/batchedit.html.php index 2791797bac..78dbacb25a 100644 --- a/module/bug/view/batchedit.html.php +++ b/module/bug/view/batchedit.html.php @@ -26,11 +26,20 @@
config->bug->edit->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->bug->list->customBatchEditFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } +} $columns = count($visibleFields) + 2; ?> "> @@ -38,20 +47,47 @@ $columns = count($visibleFields) + 2; - - - + + + - - - + + + - - - + + + diff --git a/module/bug/view/browse.html.php b/module/bug/view/browse.html.php index b7882ae84c..5851518e7e 100644 --- a/module/bug/view/browse.html.php +++ b/module/bug/view/browse.html.php @@ -162,7 +162,7 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
-
+
icons['product']);?>
diff --git a/module/company/view/browse.html.php b/module/company/view/browse.html.php index 50df24cf39..df5bedc55c 100644 --- a/module/company/view/browse.html.php +++ b/module/company/view/browse.html.php @@ -23,7 +23,7 @@ js::set('confirmDelete', $lang->user->confirmDelete);
-
icons['dept']);?> dept->common;?>
+
icons['dept']);?> dept->common;?>
dept->manage);?>
diff --git a/module/custom/config.php b/module/custom/config.php index 52f94670e7..66f30bfb46 100644 --- a/module/custom/config.php +++ b/module/custom/config.php @@ -30,7 +30,7 @@ $config->custom->requiredModules[85] = 'user'; $config->custom->fieldList['product']['create'] = 'name,code,line,PO,QD,RD,type,desc'; $config->custom->fieldList['product']['edit'] = 'name,code,line,PO,QD,RD,type,desc,status'; -$config->custom->fieldList['story']['create'] = 'product,plan,source,sourceNote,title,pri,estimate,mailto,keywords,spec,verify'; +$config->custom->fieldList['story']['create'] = 'module,plan,source,title,pri,estimate,keywords,spec,verify'; $config->custom->fieldList['story']['change'] = 'title,spec,verify,comment'; $config->custom->fieldList['story']['close'] = 'closedReason,comment'; $config->custom->fieldList['story']['review'] = 'reviewedDate,assignedTo,reviewedBy,comment'; @@ -38,16 +38,16 @@ $config->custom->fieldList['productplan'] = 'title,begin,end,desc'; $config->custom->fieldList['release'] = 'name,build,date,desc'; $config->custom->fieldList['project']['create'] = 'name,code,begin,end,days,type,desc'; $config->custom->fieldList['project']['edit'] = 'name,code,begin,end,days,type,desc,PO,PM,QD,RD'; -$config->custom->fieldList['task']['create'] = 'type,story,name,pri,estimate,desc,estStarted,deadline,mailto'; -$config->custom->fieldList['task']['edit'] = 'type,assignedTo,story,name,pri,estimate,desc,estStarted,deadline,mailto'; +$config->custom->fieldList['task']['create'] = 'type,story,name,pri,estimate,desc,estStarted,deadline'; +$config->custom->fieldList['task']['edit'] = 'type,name,pri,estimate,estStarted,deadline'; $config->custom->fieldList['task']['finish'] = 'consumed,finishedDate,comment'; $config->custom->fieldList['task']['activate'] = 'assignedTo,left,comment'; $config->custom->fieldList['build'] = 'product,name,builder,date,scmPath,filePath,desc'; -$config->custom->fieldList['bug']['create'] = 'product,project,openedBuild,assignedTo,deadline,type,os,browser,title,severity,pri,steps,story,task,mailto,keywords'; -$config->custom->fieldList['bug']['edit'] = 'product,plan,project,openedBuild,assignedTo,deadline,type,os,browser,title,severity,pri,steps,story,task,mailto,keywords'; +$config->custom->fieldList['bug']['create'] = 'module,project,openedBuild,deadline,type,os,browser,title,severity,pri,steps,keywords'; +$config->custom->fieldList['bug']['edit'] = 'productplan,openedBuild,assignedTo,deadline,type,os,browser,title,severity,pri,steps,keywords'; $config->custom->fieldList['bug']['resolve'] = 'resolution,resolvedBuild,resolvedDate,assignedTo,comment'; -$config->custom->fieldList['testcase']['create'] = 'product,type,stage,story,title,pri,precondition,keywords'; -$config->custom->fieldList['testcase']['edit'] = 'product,type,stage,story,title,pri,precondition,keywords,status'; +$config->custom->fieldList['testcase']['create'] = 'type,stage,story,title,pri,precondition,keywords'; +$config->custom->fieldList['testcase']['edit'] = 'type,stage,story,title,pri,precondition,keywords,status'; $config->custom->fieldList['testsuite'] = 'name,desc'; $config->custom->fieldList['testcase']['createcase'] = 'lib,type,stage,title,pri,precondition,keywords'; $config->custom->fieldList['testreport'] = 'begin,end,owner,members,title,report'; diff --git a/module/doc/view/browse.html.php b/module/doc/view/browse.html.php index 18df8a5cae..6852d77255 100644 --- a/module/doc/view/browse.html.php +++ b/module/doc/view/browse.html.php @@ -57,7 +57,7 @@ var browseType = '';
-
+
doc->manageType);?>
diff --git a/module/doc/view/index.html.php b/module/doc/view/index.html.php index d16ba749e7..7ddfd0bceb 100644 --- a/module/doc/view/index.html.php +++ b/module/doc/view/index.html.php @@ -41,7 +41,7 @@ $i = 0; $subLibCount = count($subLibs['product'][$product->id]); ?> -
+
{$lang->doclib->product} " : ''; echo html::a(inlink('objectLibs', "type=product&objectID=$product->id&from=doc"), $label . $product->name, '', "title='{$product->name}'"); diff --git a/module/product/model.php b/module/product/model.php index 56f7fce0e0..5f40d8fc07 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -81,7 +81,7 @@ class productModel extends model setCookie("lastProduct", $productID, $this->config->cookieLife, $this->config->webRoot); $currentProduct = $this->getById($productID); $this->session->set('currentProductType', $currentProduct->type); - $output = "{$currentProduct->name}
"; + $output = "{$currentProduct->name}
"; if($isMobile) $output = "{$currentProduct->name} "; if($currentProduct->type == 'normal') unset($this->lang->product->menu->branch); if($currentProduct->type != 'normal') diff --git a/module/product/view/batchedit.html.php b/module/product/view/batchedit.html.php index 8fbbf58909..9e64e6577c 100755 --- a/module/product/view/batchedit.html.php +++ b/module/product/view/batchedit.html.php @@ -20,10 +20,19 @@
config->product->edit->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->product->customBatchEditFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } } ?> '> @@ -33,18 +42,39 @@ foreach(explode(',', $showFields) as $field)
- - - - - - - + + + + + + + - + diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index dc1d2f2ca8..5c42c33bc9 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -100,7 +100,7 @@
-
icons['product']);?>
+
icons['product']);?>
diff --git a/module/project/model.php b/module/project/model.php index 5e6e5a0c54..2ef1fb26b7 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -126,7 +126,7 @@ class projectModel extends model setCookie("lastProject", $projectID, $this->config->cookieLife, $this->config->webRoot); $currentProject = $this->getById($projectID); - $output = "{$currentProject->name}
"; + $output = "{$currentProject->name}
"; if($isMobile) $output = "{$currentProject->name} "; return $output; } diff --git a/module/project/view/batchedit.html.php b/module/project/view/batchedit.html.php index df024c668b..e8ac03801f 100755 --- a/module/project/view/batchedit.html.php +++ b/module/project/view/batchedit.html.php @@ -21,11 +21,20 @@
config->project->edit->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->project->customBatchEditFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } +} $minWidth = (count($visibleFields) > 5) ? 'w-150px' : ''; ?> '> @@ -35,17 +44,38 @@ $minWidth = (count($visibleFields) > 5) ? 'w-150px' : '';
- - - - - + + + + + - + - + diff --git a/module/story/view/batchcreate.html.php b/module/story/view/batchcreate.html.php index a102b139c0..60ee3966be 100644 --- a/module/story/view/batchcreate.html.php +++ b/module/story/view/batchcreate.html.php @@ -27,12 +27,22 @@ config->story->create->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->story->list->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } +} if($this->story->checkForceReview()) unset($visibleFields['review']); +unset($visibleFields['module']); ?>
idAB;?> '> product->branch;?> bug->module;?> '>bug->project;?>'> + bug->project;?> + ";?> + bug->openedBuild;?> bug->title;?> '> bug->steps;?>'> typeAB;?>'> bug->pri;?>'>bug->severity;?>'> bug->os;?>'>bug->browser;?>'> bug->keywords;?>'> + bug->deadline;?> + ";?> + '> + bug->steps;?> + ";?> + '> + typeAB;?> + ";?> + '> + bug->pri;?> + ";?> + '> + bug->severity;?> + ";?> + '> + bug->os;?> + ";?> + '> + bug->browser;?> + ";?> + '> + bug->keywords;?> + ";?> +
'> '>'> ' style='overflow:visible'> bug->typeList, $type, "class='form-control chosen'");?> ' style='overflow:visible'> bug->priList, $pri, "class='form-control chosen'");?> ' style='overflow:visible'>bug->severityList, '', "class='form-control chosen'");?> '> '>'> ' style='overflow:visible'> bug->typeList, $type, "class='form-control chosen'");?> ' style='overflow:visible'> bug->priList, $pri, "class='form-control chosen'");?> ' style='overflow:visible'>bug->severityList, '', "class='form-control chosen'");?> '> '>'> ' style='overflow:visible'> bug->typeList, $type, "class='form-control'");?> ' style='overflow:visible'> bug->priList, '', "class='form-control'");?> ' style='overflow:visible'>bug->severityList, '', "class='form-control'");?>
idAB;?>'>bug->type;?>'>bug->severityAB;?>'>bug->pri;?>'> + bug->type;?> + ";?> + '> + bug->severityAB;?> + ";?> + '> + bug->pri;?> + ";?> + = 10) echo "class='w-150px'"?>>bug->title;?> '>bug->branch;?> '>bug->productplan;?>'>bug->assignedTo;?>'>bug->deadline;?>'> + bug->productplan;?> + ";?> + '> + bug->assignedTo;?> + ";?> + '> + bug->deadline;?> + ";?> + '>bug->status;?>'>bug->os;?>'>bug->browser;?>'>bug->keywords;?>'> + bug->os;?> + ";?> + '> + bug->browser;?> + ";?> + '> + bug->keywords;?> + ";?> + '>bug->resolvedByAB;?> '>bug->resolutionAB;?>
idAB;?> product->name;?> product->code;?> product->line;?>'>product->PO;?>'>product->QD;?>'>product->RD;?>'>product->type;?>'>product->status;?>'>product->desc;?> + product->line;?> + ";?> + '> + product->PO;?> + ";?> + '> + product->QD;?> + ";?> + '> + product->RD;?> + ";?> + '> + product->type;?> + ";?> + '> + product->status;?> + ";?> + '> + product->desc;?> + ";?> + product->order;?>
name, "class='form-control' autocomplete='off'");?> code, "class='form-control' autocomplete='off'");?> idAB;?> project->name;?> project->code;?> '>project->PM;?>'>project->PO;?>'>project->QD;?>'>project->RD;?>'>project->type;?>'> + project->PM;?> + ";?> + '> + project->PO;?> + ";?> + '> + project->QD;?> + ";?> + '> + project->RD;?> + ";?> + '> + project->type;?> + ";?> + '>project->status;?> project->begin;?> project->end;?> '> project->desc;?>'> + project->desc;?> + ";?> + '>project->teamname;?>'>project->days;?>'> + project->days;?> + ";?> + project->order;?>
@@ -41,15 +51,36 @@ if($this->story->checkForceReview()) unset($visibleFields['review']); - + - - - - - + + + + + - + @@ -62,7 +93,7 @@ if($this->story->checkForceReview()) unset($visibleFields['review']); - + - + - + - type != 'ops'):?> + type != 'ops'):?> + + - - - - - + + + + + diff --git a/module/task/view/batchedit.html.php b/module/task/view/batchedit.html.php index 46ddcb32cc..ba9ac08331 100755 --- a/module/task/view/batchedit.html.php +++ b/module/task/view/batchedit.html.php @@ -26,11 +26,20 @@
config->task->edit->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->task->custom->batchEditFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } +} ?> ">
idAB;?> '>product->branch;?> story->module;?> '>story->plan;?>'> + story->plan;?> + ";?> + = 9) echo "class='w-200px'"?>>story->title;?> '>story->spec;?>'>story->source;?>'>story->verify;?>'>story->pri;?>'>story->estimate;?>'> + story->spec;?> + ";?> + '> + story->source;?> + ";?> + '> + story->verify;?> + ";?> + '> + story->pri;?> + ";?> + '> + story->estimate;?> + ";?> + '>story->review;?>'>story->keywords;?>'> + story->keywords;?> + ";?> +
'>' style='overflow:visible'> ' style='overflow:visible'>
@@ -94,7 +125,7 @@ if($this->story->checkForceReview()) unset($visibleFields['review']);
' style='overflow:visible'>' style='overflow:visible'> ' style='overflow:visible'>
@@ -122,7 +153,7 @@ if($this->story->checkForceReview()) unset($visibleFields['review']);
%s ' style='overflow:visible'>' style='overflow:visible'> ' style='overflow:visible'>
diff --git a/module/task/view/batchcreate.html.php b/module/task/view/batchcreate.html.php index c36983494c..3c5c3c9673 100644 --- a/module/task/view/batchcreate.html.php +++ b/module/task/view/batchcreate.html.php @@ -24,11 +24,20 @@
config->task->create->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->task->custom->batchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } +} $colspan = count($visibleFields) + 3; $hiddenStory = ((isonlybody() and $storyID) || $this->config->global->flow == 'onlyTask') ? ' hidden' : ''; if($hiddenStory and isset($visibleFields['story'])) $colspan -= 1; @@ -39,15 +48,35 @@ if($hiddenStory and isset($visibleFields['story'])) $colspan -= 1;
idAB;?> '>task->module?>'>task->story;?>'> + task->story;?> + ";?> + task->name;?> typeAB;?> '>task->assignedTo;?>'>task->estimateAB;?>'>task->estStarted;?>'>task->deadline;?>'>task->desc;?>'>task->pri;?>'> + task->estimateAB;?> + ";?> + '> + task->estStarted;?> + ";?> + '> + task->deadline;?> + ";?> + '> + task->desc;?> + ";?> + '> + task->pri;?> + ";?> +
@@ -42,12 +51,24 @@ foreach(explode(',', $showFields) as $field) - - + + - - + + diff --git a/module/testcase/view/batchcreate.html.php b/module/testcase/view/batchcreate.html.php index 774f0dc58b..919feb7754 100644 --- a/module/testcase/view/batchcreate.html.php +++ b/module/testcase/view/batchcreate.html.php @@ -32,11 +32,20 @@ config->testcase->create->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->bug->customBatchCreateFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } +} $colspan = count($visibleFields) + 3; $hiddenStory = (isonlybody() and $story) ? ' hidden' : ''; if($hiddenStory and isset($visibleFields['story'])) $colspan -= 1; @@ -48,14 +57,29 @@ if($hiddenStory and isset($visibleFields['story'])) $colspan -= 1; - + - - - - - + + + + + diff --git a/module/testcase/view/batchedit.html.php b/module/testcase/view/batchedit.html.php index 6e344f2577..b611b6c991 100644 --- a/module/testcase/view/batchedit.html.php +++ b/module/testcase/view/batchedit.html.php @@ -25,29 +25,56 @@
config->testcase->edit->requiredFields) as $field) +{ + if($field) + { + $requiredFields[$field] = ''; + if(strpos(",{$config->bug->customBatchEditFields},", ",{$field},") !== false) $visibleFields[$field] = ''; + } +} ?>
'>task->assignedTo;?> typeAB;?> '>task->status;?>'>task->pri;?>'>task->estimateAB;?>'> + task->pri;?> + ";?> + '> + task->estimateAB;?> + ";?> + '>task->consumedThisTime?> '>task->leftAB?>'>task->estStarted?>'>task->deadline?>'> + task->estStarted?> + ";?> + '> + task->deadline?> + ";?> + '>task->finishedBy;?> '>task->canceledBy;?> '>task->closedBy;?> idAB;?> '>product->branch;?> '>testcase->module;?>'> testcase->story;?>'> + testcase->story;?> + ";?> + testcase->title;?> testcase->type;?> '> testcase->pri;?>'>testcase->precondition;?>'> testcase->keywords;?>'> testcase->stage;?>'> testcase->review;?>'> + testcase->pri;?> + ";?> + '> + testcase->precondition;?> + ";?> + '> + testcase->keywords;?> + ";?> + '> + testcase->stage;?> + ";?> + '>testcase->review;?>
- - + + - - - - - - + + + + + + diff --git a/module/testsuite/model.php b/module/testsuite/model.php index 93a3f8434d..1aab5b1ed9 100644 --- a/module/testsuite/model.php +++ b/module/testsuite/model.php @@ -54,7 +54,7 @@ class testsuiteModel extends model setCookie("lastProduct", $productID, $this->config->cookieLife, $this->config->webRoot); $currentProduct = $this->product->getById($productID); - $output = "{$currentProduct->name}
"; + $output = "{$currentProduct->name}
"; if($currentProduct->type != 'normal') { $this->app->loadLang('branch'); diff --git a/module/testtask/view/browse.html.php b/module/testtask/view/browse.html.php index dc05595f0d..b8f5199d4e 100644 --- a/module/testtask/view/browse.html.php +++ b/module/testtask/view/browse.html.php @@ -23,16 +23,16 @@ $status = $this->session->testTaskVersionStatus;
- - + + diff --git a/www/theme/default/style.css b/www/theme/default/style.css index c1b680ae66..bd77e228ea 100644 --- a/www/theme/default/style.css +++ b/www/theme/default/style.css @@ -94,6 +94,8 @@ hr.small {margin: 10px 0} .btn.text-primary {color: #3280FC} .btn.text-important {color: #81511C} .btn.text-special {color: #8957A1} +.btn-limit {max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} +.btn-limit > .title {display: inline-block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 110px; vertical-align: middle;} /* Table */ .table td .input[type="radio"], .table td input[type="checkbox"] {vertical-align: middle; position: relative; top: -3px} @@ -428,6 +430,7 @@ body {color:#141414; padding-bottom: 40px;} #dropMenu {background: #fff; position:absolute; display:none; font-size:12px; z-index:9999; -moz-box-shadow: 0 6px 12px rgba(0,0,0,0.175); -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);border: 1px solid #CBCBCB; border: 1px solid rgba(0, 0, 0, 0.15); top: 36px; border-top: none; min-width: 250px; min-width: 218px\0; padding: 10px 15px;} #dropMenu > .icon-spin {display: block; text-align: center; padding: 10px;} #currentItem {border: 1px solid transparent; padding: 1px 6px;} +#currentItem .title {display: inline-block; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle;} .show > #dropMenu {display: block;} .show > #currentItem, .show > #currentItem:hover, #modulemenu .nav > li > .dropdown.open > a {background: #fff; border: 1px solid #CBCBCB; -moz-box-shadow: 0 6px 12px rgba(0,0,0,0.175); -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);} #search {padding: 2px 8px; height: 28px} @@ -441,8 +444,7 @@ body {color:#141414; padding-bottom: 40px;} #searchResult ul > li:last-child {border-bottom: 1px dashed #ddd} #searchResult ul > li {display: block; float: none; padding: 2px 15px;} #searchResult ul > li:hover, #searchResult ul > li.active {background: #e5e5e5} -#searchResult ul > li > a {line-height: 24px; display: block;} -#searchResult ul > li.active:before {} +#searchResult ul > li > a {line-height: 24px; display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 248px;} #moreMenu > ul > li > a {color: #808080} #searchResult ul > li > a:hover, #defaultMenu > ul > li.heading:hover, #searchResult li.no-result-tip:hover {background: none} #searchResult li.no-result-tip {border: none!important;}
idAB;?>'> priAB;?>'>statusAB;?>'> + priAB;?> + ";?> + '> + statusAB;?> + ";?> + '>testcase->branch;?> '>testcase->module;?>'>testcase->story;?>testcase->title;?>testcase->type;?>'> testcase->precondition;?>'>testcase->keywords;?>'> testcase->stage;?>'> + testcase->story;?> + ";?> + testcase->title;?> testcase->type;?> '> + testcase->precondition;?> + ";?> + '> + testcase->keywords;?> + ";?> + '> + testcase->stage;?> + ";?> +
idAB;?> '> user->dept;?>user->account;?>user->realname;?>user->account;?> user->realname;?> user->role;?> '>user->commiter;?> '> user->email;?>