Merge branch 'master' of https://gitlab.zcorp.cc/easycorp/zentaopms
This commit is contained in:
@@ -62,6 +62,11 @@ class projectEntry extends entry
|
||||
|
||||
$project->teams = $teams;
|
||||
break;
|
||||
case "products":
|
||||
$project->products = array();
|
||||
$productList = $this->loadModel('product')->getOrderedProducts('all', 40, $projectID);
|
||||
foreach($productList as $product) $project->products[] = $product;
|
||||
break;
|
||||
case "stat":
|
||||
$project->stat = $data->data->statData;
|
||||
break;
|
||||
|
||||
@@ -43,21 +43,22 @@ class taskBatchCreateEntry extends Entry
|
||||
$desc = array();
|
||||
$pri = array();
|
||||
$stories = array();
|
||||
foreach($this->request('tasks') as $task)
|
||||
foreach($this->request('tasks') as $key => $task)
|
||||
{
|
||||
$number = $key + 1;
|
||||
if(!isset($task->name) or !isset($task->type)) return $this->send400('Task must have name and type.');
|
||||
|
||||
$modules[] = isset($task->module) ? $task->module : $moduleID;
|
||||
$parents[] = isset($task->parent) ? $task->parent : $taskID;
|
||||
$names[] = $task->name;
|
||||
$colors[] = isset($task->color) ? $task->color : '';
|
||||
$types[] = $task->type;
|
||||
$estimates[] = isset($task->estimate) ? $task->estimate : 0;
|
||||
$estStarted[] = isset($task->estStarted) ? $task->estStarted : 0;
|
||||
$deadlines[] = isset($task->deadline) ? $task->deadline : null;
|
||||
$desc[] = isset($task->desc) ? $task->desc : '';
|
||||
$pri[] = isset($task->pri) ? $task->pri : 0;
|
||||
$stories[] = isset($task->story) ? $task->story : $storyID;
|
||||
$modules[$number] = isset($task->module) ? $task->module : $moduleID;
|
||||
$parents[$number] = isset($task->parent) ? $task->parent : $taskID;
|
||||
$names[$number] = $task->name;
|
||||
$colors[$number] = isset($task->color) ? $task->color : '';
|
||||
$types[$number] = $task->type;
|
||||
$estimates[$number] = isset($task->estimate) ? $task->estimate : 0;
|
||||
$estStarted[$number] = isset($task->estStarted) ? $task->estStarted : 0;
|
||||
$deadlines[$number] = isset($task->deadline) ? $task->deadline : null;
|
||||
$desc[$number] = isset($task->desc) ? $task->desc : '';
|
||||
$pri[$number] = isset($task->pri) ? $task->pri : 0;
|
||||
$stories[$number] = isset($task->story) ? $task->story : $storyID;
|
||||
}
|
||||
$this->setPost('module', $modules);
|
||||
$this->setPost('parent', $parents);
|
||||
|
||||
@@ -1354,7 +1354,7 @@ class block extends control
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = pager::init(0, $count, 1);
|
||||
$this->app->loadLang('execution');
|
||||
$this->view->executionStats = $this->loadModel('project')->getStats($this->session->project, $type, 0, 0, 30, 'id_desc', $pager);
|
||||
$this->view->executionStats = !defined('TUTORIAL') ? $this->loadModel('project')->getStats($this->session->project, $type, 0, 0, 30, 'id_desc', $pager) : array($this->loadModel('tutorial')->getExecution());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1739,7 +1739,7 @@ class block extends control
|
||||
->orderBy($orderBy)
|
||||
->beginIF($limitCount)->limit($limitCount)->fi()
|
||||
->fetchAll();
|
||||
|
||||
|
||||
if($objectType == 'todo')
|
||||
{
|
||||
$this->app->loadClass('date');
|
||||
|
||||
@@ -2257,7 +2257,7 @@ EOD;
|
||||
|
||||
$module = $this->app->getModuleName();
|
||||
$method = $this->app->getMethodName();
|
||||
if($module == 'index' || $module == 'tutorial' || $module == 'install' || $module == 'upgrade' || ($module == 'user' && ($method == 'login' || $method == 'deny' || $method == 'logout')) || ($module == 'my' && $method == 'changepassword') || ($module == 'file' && $method == 'read') || ($module == 'file' && $method == 'download') || ($module == 'file' && $method == 'uploadimages')) return;
|
||||
if($module == 'index' || $module == 'tutorial' || $module == 'install' || $module == 'upgrade' || ($module == 'user' && ($method == 'login' || $method == 'deny' || $method == 'logout')) || ($module == 'my' && ($method == 'changepassword' || $method == 'preference')) || ($module == 'file' && $method == 'read') || ($module == 'file' && $method == 'download') || ($module == 'file' && $method == 'uploadimages')) return;
|
||||
|
||||
$url = helper::safe64Encode($_SERVER['REQUEST_URI']);
|
||||
$redirectUrl = helper::createLink('index', 'index', "open=$url");
|
||||
|
||||
@@ -2561,13 +2561,6 @@ class execution extends control
|
||||
|
||||
if(!empty($_POST))
|
||||
{
|
||||
/* Get executionType and determine whether a product is linked with the stage. */
|
||||
$executionType = $this->dao->findById($executionID)->from(TABLE_EXECUTION)->fetch('type');
|
||||
if($executionType == 'stage')
|
||||
{
|
||||
if(!isset($_POST['products'])) return print(js::alert($this->lang->execution->noLinkProduct) . js::locate($this->createLink('execution', 'manageProducts', "executionID=$executionID&from=$from")));
|
||||
}
|
||||
|
||||
$oldProducts = $this->product->getProducts($executionID);
|
||||
|
||||
if($from == 'buildCreate' && $this->session->buildCreate) $browseExecutionLink = $this->session->buildCreate;
|
||||
|
||||
@@ -1338,6 +1338,7 @@ $(function()
|
||||
{
|
||||
selector: '.region, .kanban-board, .kanban-lane',
|
||||
trigger: '.region.sort > .region-header, .kanban-board.sort > .kanban-header > .kanban-group-header, .kanban-lane.sort > .kanban-lane-name',
|
||||
dropOnMouseleave: true,
|
||||
container: function($ele)
|
||||
{
|
||||
return $ele.parent();
|
||||
|
||||
@@ -305,14 +305,6 @@ class executionModel extends model
|
||||
$type = 'sprint';
|
||||
if($project) $type = zget($this->config->execution->modelList, $project->model, 'sprint');
|
||||
|
||||
/* If the execution model is a stage, determine whether the product is linked. */
|
||||
$products = array_filter($this->post->products);
|
||||
if(empty($products))
|
||||
{
|
||||
dao::$errors['message'][] = $this->lang->execution->noLinkProduct;
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->config->execution->create->requiredFields .= ',project';
|
||||
}
|
||||
|
||||
@@ -468,13 +460,7 @@ class executionModel extends model
|
||||
dao::$errors['days'] = sprintf($this->lang->project->workdaysExceed, $workdays);
|
||||
return false;
|
||||
}
|
||||
$products = array_filter($this->post->products);
|
||||
$noLinkTip = $oldExecution->type != 'kanban' ? $this->lang->execution->noLinkProduct : $this->lang->execution->kanbanNoLinkProduct;
|
||||
if(empty($products))
|
||||
{
|
||||
dao::$errors['message'][] = $noLinkTip;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get the data from the post. */
|
||||
$execution = fixer::input('post')
|
||||
->setDefault('lastEditedBy', $this->app->user->account)
|
||||
|
||||
@@ -144,8 +144,8 @@
|
||||
<?php endforeach;?>
|
||||
<?php endforeach;?>
|
||||
<div class='col-sm-4'>
|
||||
<div class="input-group <?php if(in_array($project->model, array('kanban', 'waterfall'))) echo 'required';?>">
|
||||
<?php echo html::select("products[$i]", $allProducts, '', "class='form-control chosen' required onchange='loadBranches(this)'");?>
|
||||
<div class="input-group">
|
||||
<?php echo html::select("products[$i]", $allProducts, '', "class='form-control chosen' onchange='loadBranches(this)'");?>
|
||||
<span class='input-group-addon fix-border'></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
<?php $hasBranch = $product->type != 'normal' and isset($branchGroups[$product->id]);?>
|
||||
<?php foreach($linkedBranches[$product->id] as $branchID => $branch):?>
|
||||
<div class='col-sm-4'>
|
||||
<div class="input-group<?php if(in_array($project->model, array('kanban', 'waterfall')) and $i == 0) echo " required";if($hasBranch) echo ' has-branch';?>">
|
||||
<div class="input-group<?php if($hasBranch) echo ' has-branch';?>">
|
||||
<?php echo html::select("products[$i]", $allProducts, $product->id, "class='form-control chosen' $class onchange='loadBranches(this)' data-last='" . $product->id . "' data-type='". $product->type ."'");?>
|
||||
<span class='input-group-addon fix-border'></span>
|
||||
<?php if($hasBranch) echo html::select("branch[$i]", $branchGroups[$product->id], $branchID, "class='form-control chosen' $class onchange=\"loadPlans('#products{$i}', this.value)\" data-last='" . $branchID . "'");?>
|
||||
@@ -159,7 +159,7 @@
|
||||
<?php endforeach;?>
|
||||
<div class='col-sm-4'>
|
||||
<div class="input-group">
|
||||
<?php echo html::select("products[$i]", $allProducts, '', "class='form-control chosen' required onchange='loadBranches(this)'");?>
|
||||
<?php echo html::select("products[$i]", $allProducts, '', "class='form-control chosen' onchange='loadBranches(this)'");?>
|
||||
<span class='input-group-addon fix-border'></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1388,6 +1388,7 @@ function initSortable()
|
||||
{
|
||||
selector: '.region, .kanban-board, .kanban-lane, .kanban-col',
|
||||
trigger: '.region.sort > .region-header, .kanban-board.sort > .kanban-header > .kanban-group-header, .kanban-lane.sort > .kanban-lane-name, .kanban-header-col.sort',
|
||||
dropOnMouseleave: true,
|
||||
container: function($ele)
|
||||
{
|
||||
return $ele.parent();
|
||||
|
||||
@@ -1259,7 +1259,7 @@ class programModel extends model
|
||||
*/
|
||||
public function getProjectStats($programID = 0, $browseType = 'undone', $queryID = 0, $orderBy = 'id_desc', $pager = null, $programTitle = 0, $involved = 0, $queryAll = false)
|
||||
{
|
||||
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProjectStats();
|
||||
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProjectStats($browseType);
|
||||
|
||||
/* Init vars. */
|
||||
$projects = $this->getProjectList($programID, $browseType, $queryID, $orderBy, $pager, $programTitle, $involved, $queryAll);
|
||||
|
||||
@@ -562,7 +562,7 @@ class task extends control
|
||||
if($this->post->names)
|
||||
{
|
||||
$allChanges = $this->task->batchUpdate();
|
||||
if(dao::isError()) return print(js::error(dao::getError()));
|
||||
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
|
||||
|
||||
if(!empty($allChanges))
|
||||
{
|
||||
|
||||
@@ -246,6 +246,8 @@ $lang->task->error->finishedDateEmpty = '"Finished Date" should not be empty.';
|
||||
$lang->task->error->finishedDateSmall = '"Finished Date" should be > "Real Started"';
|
||||
$lang->task->error->alreadyConsumed = 'The currently selected parent task has been consumed.';
|
||||
$lang->task->error->date = 'The date should be >= today.';
|
||||
$lang->task->error->leftEmptyAB = 'When the task status is %s, "Hours Left" cannot be 0';
|
||||
$lang->task->error->leftEmpty = 'Task#%sWhen the task status is %s, "Left" cannot be 0';
|
||||
|
||||
/* Report. */
|
||||
$lang->task->report = new stdclass();
|
||||
|
||||
@@ -246,6 +246,8 @@ $lang->task->error->finishedDateEmpty = '实际完成不能为空';
|
||||
$lang->task->error->finishedDateSmall = '实际完成不能小于实际开始';
|
||||
$lang->task->error->alreadyConsumed = '当前选中的父任务已有消耗。';
|
||||
$lang->task->error->date = '日期不能大于今天';
|
||||
$lang->task->error->leftEmptyAB = '任务状态为%s时,预计剩余不能为0';
|
||||
$lang->task->error->leftEmpty = 'Task#%s任务状态为%s时,剩余不能为0';
|
||||
|
||||
/* Report. */
|
||||
$lang->task->report = new stdclass();
|
||||
|
||||
+57
-13
@@ -35,6 +35,30 @@ class taskModel extends model
|
||||
|
||||
if($this->post->selectTestStory)
|
||||
{
|
||||
/* Check required fields when create test task. */
|
||||
foreach($this->post->testStory as $i => $storyID)
|
||||
{
|
||||
if(empty($storyID)) continue;
|
||||
|
||||
$task = new stdclass();
|
||||
$task->pri = $this->post->testPri[$i];
|
||||
$task->estStarted = $this->post->testEstStarted[$i];
|
||||
$task->deadline = $this->post->testDeadline[$i];
|
||||
$task->assignedTo = $this->post->testAssignedTo[$i];
|
||||
$task->estimate = $this->post->testEstimate[$i];
|
||||
$task->left = $this->post->testEstimate[$i];
|
||||
|
||||
$this->dao->insert(TABLE_TASK)->data($task)->batchCheck($requiredFields, 'notempty');
|
||||
if(dao::isError())
|
||||
{
|
||||
foreach(dao::getError() as $field => $error)
|
||||
{
|
||||
dao::$errors[] = $error;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$requiredFields = str_replace(",estimate,", ',', "$requiredFields");
|
||||
$requiredFields = str_replace(",story,", ',', "$requiredFields");
|
||||
$requiredFields = str_replace(",estStarted,", ',', "$requiredFields");
|
||||
@@ -998,6 +1022,12 @@ class taskModel extends model
|
||||
$requiredFields = str_replace(',estimate,', ',', $requiredFields);
|
||||
}
|
||||
|
||||
if(strpos(',doing,pause,', $task->status) && empty($teams) && empty($task->left))
|
||||
{
|
||||
dao::$errors[] = sprintf($this->lang->task->error->leftEmptyAB, $this->lang->task->statusList[$task->status]);
|
||||
return false;
|
||||
}
|
||||
|
||||
$requiredFields = trim($requiredFields, ',');
|
||||
|
||||
$this->dao->update(TABLE_TASK)->data($task)
|
||||
@@ -1008,7 +1038,6 @@ class taskModel extends model
|
||||
->checkIF($task->estimate != false, 'estimate', 'float')
|
||||
->checkIF($task->left != false, 'left', 'float')
|
||||
->checkIF($task->consumed != false, 'consumed', 'float')
|
||||
->checkIF($task->status != 'wait' and empty($teams) and $task->left == 0 and $task->status != 'cancel' and $task->status != 'closed', 'status', 'equal', 'done')
|
||||
|
||||
->batchCheckIF($task->status == 'wait' or $task->status == 'doing', 'finishedBy, finishedDate,canceledBy, canceledDate, closedBy, closedDate, closedReason', 'empty')
|
||||
|
||||
@@ -1113,7 +1142,6 @@ class taskModel extends model
|
||||
{
|
||||
if(isset($data->modules[$taskID]) and ($data->modules[$taskID] == 'ditto')) $data->modules[$taskID] = isset($prev['module']) ? $prev['module'] : 0;
|
||||
if($data->types[$taskID] == 'ditto') $data->types[$taskID] = isset($prev['type']) ? $prev['type'] : '';
|
||||
if($data->statuses[$taskID] == 'ditto') $data->statuses[$taskID] = isset($prev['status']) ? $prev['status'] : '';
|
||||
if($data->assignedTos[$taskID] == 'ditto') $data->assignedTos[$taskID] = isset($prev['assignedTo']) ? $prev['assignedTo'] : '';
|
||||
if($data->pris[$taskID] == 'ditto') $data->pris[$taskID] = isset($prev['pri']) ? $prev['pri'] : 0;
|
||||
if($data->finishedBys[$taskID] == 'ditto') $data->finishedBys[$taskID] = isset($prev['finishedBy']) ? $prev['finishedBy'] : '';
|
||||
@@ -1124,7 +1152,6 @@ class taskModel extends model
|
||||
|
||||
$prev['module'] = $data->modules[$taskID];
|
||||
$prev['type'] = $data->types[$taskID];
|
||||
$prev['status'] = $data->statuses[$taskID];
|
||||
$prev['assignedTo'] = $data->assignedTos[$taskID];
|
||||
$prev['pri'] = $data->pris[$taskID];
|
||||
$prev['finishedBy'] = $data->finishedBys[$taskID];
|
||||
@@ -1145,7 +1172,7 @@ class taskModel extends model
|
||||
$task->name = $data->names[$taskID];
|
||||
$task->module = isset($data->modules[$taskID]) ? $data->modules[$taskID] : 0;
|
||||
$task->type = $data->types[$taskID];
|
||||
$task->status = $data->statuses[$taskID];
|
||||
$task->status = isset($data->statuses[$taskID]) ? $data->statuses[$taskID] : $oldTask->status;
|
||||
$task->assignedTo = $task->status == 'closed' ? 'closed' : $data->assignedTos[$taskID];
|
||||
$task->pri = $data->pris[$taskID];
|
||||
$task->estimate = isset($data->estimates[$taskID]) ? $data->estimates[$taskID] : $oldTask->estimate;
|
||||
@@ -1180,11 +1207,12 @@ class taskModel extends model
|
||||
if($message) return print(js::alert($message));
|
||||
}
|
||||
|
||||
if($data->consumeds[$taskID])
|
||||
if(isset($data->consumeds[$taskID]))
|
||||
{
|
||||
if($data->consumeds[$taskID] < 0)
|
||||
{
|
||||
echo js::alert(sprintf($this->lang->task->error->consumed, $taskID));
|
||||
dao::$errors[] = sprintf($this->lang->task->error->consumed, $taskID);
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1256,9 +1284,19 @@ class taskModel extends model
|
||||
/* Check field not empty. */
|
||||
foreach($tasks as $taskID => $task)
|
||||
{
|
||||
if($task->status == 'done' and $task->consumed == false) return print(js::error('task#' . $taskID . sprintf($this->lang->error->notempty, $this->lang->task->consumedThisTime)));
|
||||
if($task->status == 'cancel') continue;
|
||||
if(!empty($task->deadline) and $task->estStarted > $task->deadline) return print(js::error('task#' . $taskID . $this->lang->task->error->deadlineSmall));
|
||||
if($task->status == 'done' and $task->consumed == false)
|
||||
{
|
||||
dao::$errors[] = 'Task#' . $taskID . sprintf($this->lang->error->notempty, $this->lang->task->consumedThisTime);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!empty($task->deadline) and $task->estStarted > $task->deadline)
|
||||
{
|
||||
dao::$errors[] = 'Task#' . $taskID . $this->lang->task->error->deadlineSmall;
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach(explode(',', $this->config->task->edit->requiredFields) as $field)
|
||||
{
|
||||
$field = trim($field);
|
||||
@@ -1275,6 +1313,12 @@ class taskModel extends model
|
||||
|
||||
foreach($tasks as $taskID => $task)
|
||||
{
|
||||
if(strpos(',doing,pause,', $task->status) && empty($teams) && $task->parent >= 0 && empty($task->left))
|
||||
{
|
||||
dao::$errors[] = sprintf($this->lang->task->error->leftEmpty, $taskID, $this->lang->task->statusList[$task->status]);
|
||||
return false;
|
||||
}
|
||||
|
||||
$oldTask = $oldTasks[$taskID];
|
||||
$this->dao->update(TABLE_TASK)->data($task)
|
||||
->autoCheck()
|
||||
@@ -1282,7 +1326,6 @@ class taskModel extends model
|
||||
->checkIF($task->estimate != false, 'estimate', 'float')
|
||||
->checkIF($task->consumed != false, 'consumed', 'float')
|
||||
->checkIF($task->left != false, 'left', 'float')
|
||||
->checkIF($task->parent > 0 and $task->left == 0 and $task->status != 'cancel' and $task->status != 'closed' and $task->status != 'wait' and $task->consumed != 0, 'status', 'equal', 'done')
|
||||
|
||||
->batchCheckIF($task->status == 'wait' or $task->status == 'doing', 'finishedBy, finishedDate,canceledBy, canceledDate, closedBy, closedDate, closedReason', 'empty')
|
||||
|
||||
@@ -1294,6 +1337,11 @@ class taskModel extends model
|
||||
->batchCheckIF($task->closedReason == 'cancel', 'finishedBy, finishedDate', 'empty')
|
||||
->where('id')->eq((int)$taskID)
|
||||
->exec();
|
||||
if(dao::isError())
|
||||
{
|
||||
dao::$errors[] = 'Task#' . $taskID . dao::getError(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
if($task->status == 'done' and $task->closedReason) $this->dao->update(TABLE_TASK)->set('status')->eq('closed')->where('id')->eq($taskID)->exec();
|
||||
|
||||
@@ -1324,10 +1372,6 @@ class taskModel extends model
|
||||
if($task->status != $oldTask->status) $this->loadModel('kanban')->updateLane($oldTask->execution, 'task', $oldTask->id);
|
||||
$allChanges[$taskID] = common::createChanges($oldTask, $task);
|
||||
}
|
||||
else
|
||||
{
|
||||
return print(js::error('task#' . $taskID . dao::getError(true)));
|
||||
}
|
||||
}
|
||||
if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchEdit');
|
||||
return $allChanges;
|
||||
|
||||
@@ -127,7 +127,7 @@ js::set('dittoNotice', $dittoNotice);
|
||||
<td class='text-left<?php echo zget($visibleFields, 'module', ' hidden')?>' style='overflow:visible'><?php echo html::select("modules[$taskID]", $modules, $tasks[$taskID]->module, "class='form-control chosen'")?></td>
|
||||
<td class='text-left<?php echo zget($visibleFields, 'assignedTo', ' hidden')?>' style='overflow:visible'><?php echo html::select("assignedTos[$taskID]", $taskMembers, $tasks[$taskID]->assignedTo, "class='form-control chosen' {$disableAssignedTo}");?></td>
|
||||
<td><?php echo html::select("types[$taskID]", $typeList, $tasks[$taskID]->type, "class='form-control'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'status', "class='hidden'")?>><?php echo html::select("statuses[$taskID]", $statusList, $tasks[$taskID]->status, "class='form-control'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'status', "class='hidden'")?>><?php echo html::select("statuses[$taskID]", $statusList, $tasks[$taskID]->status, "class='form-control' {$disableHour}");?></td>
|
||||
<td <?php echo zget($visibleFields, 'estStarted', "class='hidden'")?>><?php echo html::input("estStarteds[$taskID]", helper::isZeroDate($tasks[$taskID]->estStarted) ? '' : $tasks[$taskID]->estStarted, "class='form-control text-center form-date'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'deadline', "class='hidden'")?>><?php echo html::input("deadlines[$taskID]", helper::isZeroDate($tasks[$taskID]->deadline) ? '' : $tasks[$taskID]->deadline, "class='form-control text-center form-date'");?></td>
|
||||
<td <?php echo zget($visibleFields, 'pri', "class='hidden'")?>><?php echo html::select("pris[$taskID]", $priList, $tasks[$taskID]->pri, "class='form-control'");?></td>
|
||||
|
||||
@@ -59,12 +59,12 @@ $lang->tutorial->tasks['createProject']['desc'] = "<p>Create a project: </p><ul>
|
||||
|
||||
$lang->tutorial->tasks['manageTeam'] = array('title' => "Manage Project Team");
|
||||
$lang->tutorial->tasks['manageTeam']['mode'] = 'new';
|
||||
$lang->tutorial->tasks['manageTeam']['nav'] = array('app' => 'project', 'module' => 'project', 'method' => 'managemembers', 'menuModule' => '', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectTableList>tr:first>.c-name a,#navbar>.nav>li[data-id="settings"],#subNavbar>.nav>li[data-id="members"],.manage-team-btn', 'target' => '.manage-team-btn', 'vars' => 'projectID=0', 'form' => '#teamForm', 'requiredFields' => 'accounts1,accounts', 'submit' => '#submit', 'targetPageName' => 'Manage team members');
|
||||
$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,#projectForm td.c-name:first a,#navbar>.nav>li[data-id="settings"],#subNavbar>.nav>li[data-id="members"],.manage-team-btn', 'target' => '.manage-team-btn', 'vars' => 'projectID=0', 'form' => '#teamForm', 'requiredFields' => 'accounts1,accounts', 'submit' => '#submit', 'targetPageName' => 'Manage team members');
|
||||
$lang->tutorial->tasks['manageTeam']['desc'] = "<p>Manage project team members: </p><ul><li data-target='nav'>Open <span class='task-nav'> project <i class='icon icon-angle-right'></i> Team <i class='icon icon-angle-right'></i> Manage Team Members</span> Page;</li><li data-target='form'>Choose users for the team.</li><li data-target='submit'>Save</li></ul>";
|
||||
|
||||
$lang->tutorial->tasks['createProjectExecution'] = array('title' => 'Create a ' . $lang->executionCommon);
|
||||
$lang->tutorial->tasks['createProjectExecution']['mode'] = 'new';
|
||||
$lang->tutorial->tasks['createProjectExecution']['nav'] = array('app' => 'project', 'module' => 'execution', 'method' => 'create', 'menuModule' => 'browse', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectTableList>tr:first>.c-name a,#navbar>.nav>li[data-id="execution"],.create-execution-btn', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-execution-btn', 'targetPageName' => 'Create' . $lang->executionCommon);
|
||||
$lang->tutorial->tasks['createProjectExecution']['nav'] = array('app' => 'project', 'module' => 'execution', 'method' => 'create', 'menuModule' => 'browse', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectForm td.c-name:first a,#navbar>.nav>li[data-id="execution"],.create-execution-btn', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-execution-btn', 'targetPageName' => 'Create' . $lang->executionCommon);
|
||||
$lang->tutorial->tasks['createProjectExecution']['desc'] = "<p>Create a new {$lang->executionCommon}:</p><ul><li data-target='nav'>Open <span class='task-nav'> Project <i class='icon icon-angle-right'></i> {$lang->executionCommon} list <i class='icon icon-angle-right'></i> Create {$lang->executionCommon}</span>;</li><li data-target='form'>Fill the form with {$lang->executionCommon} information;</li><li data-target='submit'>Save {$lang->executionCommon}</li></ul>";
|
||||
|
||||
$lang->tutorial->tasks['createExecution'] = array('title' => 'Create a ' . $lang->executionCommon);
|
||||
|
||||
@@ -59,12 +59,12 @@ $lang->tutorial->tasks['createProject']['desc'] = "<p>在系统创建一个新
|
||||
|
||||
$lang->tutorial->tasks['manageTeam'] = array('title' => "管理项目团队");
|
||||
$lang->tutorial->tasks['manageTeam']['mode'] = 'new';
|
||||
$lang->tutorial->tasks['manageTeam']['nav'] = array('app' => 'project', 'module' => 'project', 'method' => 'managemembers', 'menuModule' => '', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectTableList>tr:first>.c-name a,#navbar>.nav>li[data-id="settings"],#subNavbar>.nav>li[data-id="members"],.manage-team-btn', 'target' => '.manage-team-btn', 'vars' => 'projectID=0', 'form' => '#teamForm', 'requiredFields' => 'accounts1', 'submit' => '#submit', 'targetPageName' => '团队管理');
|
||||
$lang->tutorial->tasks['manageTeam']['nav'] = array('app' => 'project', 'module' => 'project', 'method' => 'managemembers', 'menuModule' => '', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectForm td.c-name:first a,#navbar>.nav>li[data-id="settings"],#subNavbar>.nav>li[data-id="members"],.manage-team-btn', 'target' => '.manage-team-btn', 'vars' => 'projectID=0', 'form' => '#teamForm', 'requiredFields' => 'accounts1', 'submit' => '#submit', 'targetPageName' => '团队管理');
|
||||
$lang->tutorial->tasks['manageTeam']['desc'] = "<p>管理项目团队成员:</p><ul><li data-target='nav'>打开 <span class='task-nav'> 项目 <i class='icon icon-angle-right'></i> 设置 <i class='icon icon-angle-right'></i> 团队 <i class='icon icon-angle-right'></i> 团队管理</span> 页面;</li><li data-target='form'>选择要加入项目团队的成员;</li><li data-target='submit'>保存团队成员信息。</li></ul>";
|
||||
|
||||
$lang->tutorial->tasks['createProjectExecution'] = array('title' => '添加' . $lang->executionCommon);
|
||||
$lang->tutorial->tasks['createProjectExecution']['mode'] = 'new';
|
||||
$lang->tutorial->tasks['createProjectExecution']['nav'] = array('app' => 'project', 'module' => 'execution', 'method' => 'create', 'menuModule' => 'browse', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectTableList>tr:first>.c-name a,#navbar>.nav>li[data-id="execution"],.create-execution-btn', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-execution-btn', 'targetPageName' => '添加' . $lang->executionCommon);
|
||||
$lang->tutorial->tasks['createProjectExecution']['nav'] = array('app' => 'project', 'module' => 'execution', 'method' => 'create', 'menuModule' => 'browse', 'menu' => '#navbar>.nav>li[data-id="browse"],#cards>.col>.panel:first .project-name,#projectForm td.c-name:first a,#navbar>.nav>li[data-id="execution"],.create-execution-btn', 'form' => '#dataform', 'submit' => '#submit', 'target' => '.create-execution-btn', 'targetPageName' => '添加' . $lang->executionCommon);
|
||||
$lang->tutorial->tasks['createProjectExecution']['desc'] = "<p>在系统创建一个新的{$lang->executionCommon}:</p><ul><li data-target='nav'>打开 <span class='task-nav'> 项目 <i class='icon icon-angle-right'></i> {$lang->executionCommon} <i class='icon icon-angle-right'></i> 添加{$lang->executionCommon}</span> 页面;</li><li data-target='form'>在{$lang->executionCommon}表单中填写要创建的{$lang->executionCommon}信息;</li><li data-target='submit'>保存{$lang->executionCommon}信息。</li></ul>";
|
||||
|
||||
$lang->tutorial->tasks['createExecution'] = array('title' => '创建' . $lang->executionCommon);
|
||||
|
||||
@@ -178,10 +178,11 @@ class tutorialModel extends model
|
||||
/**
|
||||
* Get project stats for tutorial
|
||||
*
|
||||
* @param string $browseType
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getProjectStats()
|
||||
public function getProjectStats($browseType = '')
|
||||
{
|
||||
$project = $this->getProject();
|
||||
$emptyHour = array('totalEstimate' => 0, 'totalConsumed' => 0, 'totalLeft' => 0, 'progress' => 0);
|
||||
@@ -191,6 +192,8 @@ class tutorialModel extends model
|
||||
$project->teamMembers = array_keys($this->getTeamMembers());
|
||||
$project->teamCount = count($project->teamMembers);
|
||||
|
||||
if($browseType and $browseType != 'all') $project->name .= '-' . $browseType; // Fix bug #21096
|
||||
|
||||
$projectStat[$project->id] = $project;
|
||||
return $projectStat;
|
||||
}
|
||||
@@ -268,6 +271,14 @@ class tutorialModel extends model
|
||||
*/
|
||||
public function getExecution()
|
||||
{
|
||||
/* Fix bug #21097. */
|
||||
$hours = new stdclass();
|
||||
$hours->totalEstimate = 52;
|
||||
$hours->totalConsumed = 43;
|
||||
$hours->totalLeft = 7;
|
||||
$hours->progress = 86;
|
||||
$hours->totalReal = 50;
|
||||
|
||||
$execution = new stdclass();
|
||||
$execution->id = 3;
|
||||
$execution->project = 2;
|
||||
@@ -300,6 +311,8 @@ class tutorialModel extends model
|
||||
$execution->totalEstimate = 0;
|
||||
$execution->displayCards = 0;
|
||||
$execution->fluidBoard = 0;
|
||||
$execution->hours = $hours;
|
||||
$execution->burns = array(35, 35);
|
||||
return $execution;
|
||||
}
|
||||
|
||||
|
||||
+166
-33
@@ -249,31 +249,86 @@ class kanbanTest
|
||||
return $object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get kanban data.
|
||||
*
|
||||
* @param int $kanbanID
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getKanbanDataTest($kanbanID)
|
||||
{
|
||||
$objects = $this->objectModel->getKanbanData($kanbanID);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$columnCount = 0;
|
||||
$laneCount = 0;
|
||||
$cardCount = 0;
|
||||
foreach($objects as $regions)
|
||||
{
|
||||
foreach($regions->groups as $group)
|
||||
{
|
||||
foreach($group->lanes as $lane) $cardCount += count($lane->items);
|
||||
|
||||
$columnCount += count($group->columns);
|
||||
$laneCount += count($group->lanes);
|
||||
}
|
||||
}
|
||||
return 'columns:' . $columnCount . ', lanes:' . $laneCount . ', cards:' . $cardCount;
|
||||
}
|
||||
|
||||
public function getPlanKanbanTest($product, $branchID = 0, $planGroup = '')
|
||||
/**
|
||||
* Test get plan kanban.
|
||||
*
|
||||
* @param int $productID
|
||||
* @param int $branchID
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getPlanKanbanTest($productID, $branchID = 0)
|
||||
{
|
||||
$objects = $this->objectModel->getPlanKanban($product, $branchID = 0, $planGroup = '');
|
||||
global $tester;
|
||||
$product = $tester->loadModel('product')->getByID($productID);
|
||||
|
||||
$tester->loadModel('productplan');
|
||||
$planGroup = $product->type == 'normal' ? $tester->productplan->getList($product->id, 0, 'all', '', 'begin_desc', 'skipparent') : $tester->productplan->getGroupByProduct($product->id, 'skipParent', '', 'begin_desc');
|
||||
|
||||
$objects = $this->objectModel->getPlanKanban($product, $branchID, $planGroup);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$laneCount = 0;
|
||||
$cardCount = 0;
|
||||
foreach($objects->lanes as $lane)
|
||||
{
|
||||
foreach($lane->items as $item) $cardCount += count($item);
|
||||
}
|
||||
return 'lanes:' . count($objects->lanes) . ', cards:' . $cardCount;
|
||||
}
|
||||
|
||||
public function getRDKanbanTest($executionID, $browseType = 'all', $orderBy = 'id_desc', $regionID = 0, $groupBy = 'default')
|
||||
public function getRDKanbanTest($executionID, $browseType = 'all', $regionID = 0)
|
||||
{
|
||||
$objects = $this->objectModel->getRDKanban($executionID, $browseType = 'all', $orderBy = 'id_desc', $regionID = 0, $groupBy = 'default');
|
||||
$objects = $this->objectModel->getRDKanban($executionID, $browseType, 'id_desc', $regionID);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$columnCount = 0;
|
||||
$laneCount = 0;
|
||||
$cardCount = 0;
|
||||
foreach($objects as $regions)
|
||||
{
|
||||
foreach($regions->groups as $group)
|
||||
{
|
||||
$columnCount += count($group->columns);
|
||||
$laneCount += count($group->lanes);
|
||||
foreach($group->lanes as $lane)
|
||||
{
|
||||
foreach($lane->items as $item) $cardCount += count($item);
|
||||
}
|
||||
}
|
||||
}
|
||||
return 'columns:' . $columnCount . ', lanes:' . $laneCount . ', cards:' . $cardCount;
|
||||
}
|
||||
|
||||
public function getRegionByIDTest($regionID)
|
||||
@@ -294,13 +349,20 @@ class kanbanTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get kanban id by region id.
|
||||
*
|
||||
* @param int $regionID
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getKanbanIDByRegionTest($regionID)
|
||||
{
|
||||
$objects = $this->objectModel->getKanbanIDByRegion($regionID);
|
||||
$object = $this->objectModel->getKanbanIDByRegion($regionID);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return $object;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -324,20 +386,31 @@ class kanbanTest
|
||||
|
||||
public function getLaneGroupByRegionsTest($regions, $browseType = 'all')
|
||||
{
|
||||
$objects = $this->objectModel->getLaneGroupByRegions($regions, $browseType = 'all');
|
||||
$objects = $this->objectModel->getLaneGroupByRegions($regions, $browseType);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$count = 0;
|
||||
foreach($objects as $object) $count += count($object);
|
||||
return $count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get lane pairs by group id.
|
||||
*
|
||||
* @param int $groupID
|
||||
* @param string $orderBy
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getLanePairsByGroupTest($groupID, $orderBy = '`order`_asc')
|
||||
{
|
||||
$objects = $this->objectModel->getLanePairsByGroup($groupID, $orderBy = '`order`_asc');
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$names = implode(',', $objects);
|
||||
return $names;
|
||||
}
|
||||
|
||||
public function getColumnGroupByRegionsTest($regions, $order = 'order')
|
||||
@@ -376,13 +449,23 @@ class kanbanTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get RD column group by regions.
|
||||
*
|
||||
* @param int $regions
|
||||
* @param array $groupIDList
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getRDColumnGroupByRegionsTest($regions, $groupIDList = array())
|
||||
{
|
||||
$objects = $this->objectModel->getRDColumnGroupByRegions($regions, $groupIDList = array());
|
||||
$objects = $this->objectModel->getRDColumnGroupByRegions($regions, $groupIDList);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$count = 0;
|
||||
foreach($objects as $object) $count += count($object);
|
||||
return $count;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -431,10 +514,7 @@ class kanbanTest
|
||||
{
|
||||
foreach($types['lanes'] as $lane)
|
||||
{
|
||||
foreach($lane['cards'] as $card)
|
||||
{
|
||||
$cardCount += count($card);
|
||||
}
|
||||
foreach($lane['cards'] as $card) $cardCount += count($card);
|
||||
}
|
||||
$columnCount += count($types['columns']);
|
||||
$laneCount += count($types['lanes']);
|
||||
@@ -458,26 +538,46 @@ class kanbanTest
|
||||
if(empty($objects))
|
||||
{
|
||||
$this->objectModel->createExecutionLane($executionID, $browseType, $groupBy);
|
||||
$objects = $this->objectModel->getExecutionKanban($executionID, $browseType, $groupBy);
|
||||
$objects = $this->objectModel->getKanban4Group($executionID, $browseType, $groupBy);
|
||||
}
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
$laneCount = 0;
|
||||
foreach($objects as $types)
|
||||
{
|
||||
$laneCount += count($types['lanes']);
|
||||
}
|
||||
foreach($objects as $types) $laneCount += count($types['lanes']);
|
||||
|
||||
return 'lanes:' . $laneCount;
|
||||
}
|
||||
|
||||
public function getLanes4GroupTest($executionID, $browseType, $groupBy, $cardList)
|
||||
/**
|
||||
* Test get kanban for group view.
|
||||
*
|
||||
* @param int $executionID
|
||||
* @param string $browseType
|
||||
* @param string $groupBy
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getLanes4GroupTest($executionID, $browseType, $groupBy)
|
||||
{
|
||||
global $tester;
|
||||
/* Get group objects. */
|
||||
if($browseType == 'story') $cardList = $tester->loadModel('story')->getExecutionStories($executionID, 0, 0, 't1.`order`_desc', 'allStory');
|
||||
if($browseType == 'bug') $cardList = $tester->loadModel('bug')->getExecutionBugs($executionID);
|
||||
if($browseType == 'task') $cardList = $tester->loadModel('execution')->getKanbanTasks($executionID, "id");
|
||||
$objects = $this->objectModel->getLanes4Group($executionID, $browseType, $groupBy, $cardList);
|
||||
|
||||
if(empty($objects))
|
||||
{
|
||||
$this->objectModel->createExecutionLane($executionID, $browseType, $groupBy);
|
||||
$objects = $this->objectModel->getLanes4Group($executionID, $browseType, $groupBy);
|
||||
}
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$names = '';
|
||||
foreach($objects as $object) $names .= ',' . $object->name;
|
||||
return $names;
|
||||
}
|
||||
|
||||
public function getSpaceListTest($browseType, $pager = null)
|
||||
@@ -498,13 +598,21 @@ class kanbanTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
public function getKanbanPairsTest()
|
||||
/**
|
||||
* Test get Kanban pairs.
|
||||
*
|
||||
* @param string $user
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getKanbanPairsTest($user)
|
||||
{
|
||||
su($user);
|
||||
$objects = $this->objectModel->getKanbanPairs();
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return count($objects);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -556,22 +664,39 @@ class kanbanTest
|
||||
return $objects;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get lane pairs by region id.
|
||||
*
|
||||
* @param int $regionID
|
||||
* @param string $type
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function getLanePairsByRegionTest($regionID, $type = 'all')
|
||||
{
|
||||
$objects = $this->objectModel->getLanePairsByRegion($regionID, $type = 'all');
|
||||
$objects = $this->objectModel->getLanePairsByRegion($regionID, $type);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
$names = implode(',', $objects);
|
||||
return $names;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get lane group by regionid.
|
||||
*
|
||||
* @param int $regionID
|
||||
* @param string $type
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getLaneGroupByRegionTest($regionID, $type = 'all')
|
||||
{
|
||||
$objects = $this->objectModel->getLaneGroupByRegion($regionID, $type = 'all');
|
||||
$objects = $this->objectModel->getLaneGroupByRegion($regionID, $type);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return count($objects[$regionID]);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1116,13 +1241,20 @@ class kanbanTest
|
||||
return $object;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get lane by id.
|
||||
*
|
||||
* @param int $laneID
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function getLaneByIdTest($laneID)
|
||||
{
|
||||
$objects = $this->objectModel->getLaneById($laneID);
|
||||
$object = $this->objectModel->getLaneById($laneID);
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $objects;
|
||||
return $object;
|
||||
}
|
||||
|
||||
public function getObjectGroupTest($executionID, $type, $groupBy)
|
||||
@@ -1131,6 +1263,7 @@ class kanbanTest
|
||||
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
$objects = implode(',', $objects);
|
||||
return $objects;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,7 @@ fields:
|
||||
range: "0"
|
||||
- field: object
|
||||
range: ""
|
||||
prefix: "plans,releases,builds,executions,cards"
|
||||
- field: createdBy
|
||||
range: "admin"
|
||||
- field: createdDate
|
||||
|
||||
@@ -10,18 +10,21 @@ fields:
|
||||
- field: group
|
||||
range: 1-100{8}
|
||||
- field: fromID
|
||||
range: "0"
|
||||
range: 0{800},1-70,1-10,101-200,1-20
|
||||
- field: fromType
|
||||
range: ""
|
||||
range: []{800},productplan{70},release{10},execution{100},build{20}
|
||||
- field: name
|
||||
range: 1-1000000
|
||||
prefix: "卡片"
|
||||
fields:
|
||||
- field: name1
|
||||
range: 卡片{800},[]{200}
|
||||
- field: name2
|
||||
range: 1-800,[]{200}
|
||||
- field: status
|
||||
range: doing,doing,done
|
||||
- field: pri
|
||||
range: "3"
|
||||
range: 3{800},0{200}
|
||||
- field: assignedTo
|
||||
range: "admin"
|
||||
range: admin{800},[]{200}
|
||||
- field: desc
|
||||
range: ""
|
||||
- field: begin
|
||||
|
||||
@@ -16,7 +16,10 @@ fields:
|
||||
- field: card1
|
||||
prefix: ","
|
||||
postfix: ","
|
||||
range: 1-800:2
|
||||
range: 1-1000:2
|
||||
- field: card2
|
||||
postfix: ","
|
||||
range: 2-800:2
|
||||
range: 2-1000:2
|
||||
- field: card3
|
||||
postfix: ","
|
||||
range: 801-1000:2
|
||||
|
||||
@@ -60,7 +60,7 @@ $builder->kanbanregion = array('rows' => 100, 'extends' => array('kanbanregion',
|
||||
$builder->kanbangroup = array('rows' => 100, 'extends' => array('kanbangroup','kanbangroup'));
|
||||
$builder->kanbanlane = array('rows' => 100, 'extends' => array('kanbanlane','kanbanlane'));
|
||||
$builder->kanbancolumn = array('rows' => 400, 'extends' => array('kanbancolumn','kanbancolumn'));
|
||||
$builder->kanbancard = array('rows' => 800, 'extends' => array('kanbancard','kanbancard'));
|
||||
$builder->kanbancard = array('rows' => 1000, 'extends' => array('kanbancard','kanbancard'));
|
||||
$builder->kanbancell = array('rows' => 400, 'extends' => array('kanbancell','kanbancell'));
|
||||
|
||||
$builder->kanbanregionproject = array('rows' => 180, 'extends' => array('kanbanregion','kanbanregionproject'));
|
||||
|
||||
@@ -13,7 +13,7 @@ pid=1
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
$userList = array('admin', 'po1', 'po2', 'user1', 'user2', 'pm1', 'pm2');
|
||||
$userList = array('admin', 'po1', 'po2', 'user1', 'user2', 'pm1', 'pm2');
|
||||
$objectType = array('kanban', 'kanbanspace');
|
||||
$paramList = array('noclosed', 'private', 'cooperation', 'public', 'involved');
|
||||
|
||||
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getKanbanData();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$kanbanIDList = array('1', '2', '3', '4', '5', '1000001');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getKanbanDataTest($kanbanIDList[0])) && p() && e('columns:4, lanes:1, cards:4'); // 测试获取kanban1的视图
|
||||
r($kanban->getKanbanDataTest($kanbanIDList[1])) && p() && e('columns:4, lanes:1, cards:4'); // 测试获取kanban2的视图
|
||||
r($kanban->getKanbanDataTest($kanbanIDList[2])) && p() && e('columns:4, lanes:1, cards:4'); // 测试获取kanban3的视图
|
||||
r($kanban->getKanbanDataTest($kanbanIDList[3])) && p() && e('columns:4, lanes:1, cards:4'); // 测试获取kanban4的视图
|
||||
r($kanban->getKanbanDataTest($kanbanIDList[4])) && p() && e('columns:4, lanes:1, cards:4'); // 测试获取kanban5的视图
|
||||
r($kanban->getKanbanDataTest($kanbanIDList[5])) && p() && e('columns:0, lanes:0, cards:0'); // 测试获取不存在的kanban的视图
|
||||
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getKanbanIDByRegion();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
$regionIDList = array('1', '2', '3', '4', '5', '1000001');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getKanbanIDByRegionTest($regionIDList[0])) && p() && e('1'); // 测试通过区域1获取看板id
|
||||
r($kanban->getKanbanIDByRegionTest($regionIDList[1])) && p() && e('2'); // 测试通过区域2获取看板id
|
||||
r($kanban->getKanbanIDByRegionTest($regionIDList[2])) && p() && e('3'); // 测试通过区域3获取看板id
|
||||
r($kanban->getKanbanIDByRegionTest($regionIDList[3])) && p() && e('4'); // 测试通过区域4获取看板id
|
||||
r($kanban->getKanbanIDByRegionTest($regionIDList[4])) && p() && e('5'); // 测试通过区域5获取看板id
|
||||
r($kanban->getKanbanIDByRegionTest($regionIDList[5])) && p() && e('0'); // 测试通过不存在的区域获取看板id
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getKanbanPairs();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$userList = array('admin', 'po1', 'po2', 'user1', 'user2', 'pm1', 'pm2');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getKanbanPairsTest($userList[0])) && p() && e('100'); //获取用户admin可以看到的看板pairs
|
||||
r($kanban->getKanbanPairsTest($userList[1])) && p() && e('32'); //获取用户po1可以看到的看板pairs
|
||||
r($kanban->getKanbanPairsTest($userList[2])) && p() && e('32'); //获取用户po2可以看到的看板pairs
|
||||
r($kanban->getKanbanPairsTest($userList[3])) && p() && e('32'); //获取用户user1可以看到的看板pairs
|
||||
r($kanban->getKanbanPairsTest($userList[4])) && p() && e('32'); //获取用户user2可以看到的看板pairs
|
||||
r($kanban->getKanbanPairsTest($userList[5])) && p() && e('32'); //获取用户pm1可以看到的看板pairs
|
||||
r($kanban->getKanbanPairsTest($userList[6])) && p() && e('32'); //获取用户pm2可以看到的看板pairs
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getLaneById();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$laneIDList = array('1', '2', '3', '4', '5', '1000001');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getLaneByIdTest($laneIDList[0])) && p('name,type,region,group') && e('默认泳道,common,1,1'); // 测试通过id1获取泳道信息
|
||||
r($kanban->getLaneByIdTest($laneIDList[1])) && p('name,type,region,group') && e('默认泳道,common,2,2'); // 测试通过id2获取泳道信息
|
||||
r($kanban->getLaneByIdTest($laneIDList[2])) && p('name,type,region,group') && e('默认泳道,common,3,3'); // 测试通过id3获取泳道信息
|
||||
r($kanban->getLaneByIdTest($laneIDList[3])) && p('name,type,region,group') && e('默认泳道,common,4,4'); // 测试通过id4获取泳道信息
|
||||
r($kanban->getLaneByIdTest($laneIDList[4])) && p('name,type,region,group') && e('默认泳道,common,5,5'); // 测试通过id5获取泳道信息
|
||||
r($kanban->getLaneByIdTest($laneIDList[5])) && p('name,type,region,group') && e('0'); // 测试通过不存在的id获取泳道信息
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getLaneGroupByRegion();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$regionIDList = array('101', '102', '103', '104', '105', '1000001');
|
||||
$type = array('bug', 'task', 'story');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[0])) && p() && e('3'); // 测试获取区域101的泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[0], $type[0])) && p() && e('1'); // 测试获取区域101的bug泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[0], $type[1])) && p() && e('1'); // 测试获取区域101的task泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[0], $type[2])) && p() && e('1'); // 测试获取区域101的story泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[1])) && p() && e('3'); // 测试获取区域102的泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[1], $type[0])) && p() && e('1'); // 测试获取区域102的bug泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[1], $type[1])) && p() && e('1'); // 测试获取区域102的task泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[1], $type[2])) && p() && e('1'); // 测试获取区域102的story泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[2])) && p() && e('3'); // 测试获取区域103的泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[2], $type[0])) && p() && e('1'); // 测试获取区域103的bug泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[2], $type[1])) && p() && e('1'); // 测试获取区域103的task泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[2], $type[2])) && p() && e('1'); // 测试获取区域103的story泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[3])) && p() && e('3'); // 测试获取区域104的泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[3], $type[0])) && p() && e('1'); // 测试获取区域104的bug泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[3], $type[1])) && p() && e('1'); // 测试获取区域104的task泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[3], $type[2])) && p() && e('1'); // 测试获取区域104的story泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[4])) && p() && e('3'); // 测试获取区域105的泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[4], $type[0])) && p() && e('1'); // 测试获取区域105的bug泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[4], $type[1])) && p() && e('1'); // 测试获取区域105的task泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[4], $type[2])) && p() && e('1'); // 测试获取区域105的story泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[5])) && p() && e('0'); // 测试获取不存在的区域的泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[5], $type[0])) && p() && e('0'); // 测试获取不存在的区域的bug泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[5], $type[1])) && p() && e('0'); // 测试获取不存在的区域的task泳道
|
||||
r($kanban->getLaneGroupByRegionTest($regionIDList[5], $type[2])) && p() && e('0'); // 测试获取不存在的区域的story泳道
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getLaneGroupByRegions();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
$regionsList = array('101,102,103', '104,105,106', '107,108,109', '110,111,112', '113,114,115', '1000001');
|
||||
$type = array('bug', 'task', 'story');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[0])) && p() && e('9'); // 测试获取区域101,102,103的泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[0], $type[0])) && p() && e('3'); // 测试获取区域101,102,103的bug泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[0], $type[1])) && p() && e('3'); // 测试获取区域101,102,103的task泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[0], $type[2])) && p() && e('3'); // 测试获取区域101,102,103的story泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[1])) && p() && e('9'); // 测试获取区域104,105,106的泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[1], $type[0])) && p() && e('3'); // 测试获取区域104,105,106的bug泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[1], $type[1])) && p() && e('3'); // 测试获取区域104,105,106的task泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[1], $type[2])) && p() && e('3'); // 测试获取区域104,105,106的story泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[2])) && p() && e('9'); // 测试获取区域107,108,109的泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[2], $type[0])) && p() && e('3'); // 测试获取区域107,108,109的bug泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[2], $type[1])) && p() && e('3'); // 测试获取区域107,108,109的task泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[2], $type[2])) && p() && e('3'); // 测试获取区域107,108,109的story泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[3])) && p() && e('9'); // 测试获取区域110,111,112的泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[3], $type[0])) && p() && e('3'); // 测试获取区域110,111,112的bug泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[3], $type[1])) && p() && e('3'); // 测试获取区域110,111,112的task泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[3], $type[2])) && p() && e('3'); // 测试获取区域110,111,112的story泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[4])) && p() && e('9'); // 测试获取区域113,114,115的泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[4], $type[0])) && p() && e('3'); // 测试获取区域113,114,115的bug泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[4], $type[1])) && p() && e('3'); // 测试获取区域113,114,115的task泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[4], $type[2])) && p() && e('3'); // 测试获取区域113,114,115的story泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[5])) && p() && e('0'); // 测试获取不存在的区域的泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[5], $type[0])) && p() && e('0'); // 测试获取不存在的区域的bug泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[5], $type[1])) && p() && e('0'); // 测试获取不存在的区域的task泳道
|
||||
r($kanban->getLaneGroupByRegionsTest($regionsList[5], $type[2])) && p() && e('0'); // 测试获取不存在的区域的story泳道
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getLanePairsByGroup();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$groupIDList = array('101', '102', '103', '104', '105', '1000001');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getLanePairsByGroupTest($groupIDList[0])) && p() && e('研发需求'); // 获取泳道组101的泳道
|
||||
r($kanban->getLanePairsByGroupTest($groupIDList[1])) && p() && e('Bug'); // 获取泳道组102的泳道
|
||||
r($kanban->getLanePairsByGroupTest($groupIDList[2])) && p() && e('任务'); // 获取泳道组103的泳道
|
||||
r($kanban->getLanePairsByGroupTest($groupIDList[3])) && p() && e('研发需求'); // 获取泳道组104的泳道
|
||||
r($kanban->getLanePairsByGroupTest($groupIDList[4])) && p() && e('Bug'); // 获取泳道组105的泳道
|
||||
r($kanban->getLanePairsByGroupTest($groupIDList[5])) && p() && e('0'); // 获取不存在泳道组的泳道
|
||||
Executable
+43
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getLanePairsByRegion();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$regionIDList = array('101', '102', '103', '104', '105', '1000001');
|
||||
$type = array('bug', 'task', 'story');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[0])) && p() && e('研发需求,Bug,任务'); // 测试获取区域101的泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[0], $type[0])) && p() && e('Bug'); // 测试获取区域101的bug泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[0], $type[1])) && p() && e('任务'); // 测试获取区域101的task泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[0], $type[2])) && p() && e('研发需求'); // 测试获取区域101的story泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[1])) && p() && e('研发需求,Bug,任务'); // 测试获取区域102的泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[1], $type[0])) && p() && e('Bug'); // 测试获取区域102的bug泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[1], $type[1])) && p() && e('任务'); // 测试获取区域102的task泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[1], $type[2])) && p() && e('研发需求'); // 测试获取区域102的story泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[2])) && p() && e('研发需求,Bug,任务'); // 测试获取区域103的泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[2], $type[0])) && p() && e('Bug'); // 测试获取区域103的bug泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[2], $type[1])) && p() && e('任务'); // 测试获取区域103的task泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[2], $type[2])) && p() && e('研发需求'); // 测试获取区域103的story泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[3])) && p() && e('研发需求,Bug,任务'); // 测试获取区域104的泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[3], $type[0])) && p() && e('Bug'); // 测试获取区域104的bug泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[3], $type[1])) && p() && e('任务'); // 测试获取区域104的task泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[3], $type[2])) && p() && e('研发需求'); // 测试获取区域104的story泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[4])) && p() && e('研发需求,Bug,任务'); // 测试获取区域105的泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[4], $type[0])) && p() && e('Bug'); // 测试获取区域105的bug泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[4], $type[1])) && p() && e('任务'); // 测试获取区域105的task泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[4], $type[2])) && p() && e('研发需求'); // 测试获取区域105的story泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[5])) && p() && e('0'); // 测试获取不存在的区域的泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[5], $type[0])) && p() && e('0'); // 测试获取不存在的区域的bug泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[5], $type[1])) && p() && e('0'); // 测试获取不存在的区域的task泳道
|
||||
r($kanban->getLanePairsByRegionTest($regionIDList[5], $type[2])) && p() && e('0'); // 测试获取不存在的区域的story泳道
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getLanes4Group();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
$executionIDList = array('101', '102', '103', '104', '105');
|
||||
$browseTypeList = array('story', 'task', 'bug');
|
||||
$groupByList = array('pri', 'category', 'module', 'source', 'assignedTo', 'story', 'severity');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[0])) && p() && e(',优先级: 无,2,4'); // 获取执行101 story pri的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[1])) && p() && e(',类型: 无,功能'); // 获取执行101 story category的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[2])) && p() && e(',所属模块: 无,产品模块2,产品模块4'); // 获取执行101 story module的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[0], $browseTypeList[0], $groupByList[3])) && p() && e(',来源: 无,用户,市场'); // 获取执行101 story source的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[0])) && p() && e(',优先级: 无,1,2,4'); // 获取执行102 task pri的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[2])) && p() && e(',所属模块: 无,模块4,模块10,模块13,模块16'); // 获取执行102 task module的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[4])) && p() && e(',指派给: 无'); // 获取执行102 task assignedTo的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[1], $browseTypeList[1], $groupByList[5])) && p() && e(',相关研发需求: 无,用户需求5'); // 获取执行102 task story的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[0])) && p() && e(',优先级: 无,1,3,4'); // 获取执行101 bug pri的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[2])) && p() && e(',所属模块: 无,产品模块11,产品模块12,产品模块13'); // 获取执行101 bug module的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[4])) && p() && e(',指派给: 无,admin,测试1'); // 获取执行101 bug assignedTo的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[2], $browseTypeList[2], $groupByList[6])) && p() && e(',严重程度: 无,1,3,4'); // 获取执行101 bug severity的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[0])) && p() && e(',优先级: 无,2,4'); // 获取执行101 story pri的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[1])) && p() && e(',类型: 无,功能'); // 获取执行101 story category的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[2])) && p() && e(',所属模块: 无,产品模块14,产品模块16'); // 获取执行101 story module的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[3], $browseTypeList[0], $groupByList[3])) && p() && e(',来源: 无,用户,其他'); // 获取执行101 story source的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[0])) && p() && e(',优先级: 无,1,2,3'); // 获取执行102 task pri的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[2])) && p() && e(',所属模块: 无,模块13,模块37,模块40,模块43'); // 获取执行102 task module的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[4])) && p() && e(',指派给: 无'); // 获取执行102 task assignedTo的泳道
|
||||
r($kanban->getLanes4GroupTest($executionIDList[4], $browseTypeList[1], $groupByList[5])) && p() && e(',相关研发需求: 无,用户需求17'); // 获取执行102 task story的泳道
|
||||
system("./ztest init");
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getObjectGroup();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
$executionIDList = array('101', '102', '103', '104', '105');
|
||||
$browseTypeList = array('story', 'task', 'bug');
|
||||
$groupByList = array('pri', 'category', 'module', 'source', 'assignedTo', 'story', 'severity');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getObjectGroupTest($executionIDList[0], $browseTypeList[0], $groupByList[0])) && p() && e('4,2'); // 获取执行101 story pri的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[0], $browseTypeList[0], $groupByList[1])) && p() && e('feature'); // 获取执行101 story category的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[0], $browseTypeList[0], $groupByList[2])) && p() && e('1824,1822'); // 获取执行101 story module的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[0], $browseTypeList[0], $groupByList[3])) && p() && e('user,market'); // 获取执行101 story source的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[1], $browseTypeList[1], $groupByList[0])) && p() && e('4,2,1'); // 获取执行102 task pri的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[1], $browseTypeList[1], $groupByList[2])) && p() && e('36,33,30,24'); // 获取执行102 task module的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[1], $browseTypeList[1], $groupByList[4])) && p() && e('0'); // 获取执行102 task assignedTo的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[1], $browseTypeList[1], $groupByList[5])) && p() && e('8,6,0'); // 获取执行102 task story的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[2], $browseTypeList[2], $groupByList[0])) && p() && e('4,3,1'); // 获取执行101 bug pri的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[2], $browseTypeList[2], $groupByList[2])) && p() && e('1833,1832,1831,0'); // 获取执行101 bug module的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[2], $browseTypeList[2], $groupByList[4])) && p() && e('test1,admin'); // 获取执行101 bug assignedTo的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[2], $browseTypeList[2], $groupByList[6])) && p() && e('4,3,1'); // 获取执行101 bug severity的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[3], $browseTypeList[0], $groupByList[0])) && p() && e('4,2'); // 获取执行101 story pri的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[3], $browseTypeList[0], $groupByList[1])) && p() && e('feature'); // 获取执行101 story category的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[3], $browseTypeList[0], $groupByList[2])) && p() && e('1836,1834'); // 获取执行101 story module的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[3], $browseTypeList[0], $groupByList[3])) && p() && e('user,other'); // 获取执行101 story source的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[4], $browseTypeList[1], $groupByList[0])) && p() && e('3,2,1'); // 获取执行102 task pri的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[4], $browseTypeList[1], $groupByList[2])) && p() && e('63,60,57,33'); // 获取执行102 task module的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[4], $browseTypeList[1], $groupByList[4])) && p() && e('0'); // 获取执行102 task assignedTo的分组
|
||||
r($kanban->getObjectGroupTest($executionIDList[4], $browseTypeList[1], $groupByList[5])) && p() && e('20,18,0'); // 获取执行102 task story的分组
|
||||
Executable
+26
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getPlanKanban();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$productIDList = array('1', '2', '3', '41', '42');
|
||||
$branchIDList = array('0', '1', '3');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getPlanKanbanTest($productIDList[0])) && p() && e('lanes:1, cards:3'); // 测试获取产品1的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[1])) && p() && e('lanes:1, cards:3'); // 测试获取产品2的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[2])) && p() && e('lanes:1, cards:3'); // 测试获取产品3的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[3])) && p() && e('lanes:3, cards:2'); // 测试获取产品4的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[3], $branchIDList[1])) && p() && e('lanes:1, cards:1'); // 测试获取产品4 分支1的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[4])) && p() && e('lanes:3, cards:2'); // 测试获取产品5的计划看板
|
||||
r($kanban->getPlanKanbanTest($productIDList[4], $branchIDList[2])) && p() && e('lanes:1, cards:1'); // 测试获取产品5 分支3的计划看板
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getRDColumnGroupByRegions();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$regions = array('1', '2', '3,4', '5,6,7', '8,9,10,11');
|
||||
$groupIDList = array('1', '2', '3', '5,6', '8,10');
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[0])) && p() && e('4'); // 测试获取region 1 执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[0], $groupIDList[0])) && p() && e('4'); // 测试获取region 1 group 1执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[0], $groupIDList[1])) && p() && e('0'); // 测试获取region 1 group 2执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[1])) && p() && e('4'); // 测试获取region 2 执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[1], $groupIDList[1])) && p() && e('4'); // 测试获取region 2 group 2执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[1], $groupIDList[0])) && p() && e('0'); // 测试获取region 2 group 1执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[2])) && p() && e('8'); // 测试获取region 3 执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[2], $groupIDList[2])) && p() && e('4'); // 测试获取region 3 group 3执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[2], $groupIDList[0])) && p() && e('0'); // 测试获取region 3 group 1执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[3])) && p() && e('12'); // 测试获取region 4 执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[3], $groupIDList[3])) && p() && e('8'); // 测试获取region 4 group 5,6执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[4])) && p() && e('16'); // 测试获取region 5 执行看板泳道列组
|
||||
r($kanban->getRDColumnGroupByRegionsTest($regions[4], $groupIDList[4])) && p() && e('8'); // 测试获取region 5 group 8,10执行看板泳道列组
|
||||
Executable
+31
@@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
include dirname(dirname(dirname(__FILE__))) . '/class/kanban.class.php';
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel->getRDKanban();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
$executionIDList = array('161', '162', '163', '164', '165');
|
||||
$browseTypeList = array('all', 'story', 'task', 'bug');
|
||||
$regionIDList = array('0', '101', '102', '103', '104', '105');
|
||||
$groupBy = 'pri';
|
||||
|
||||
$kanban = new kanbanTest();
|
||||
|
||||
r($kanban->getRDKanbanTest($executionIDList[0])) && p() && e('columns:27, lanes:3, cards:5'); // 获取执行161的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[0], $browseTypeList[0], $regionIDList[1])) && p() && e('columns:27, lanes:3, cards:8'); // 获取执行161 all region 101的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[0], $browseTypeList[0], $regionIDList[2])) && p() && e('columns:0, lanes:0, cards:0'); // 获取执行161 all region 102的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[1])) && p() && e('columns:27, lanes:3, cards:5'); // 获取执行162的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[1], $browseTypeList[1], $regionIDList[2])) && p() && e('columns:11, lanes:1, cards:2'); // 获取执行162 story region 102的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[2])) && p() && e('columns:27, lanes:3, cards:0'); // 获取执行163的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[2], $browseTypeList[2], $regionIDList[3])) && p() && e('columns:7, lanes:1, cards:4'); // 获取执行163 task region 103的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[3])) && p() && e('columns:27, lanes:3, cards:0'); // 获取执行164的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[3], $browseTypeList[3], $regionIDList[4])) && p() && e('columns:9, lanes:1, cards:3'); // 获取执行164 bug region 104的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[4])) && p() && e('columns:27, lanes:3, cards:0'); // 获取执行165的执行看板
|
||||
r($kanban->getRDKanbanTest($executionIDList[4], $browseTypeList[1], $regionIDList[5])) && p() && e('columns:11, lanes:1, cards:2'); // 获取执行165 story region 105的执行看板
|
||||
+2
-2
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user