Merge branch 'master' of git.zcorp.cc:easycorp/zentaopms
This commit is contained in:
@@ -52,6 +52,14 @@ $data->comment = 'fgasgqasfdgasfgasg';
|
||||
$data->readjustTime = 1;
|
||||
$data->readjustTask = 1;
|
||||
|
||||
r($project->activate(2, $data)) && p('0:field,old,new') && e('status,closed,doing');
|
||||
r($project->activate(3, $data)) && p('0:field,old,new') && e('status,suspended,doing');
|
||||
|
||||
$changes2 = $project->activate(2, $data);
|
||||
$changes3 = $project->activate(3, $data);
|
||||
|
||||
r($changes2['0']) && p('field') && e('status');
|
||||
r($changes2['0']) && p('old') && e('closed');
|
||||
r($changes2['0']) && p('new') && e('doing');
|
||||
|
||||
r($changes3['0']) && p('field') && e('status');
|
||||
r($changes3['0']) && p('old') && e('suspended');
|
||||
r($changes3['0']) && p('new') && e('doing');
|
||||
|
||||
+9
-55
@@ -835,7 +835,6 @@ class taskModel extends model
|
||||
if(!isset($currentTask->status)) $currentTask->status = $oldTask->status;
|
||||
$oldTask->team = $team;
|
||||
|
||||
$currentTask->assignedTo = $oldTask->assignedTo;
|
||||
if(!empty($_POST['assignedTo']) and is_string($_POST['assignedTo']))
|
||||
{
|
||||
$currentTask->assignedTo = $this->post->assignedTo;
|
||||
@@ -844,6 +843,8 @@ class taskModel extends model
|
||||
{
|
||||
$currentTask->assignedTo = $this->getAssignedTo4Multi($members, $oldTask);
|
||||
if($oldTask->assignedTo != $currentTask->assignedTo) $currentTask->assignedDate = $now;
|
||||
|
||||
$oldTask->team = $oldTeam;
|
||||
}
|
||||
|
||||
$currentTask->estimate = 0;
|
||||
@@ -858,50 +859,7 @@ class taskModel extends model
|
||||
$currentTask->consumed = 0;
|
||||
foreach($efforts as $effort) $currentTask->consumed += (float)$effort->consumed;
|
||||
|
||||
$oldTask->team = $oldTeam;
|
||||
|
||||
if(!empty($task))
|
||||
{
|
||||
if(!$autoStatus) return $currentTask;
|
||||
|
||||
if($currentTask->consumed == 0 and empty($efforts))
|
||||
{
|
||||
if(!isset($task->status)) $currentTask->status = 'wait';
|
||||
$currentTask->finishedBy = '';
|
||||
$currentTask->finishedDate = '';
|
||||
}
|
||||
|
||||
if($currentTask->consumed > 0 && $currentTask->left > 0)
|
||||
{
|
||||
$currentTask->status = 'doing';
|
||||
$currentTask->finishedBy = '';
|
||||
$currentTask->finishedDate = '';
|
||||
}
|
||||
|
||||
if($currentTask->consumed > 0 and $currentTask->left == 0)
|
||||
{
|
||||
$finisedUsers = $this->getFinishedUsers($oldTask->id, $members);
|
||||
if(count($finisedUsers) != count($team))
|
||||
{
|
||||
if(strpos('cancel,pause', $oldTask->status) === false or ($oldTask->status == 'closed' and $oldTask->reason == 'done'))
|
||||
{
|
||||
$currentTask->status = 'doing';
|
||||
$currentTask->finishedBy = '';
|
||||
$currentTask->finishedDate = '';
|
||||
}
|
||||
}
|
||||
elseif(strpos('wait,doing,pause', $oldTask->status) !== false)
|
||||
{
|
||||
$currentTask->status = 'done';
|
||||
$currentTask->assignedTo = $oldTask->openedBy;
|
||||
$currentTask->assignedDate = $now;
|
||||
$currentTask->finishedBy = $this->app->user->account;
|
||||
$currentTask->finishedDate = $task->finishedDate;
|
||||
}
|
||||
}
|
||||
|
||||
return $currentTask;
|
||||
}
|
||||
if(!empty($task)) return $this->taskTao->computeCurrentTaskStatus($currentTask, $oldTask, $task, $autoStatus, empty($efforts), $members);
|
||||
$this->dao->update(TABLE_TASK)->data($currentTask)->autoCheck()->where('id')->eq($oldTask->id)->exec();
|
||||
}
|
||||
}
|
||||
@@ -2405,12 +2363,12 @@ class taskModel extends model
|
||||
->andWhere('t1.vision')->eq($this->config->vision)
|
||||
->fetch();
|
||||
if(!$task) return false;
|
||||
$task->openedDate = substr($task->openedDate, 0, 19);
|
||||
$task->finishedDate = substr($task->finishedDate, 0, 19);
|
||||
$task->canceledDate = substr($task->canceledDate, 0, 19);
|
||||
$task->closedDate = substr($task->closedDate, 0, 19);
|
||||
$task->lastEditedDate = substr($task->lastEditedDate, 0, 19);
|
||||
$task->realStarted = substr($task->realStarted, 0, 19);
|
||||
$task->openedDate = !empty($task->openedDate) ? substr($task->openedDate, 0, 19) : null;
|
||||
$task->finishedDate = !empty($task->finishedDate) ? substr($task->finishedDate, 0, 19) : null;
|
||||
$task->canceledDate = !empty($task->canceledDate) ? substr($task->canceledDate, 0, 19) : null;
|
||||
$task->closedDate = !empty($task->closedDate) ? substr($task->closedDate, 0, 19) : null;
|
||||
$task->lastEditedDate = !empty($task->lastEditedDate) ? substr($task->lastEditedDate, 0, 19) : null;
|
||||
$task->realStarted = !empty($task->realStarted) ? substr($task->realStarted, 0, 19) : null;
|
||||
|
||||
$children = $this->dao->select('*')->from(TABLE_TASK)->where('parent')->eq($taskID)->andWhere('deleted')->eq(0)->fetchAll('id');
|
||||
$task->children = $children;
|
||||
@@ -2432,10 +2390,6 @@ class taskModel extends model
|
||||
if($setImgSize) $task->desc = $this->file->setImgSize($task->desc);
|
||||
|
||||
if($task->assignedTo == 'closed') $task->assignedToRealName = 'Closed';
|
||||
foreach($task as $key => $value)
|
||||
{
|
||||
if((strpos($key, 'Date') !== false or strpos('estStarted|deadline', $key) !== false) and !(int)substr($value, 0, 4)) $task->$key = '';
|
||||
}
|
||||
$task->files = $this->loadModel('file')->getByObject('task', $taskID);
|
||||
|
||||
/* Get related test cases. */
|
||||
|
||||
@@ -210,4 +210,60 @@ class taskTao extends taskModel
|
||||
}
|
||||
return $tasks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the status of the current task.
|
||||
* 计算当前任务的状态。
|
||||
*
|
||||
* @param object $currentTask
|
||||
* @param object $oldTask
|
||||
* @param object $task
|
||||
* @param bool $condition true|false
|
||||
* @param bool $hasEfforts true|false
|
||||
* @param int $teamCount
|
||||
* @access protected
|
||||
* @return object
|
||||
*/
|
||||
protected function computeCurrentTaskStatus(object $currentTask, object $oldTask, object $task, bool $autoStatus, bool $hasEfforts, array $members): object
|
||||
{
|
||||
if(!$autoStatus) return $currentTask;
|
||||
|
||||
if($currentTask->consumed == 0 and $hasEfforts)
|
||||
{
|
||||
if(!isset($task->status)) $currentTask->status = 'wait';
|
||||
$currentTask->finishedBy = null;
|
||||
$currentTask->finishedDate = null;
|
||||
}
|
||||
|
||||
if($currentTask->consumed > 0 && $currentTask->left > 0)
|
||||
{
|
||||
$currentTask->status = 'doing';
|
||||
$currentTask->finishedBy = null;
|
||||
$currentTask->finishedDate = null;
|
||||
}
|
||||
|
||||
if($currentTask->consumed > 0 and $currentTask->left == 0)
|
||||
{
|
||||
$finisedUsers = $this->getFinishedUsers($oldTask->id, $members);
|
||||
if(count($finisedUsers) != count($members))
|
||||
{
|
||||
if(strpos('cancel,pause', $oldTask->status) === false or ($oldTask->status == 'closed' and $oldTask->reason == 'done'))
|
||||
{
|
||||
$currentTask->status = 'doing';
|
||||
$currentTask->finishedBy = null;
|
||||
$currentTask->finishedDate = null;
|
||||
}
|
||||
}
|
||||
elseif(strpos('wait,doing,pause', $oldTask->status) !== false)
|
||||
{
|
||||
$currentTask->status = 'done';
|
||||
$currentTask->assignedTo = $oldTask->openedBy;
|
||||
$currentTask->assignedDate = helper::now();
|
||||
$currentTask->finishedBy = $this->app->user->account;
|
||||
$currentTask->finishedDate = $task->finishedDate;
|
||||
}
|
||||
}
|
||||
|
||||
return $currentTask;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,61 @@
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . "/test/lib/init.php";
|
||||
include dirname(__FILE__, 2) . '/task.class.php';
|
||||
su('admin');
|
||||
|
||||
$task = zdTable('task');
|
||||
$task->id->range('1-5');
|
||||
$task->name->range('1-5')->prefix('任务');
|
||||
$task->mode->range('multi');
|
||||
$task->status->range('wait,doing,done,pause,cancel,closed');
|
||||
$task->assignedTo->range('admin,user1');
|
||||
$task->openedBy->range('admin,user2,user1');
|
||||
$task->gen(5);
|
||||
|
||||
$taskTeam = zdTable('taskteam');
|
||||
$taskTeam->id->range('1-20');
|
||||
$taskTeam->task->range('1{2},2{3},3{2},4{3}');
|
||||
$taskTeam->account->range('admin,user1,admin,user1,user2');
|
||||
$taskTeam->estimate->range('1{2},2{3},3,4{2},5');
|
||||
$taskTeam->left->range('1{2},0{3},1{3},0{2}');
|
||||
$taskTeam->consumed->range('0{11},1{4},0{2},1{3}');
|
||||
$taskTeam->status->range('wait{11},doing,done,done,done,wait,wait,doing,done,done');
|
||||
$taskTeam->gen(20);
|
||||
|
||||
global $tester;
|
||||
$tester->loadModel('task');
|
||||
|
||||
$taskIdList = array(1, 2, 3, 4, 5);
|
||||
$tasks = array();
|
||||
$oldTasks = array();
|
||||
foreach($taskIdList as $id)
|
||||
{
|
||||
$task = $tester->task->getByID($id);
|
||||
$oldTasks[] = $task;
|
||||
$tasks[] = $task;
|
||||
}
|
||||
|
||||
$tasks[0]->status = 'doing';
|
||||
$tasks[0]->finishedDate = null;
|
||||
|
||||
$tasks[1]->status = 'done';
|
||||
$tasks[1]->finishedDate = '2023-04-27';
|
||||
|
||||
$members1 = new stdclass();
|
||||
$members1->account = 'admin';
|
||||
$members1->estimate = 1;
|
||||
$members1->left = 1;
|
||||
|
||||
$members2 = new stdclass();
|
||||
$members2->account = 'user1';
|
||||
$members2->estimate = 2;
|
||||
$members2->left = 2;
|
||||
|
||||
$members3 = new stdclass();
|
||||
$members3->account = 'user3';
|
||||
$members3->estimate = 3;
|
||||
$members3->left = 3;
|
||||
|
||||
$members = array(array($members1, $members2), array($members3));
|
||||
|
||||
/**
|
||||
|
||||
@@ -10,94 +64,17 @@ title=taskModel->computeHours4Multiple();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
task状态为wait只有老task计算多人工时 >> 1,po82,wait,3,3,3
|
||||
task状态为wait有新老task计算多人工时 >> 1,po82,wait,3,3,3
|
||||
task状态为wait有新老task和团队计算多人工时 >> 1,po82,doing,3,3,3
|
||||
task状态为done只有老task计算多人工时 >> 903,po82,done,3,3,3
|
||||
task状态为done有新老task计算多人工时 >> 903,po82,done,3,3,3
|
||||
task状态为done有新老task和团队计算多人工时 >> 903,po82,doing,3,3,3
|
||||
task状态为pause只有老task计算多人工时 >> 910,,pause,9,12,9
|
||||
task状态为pause有新老task计算多人工时 >> 910,,pause,9,12,9
|
||||
task状态为pause只有老task计算多人工时 >> 910,po82,doing,3,3,3
|
||||
老task不存在的情况有新老task和团队计算多人工时 >> 0
|
||||
老task不存在的情况有新老task计算多人工时 >> 0
|
||||
新task不存在的情况有新老task和团队计算多人工时 >> 10001,po82,doing,3,3,3
|
||||
|
||||
*/
|
||||
$task1 = new stdclass();
|
||||
$task1->id = 1;
|
||||
$task1->status = 'wait';
|
||||
$task1->assignedTo = '';
|
||||
$task1->openedBy = '';
|
||||
|
||||
$task2 = new stdclass();
|
||||
$task2->id = 1;
|
||||
$task2->status = 'wait';
|
||||
$task2->assignedTo = 'user92';
|
||||
$task2->openedBy = '';
|
||||
|
||||
$task3 = new stdclass();
|
||||
$task3->id = 903;
|
||||
$task3->status = 'done';
|
||||
$task3->assignedTo = '';
|
||||
$task3->openedBy = '';
|
||||
|
||||
$task4 = new stdclass();
|
||||
$task4->id = 903;
|
||||
$task4->status = 'done';
|
||||
$task4->assignedTo = 'po82';
|
||||
$task4->openedBy = '';
|
||||
|
||||
$task5 = new stdclass();
|
||||
$task5->id = 910;
|
||||
$task5->status = 'pause';
|
||||
$task5->assignedTo = '';
|
||||
$task5->openedBy = '';
|
||||
|
||||
$task6 = new stdclass();
|
||||
$task6->id = 910;
|
||||
$task6->status = 'pause';
|
||||
$task6->assignedTo = '';
|
||||
$task6->openedBy = '';
|
||||
|
||||
$task7 = new stdclass();
|
||||
$task7->id = 100001;
|
||||
$task7->status = 'done';
|
||||
$task7->assignedTo = '';
|
||||
$task7->openedBy = '';
|
||||
|
||||
$task8 = new stdclass();
|
||||
$task8->id = 10001;
|
||||
$task8->status = 'wait';
|
||||
$task8->assignedTo = '';
|
||||
$task8->openedBy = '';
|
||||
|
||||
$user1 = new stdclass();
|
||||
$user1->account = 'po82';
|
||||
$user1->estimate = 1;
|
||||
$user1->consumed = 1;
|
||||
$user1->left = 1;
|
||||
|
||||
$user2 = new stdclass();
|
||||
$user2->account = 'user92';
|
||||
$user2->estimate = 2;
|
||||
$user2->consumed = 2;
|
||||
$user2->left = 2;
|
||||
|
||||
$team = array($user1, $user2);
|
||||
|
||||
$autoStatusList = array(true, false);
|
||||
|
||||
$task = new taskTest();
|
||||
r($task->computeHours4MultipleTest($task1)) && p('id,assignedTo,status,estimate,consumed,left') && e('1,po82,wait,3,3,3'); // task状态为wait只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($task1, $task2)) && p('id,assignedTo,status,estimate,consumed,left') && e('1,po82,wait,3,3,3'); // task状态为wait有新老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($task1, $task2, $team)) && p('id,assignedTo,status,estimate,consumed,left') && e('1,po82,doing,3,3,3'); // task状态为wait有新老task和团队计算多人工时
|
||||
r($task->computeHours4MultipleTest($task3)) && p('id,assignedTo,status,estimate,consumed,left') && e('903,po82,done,3,3,3'); // task状态为done只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($task3, $task4)) && p('id,assignedTo,status,estimate,consumed,left') && e('903,po82,done,3,3,3'); // task状态为done有新老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($task3, $task4, $team)) && p('id,assignedTo,status,estimate,consumed,left') && e('903,po82,doing,3,3,3'); // task状态为done有新老task和团队计算多人工时
|
||||
r($task->computeHours4MultipleTest($task5)) && p('id,assignedTo,status,estimate,consumed,left') && e('910,,pause,9,12,9'); // task状态为pause只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($task5, $task1, array(), false)) && p('id,assignedTo,status,estimate,consumed,left') && e('910,,pause,9,12,9'); // task状态为pause有新老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($task5, $task6, $team)) && p('id,assignedTo,status,estimate,consumed,left') && e('910,po82,doing,3,3,3'); // task状态为pause只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($task7)) && p('id,assignedTo,status,estimate,consumed,left') && e('0'); // 老task不存在的情况有新老task和团队计算多人工时
|
||||
r($task->computeHours4MultipleTest($task7, $task8)) && p('id,assignedTo,status,estimate,consumed,left') && e('0'); // 老task不存在的情况有新老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($task1, $task8, $team)) && p('id,assignedTo,status,estimate,consumed,left') && e('10001,po82,doing,3,3,3'); // 新task不存在的情况有新老task和团队计算多人工时
|
||||
r($task->computeHours4MultipleTest($oldTasks[0])) && p('id,assignedTo,status,estimate,consumed,left') && e('1,admin,doing,5,0,4'); // taskID 1 只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($oldTasks[1])) && p('id,assignedTo,status,estimate,consumed,left') && e('2,user1,done,13,0,0'); // taskID 2 只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($oldTasks[2])) && p('id,assignedTo,status,estimate,consumed,left') && e('3,admin,done,15,0,4'); // taskID 3 只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($oldTasks[3])) && p('id,assignedTo,status,estimate,consumed,left') && e('4,user1,pause,17,0,2'); // taskID 4 只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($oldTasks[4])) && p('id,assignedTo,status,estimate,consumed,left') && e('5,admin,cancel,0,0,0'); // taskID 5 只有老task计算多人工时
|
||||
r($task->computeHours4MultipleTest($oldTasks[0], $tasks[0])) && p('id,assignedTo,status,estimate,consumed,left') && e('1,admin,doing,5,0,4'); // taskID 1 有传入task计算多人工时
|
||||
r($task->computeHours4MultipleTest($oldTasks[1], $tasks[1])) && p('id,assignedTo,status,estimate,consumed,left') && e('2,user1,done,13,0,0'); // taskID 2 有传入task计算多人工时
|
||||
r($task->computehours4multipletest($oldTasks[0], $tasks[0], $members[0])) && p('id,assignedTo,status,estimate,consumed,left') && e('1,admin,doing,3,0,3'); // taskID 1 有传入task 传入members计算多人工时
|
||||
r($task->computehours4multipletest($oldTasks[1], $tasks[1], $members[1])) && p('id,assignedTo,status,estimate,consumed,left') && e('2,user1,done,3,0,3'); // taskID 2 有传入task 传入members计算多人工时
|
||||
r($task->computehours4multipletest($oldTasks[0], $tasks[0], $members[0], false)) && p('id,assignedTo,status,estimate,consumed,left') && e('1,admin,doing,3,0,3'); // taskID 1 有传入task 传入members 不自动更新状态计算多人工时
|
||||
r($task->computehours4multipletest($oldTasks[1], $tasks[1], $members[1], false)) && p('id,assignedTo,status,estimate,consumed,left') && e('2,user1,done,3,0,3'); // taskID 2 有传入task 传入members 不自动更新状态计算多人工时
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . "/test/lib/init.php";
|
||||
include dirname(__FILE__, 2) . '/task.class.php';
|
||||
|
||||
$task = zdTable('task');
|
||||
$task->id->range('1-5');
|
||||
$task->name->range('1-5')->prefix('任务');
|
||||
$task->mode->range('multi');
|
||||
$task->status->range('wait,doing,done,pause,cancel,closed');
|
||||
$task->assignedTo->range('admin,user1');
|
||||
$task->openedBy->range('admin,user2,user1');
|
||||
$task->gen(5);
|
||||
|
||||
$taskTeam = zdTable('taskteam');
|
||||
$taskTeam->id->range('1-20');
|
||||
$taskTeam->task->range('1{2},2{3},3{2},4{3}');
|
||||
$taskTeam->account->range('admin,user1,admin,user1,user2');
|
||||
$taskTeam->estimate->range('1{2},2{3},3,4{2},5');
|
||||
$taskTeam->left->range('1{2},0{3},1{3},0{2}');
|
||||
$taskTeam->consumed->range('0{11},1{4},0{2},1{3}');
|
||||
$taskTeam->status->range('wait{11},doing,done,done,done,wait,wait,doing,done,done');
|
||||
$taskTeam->gen(20);
|
||||
|
||||
global $tester;
|
||||
$tester->loadModel('task');
|
||||
|
||||
$taskIdList = array(1, 2, 3, 4, 5);
|
||||
|
||||
$tasks = array();
|
||||
$oldTasks = array();
|
||||
$currentTasks = array();
|
||||
foreach($taskIdList as $id)
|
||||
{
|
||||
$task = $tester->task->getByID($id);
|
||||
$oldTasks[] = $task;
|
||||
$tasks[] = $task;
|
||||
$currentTasks[] = $task;
|
||||
}
|
||||
|
||||
$tasks[0]->status = 'doing';
|
||||
$tasks[0]->finishedDate = null;
|
||||
|
||||
$tasks[1]->status = 'done';
|
||||
$tasks[1]->finishedDate = '2023-04-27';
|
||||
|
||||
$currentTasks[0]->assignedTo = 'user1';
|
||||
$currentTasks[0]->estimate = 9;
|
||||
$currentTasks[0]->left = 0;
|
||||
$currentTasks[0]->consumed = 10;
|
||||
|
||||
$currentTasks[1]->assignedTo = 'admin';
|
||||
$currentTasks[1]->estimate = 8;
|
||||
$currentTasks[1]->left = 8;
|
||||
$currentTasks[1]->consumed = 0;
|
||||
|
||||
$member1 = new stdclass();
|
||||
$members = array(array('admin', 'user1'), array('user2'));
|
||||
$autoStatus = array(true, false);
|
||||
$hasEfforts = array(true, false);
|
||||
|
||||
/**
|
||||
|
||||
title=taskModel->computeCurrentTaskStatus();
|
||||
timeout=0
|
||||
cid=1
|
||||
|
||||
*/
|
||||
|
||||
$task = new taskTest();
|
||||
$task1 = $task->computeCurrentTaskStatusTest($currentTasks[0], $oldTasks[0], $tasks[0], $autoStatus[0], $hasEfforts[0], $members[0]);
|
||||
$task2 = $task->computeCurrentTaskStatusTest($currentTasks[0], $oldTasks[1], $tasks[0], $autoStatus[0], $hasEfforts[0], $members[0]);
|
||||
$task3 = $task->computeCurrentTaskStatusTest($currentTasks[0], $oldTasks[1], $tasks[1], $autoStatus[0], $hasEfforts[0], $members[0]);
|
||||
$task4 = $task->computeCurrentTaskStatusTest($currentTasks[0], $oldTasks[1], $tasks[1], $autoStatus[1], $hasEfforts[0], $members[0]);
|
||||
$task5 = $task->computeCurrentTaskStatusTest($currentTasks[0], $oldTasks[1], $tasks[1], $autoStatus[1], $hasEfforts[1], $members[0]);
|
||||
$task6 = $task->computeCurrentTaskStatusTest($currentTasks[0], $oldTasks[1], $tasks[1], $autoStatus[1], $hasEfforts[1], $members[1]);
|
||||
$task7 = $task->computeCurrentTaskStatusTest($currentTasks[1], $oldTasks[0], $tasks[0], $autoStatus[0], $hasEfforts[0], $members[0]);
|
||||
$task8 = $task->computeCurrentTaskStatusTest($currentTasks[1], $oldTasks[1], $tasks[0], $autoStatus[0], $hasEfforts[0], $members[0]);
|
||||
$task9 = $task->computeCurrentTaskStatusTest($currentTasks[1], $oldTasks[1], $tasks[1], $autoStatus[0], $hasEfforts[0], $members[0]);
|
||||
$task10 = $task->computeCurrentTaskStatusTest($currentTasks[1], $oldTasks[1], $tasks[1], $autoStatus[1], $hasEfforts[0], $members[0]);
|
||||
$task11 = $task->computeCurrentTaskStatusTest($currentTasks[1], $oldTasks[1], $tasks[1], $autoStatus[1], $hasEfforts[1], $members[0]);
|
||||
$task12 = $task->computeCurrentTaskStatusTest($currentTasks[1], $oldTasks[1], $tasks[1], $autoStatus[1], $hasEfforts[1], $members[1]);
|
||||
|
||||
r($task1) && p('status,assignedTo,estimate,left,consumed') && e('doing,user1,9,0,10'); // 查询 task1 情况的task信息 currentTask[0] taskID 1 currentTasksestimate 状态自动变更 没有工时消耗 团队成员members[0]
|
||||
r($task2) && p('status,assignedTo,estimate,left,consumed') && e('doing,user1,9,0,10'); // 查询 task2 情况的task信息 currentTask[0] taskID 1 currentTasksestimate 状态自动变更 没有工时消耗 团队成员members[0]
|
||||
r($task3) && p('status,assignedTo,estimate,left,consumed') && e('doing,user1,9,0,10'); // 查询 task3 情况的task信息 currentTask[0] taskID 1 currentTasksestimate 状态自动变更 没有工时消耗 团队成员members[0]
|
||||
r($task4) && p('status,assignedTo,estimate,left,consumed') && e('doing,user1,9,0,10'); // 查询 task4 情况的task信息 currentTask[0] taskID 1 currentTasksestimate 状态非自动变更 没有工时消耗 团队成员members[0]
|
||||
r($task5) && p('status,assignedTo,estimate,left,consumed') && e('doing,user1,9,0,10'); // 查询 task5 情况的task信息 currentTask[0] taskID 1 currentTasksestimate 状态非自动变更 有工时消耗 团队成员members[0]
|
||||
r($task6) && p('status,assignedTo,estimate,left,consumed') && e('doing,user1,9,0,10'); // 查询 task6 情况的task信息 currentTask[0] taskID 1 currentTasksestimate 状态非自动变更 有工时消耗 团队成员members[1]
|
||||
r($task7) && p('status,assignedTo,estimate,left,consumed') && e('done,admin,8,8,0'); // 查询 task7 情况的task信息 currentTask[1] taskID 2 currentTasksestimate 状态自动变更 有工时消耗 团队成员members[0]
|
||||
r($task8) && p('status,assignedTo,estimate,left,consumed') && e('done,admin,8,8,0'); // 查询 task8 情况的task信息 currentTask[1] taskID 2 currentTasksestimate 状态自动变更 有工时消耗 团队成员members[0]
|
||||
r($task9) && p('status,assignedTo,estimate,left,consumed') && e('done,admin,8,8,0'); // 查询 task9 情况的task信息 currentTask[1] taskID 2 currentTasksestimate 状态自动变更 有工时消耗 团队成员members[0]
|
||||
r($task10) && p('status,assignedTo,estimate,left,consumed') && e('done,admin,8,8,0'); // 查询 task10 情况的task信息 currentTask[1] taskID 2 currentTasksestimate 状态非自动变更 有工时消耗 团队成员members[0]
|
||||
r($task11) && p('status,assignedTo,estimate,left,consumed') && e('done,admin,8,8,0'); // 查询 task11 情况的task信息 currentTask[1] taskID 2 currentTasksestimate 状态非自动变更 没有工时消耗 团队成员members[0]
|
||||
r($task12) && p('status,assignedTo,estimate,left,consumed') && e('done,admin,8,8,0'); // 查询 task12 情况的task信息 currentTask[1] taskID 2 currentTasksestimate 状态非自动变更 没有工时消耗 团队成员members[1]
|
||||
@@ -1558,8 +1558,8 @@ class taskTest
|
||||
|
||||
/**
|
||||
* Get the assignedTo for the multiply linear task.
|
||||
*
|
||||
* @param int $taskID
|
||||
*
|
||||
* @param int $taskID
|
||||
* @param string $type current|next
|
||||
* @access public
|
||||
* @return string
|
||||
@@ -1571,4 +1571,29 @@ class taskTest
|
||||
|
||||
return $this->objectModel->getAssignedTo4Multi($members, $task, $type);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test fetch tasks of a execution.
|
||||
*
|
||||
* @param object $currentTask
|
||||
* @param object $oldTask
|
||||
* @param object $task
|
||||
* @param bool $condition true|false
|
||||
* @param bool $hasEfforts true|false
|
||||
* @param int $teamCount
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
public function computeCurrentTaskStatusTest(object $currentTask, object $oldTask, object $task, bool $autoStatus, bool $hasEfforts, array $members): object
|
||||
{
|
||||
$task = $this->objectModel->computeCurrentTaskStatus($currentTask, $oldTask, $task, $autoStatus, $hasEfforts, $members);
|
||||
if(dao::isError())
|
||||
{
|
||||
return dao::getError();
|
||||
}
|
||||
else
|
||||
{
|
||||
return $task;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Regular → Executable
+8
-15
@@ -285,29 +285,22 @@ class todo extends control
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启一个待办事项
|
||||
* Start a todo.
|
||||
*
|
||||
* @param int $todoID
|
||||
* @param string $todoID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function start($todoID)
|
||||
public function start(string $todoID): void
|
||||
{
|
||||
$todo = $this->todo->getById($todoID);
|
||||
$todoID = (int)$todoID;
|
||||
$todo = $this->todo->getById($todoID);
|
||||
|
||||
if($todo->status == 'wait') $this->todo->start($todoID);
|
||||
if(in_array($todo->type, array('bug', 'task', 'story')))
|
||||
{
|
||||
$confirmNote = 'confirm' . ucfirst($todo->type);
|
||||
$confirmURL = $this->createLink($todo->type, 'view', "id=$todo->idvalue");
|
||||
$okTarget = isonlybody() ? 'parent' : 'window.parent.$.apps.open';
|
||||
if($todo->type == 'bug') $app = 'qa';
|
||||
if($todo->type == 'task') $app = 'execution';
|
||||
if($todo->type == 'story') $app = 'product';
|
||||
$cancelURL = $this->server->HTTP_REFERER;
|
||||
return print(js::confirm(sprintf($this->lang->todo->$confirmNote, $todo->idvalue), $confirmURL, $cancelURL, $okTarget, 'parent', $app));
|
||||
}
|
||||
if(in_array($todo->type, array('bug', 'task', 'story'))) return $this->todoZen->printConfirm($todo);
|
||||
if(isonlybody()) return print(js::reload('parent.parent'));
|
||||
|
||||
if(isonlybody())return print(js::reload('parent.parent'));
|
||||
echo js::reload('parent');
|
||||
}
|
||||
|
||||
|
||||
Regular → Executable
+7
-4
@@ -226,16 +226,19 @@ class todoModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启一个待办事项
|
||||
* Start one todo.
|
||||
*
|
||||
* @param string $todoID
|
||||
* @param int $todoID
|
||||
* @access public
|
||||
* @return void
|
||||
* @return bool
|
||||
*/
|
||||
public function start($todoID)
|
||||
public function start(int $todoID): bool
|
||||
{
|
||||
$this->dao->update(TABLE_TODO)->set('status')->eq('doing')->where('id')->eq((int)$todoID)->exec();
|
||||
$this->dao->update(TABLE_TODO)->set('status')->eq('doing')->where('id')->eq($todoID)->exec();
|
||||
$this->loadModel('action')->create('todo', $todoID, 'started');
|
||||
|
||||
return !dao::isError();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4,22 +4,48 @@ include dirname(__FILE__, 5) . "/test/lib/init.php";
|
||||
include dirname(__FILE__, 2) . '/todo.class.php';
|
||||
su('admin');
|
||||
|
||||
function initData()
|
||||
{
|
||||
$todo = zdTable('todo');
|
||||
$todo->id->range('1-5');
|
||||
$todo->account->prefix('admin')->range('1-5');
|
||||
$todo->begin->range('1710');
|
||||
$todo->end->range('1740');
|
||||
$todo->feedback->range('0');
|
||||
$todo->type->range('custom');
|
||||
$todo->cycle->range('0');
|
||||
$todo->idvalue->range('0');
|
||||
$todo->pri->range("3");
|
||||
$todo->name->prefix('测试待办')->range('1-5');
|
||||
$todo->desc->range('描述');
|
||||
$todo->status->range('wait');
|
||||
$todo->private->range('0');
|
||||
$todo->assignedTo->prefix('admin')->range('1-5');
|
||||
$todo->assignedBy->prefix('admin')->range('1-5');
|
||||
$todo->finishedBy->prefix('admin')->range('1-5');
|
||||
$todo->closedBy->prefix('admin')->range('1-5');
|
||||
$todo->deleted->range('0');
|
||||
$todo->vision->range('1.0');
|
||||
|
||||
$todo->gen(5);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
title=测试 todoModel->start();
|
||||
timeout=0
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
开始一个状态为wait的todo >> doing
|
||||
开始一个状态为doing的todo >> doing
|
||||
开始一个状态为done的todo >> doing
|
||||
读取文件/var/www/html/studyProject/zin//var/www/html/studyProject/zin/module/todo/test/model/data/todo_start.yaml失败。
|
||||
- 执行todo模块的start方法,参数是1,属性status @doing
|
||||
- 执行todo模块的start方法,参数是2,属性status @doing
|
||||
|
||||
|
||||
*/
|
||||
|
||||
$todoIDList = array('1', '2', '3');
|
||||
|
||||
$todo = new todoTest();
|
||||
|
||||
r($todo->startTest($todoIDList[0])) && p('status') && e('doing'); // 开始一个状态为wait的todo
|
||||
r($todo->startTest($todoIDList[1])) && p('status') && e('doing'); // 开始一个状态为doing的todo
|
||||
r($todo->startTest($todoIDList[2])) && p('status') && e('doing'); // 开始一个状态为done的todo
|
||||
initData();
|
||||
|
||||
r($todo->startTest(1)) && p('status') && e('doing');
|
||||
r($todo->startTest(2)) && p('status') && e('doing');
|
||||
Regular → Executable
+20
@@ -239,4 +239,24 @@ class todoZen extends todo
|
||||
|
||||
return $formData;
|
||||
}
|
||||
|
||||
/**
|
||||
* 输出确认弹框
|
||||
* Output confirm alert.
|
||||
*
|
||||
* @param object $todo
|
||||
* @access protected
|
||||
* @return int
|
||||
*/
|
||||
protected function printConfirm(object $todo): int
|
||||
{
|
||||
$confirmNote = 'confirm' . ucfirst($todo->type);
|
||||
$confirmURL = $this->createLink($todo->type, 'view', "id=$todo->idvalue");
|
||||
$okTarget = isonlybody() ? 'parent' : 'window.parent.$.apps.open';
|
||||
if($todo->type == 'bug') $app = 'qa';
|
||||
if($todo->type == 'task') $app = 'execution';
|
||||
if($todo->type == 'story') $app = 'product';
|
||||
$cancelURL = $this->server->HTTP_REFERER;
|
||||
return print(js::confirm(sprintf($this->lang->todo->$confirmNote, $todo->idvalue), $confirmURL, $cancelURL, $okTarget, 'parent', $app));
|
||||
}
|
||||
}
|
||||
|
||||
+131
-98
@@ -16,6 +16,12 @@
|
||||
error_reporting(E_ALL);
|
||||
define('RUN_MODE', 'test');
|
||||
|
||||
if($argc > 1 && $argv[1] == '-extract')
|
||||
{
|
||||
parseScript();
|
||||
exit;
|
||||
}
|
||||
|
||||
$testPath = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'test' . DIRECTORY_SEPARATOR;
|
||||
$frameworkRoot = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'framework' . DIRECTORY_SEPARATOR;
|
||||
|
||||
@@ -69,8 +75,6 @@ if(!empty($config->test->account) and !empty($config->test->password) and !empty
|
||||
$token = $token->body;
|
||||
}
|
||||
|
||||
global $isExtractAction;
|
||||
$isExtractAction = $argc > 1 && $argv[1] == '-extract';
|
||||
|
||||
/**
|
||||
* Save variable to $_result.
|
||||
@@ -97,15 +101,10 @@ function r($result)
|
||||
function p($keys = '', $delimiter = ',')
|
||||
{
|
||||
global $_result;
|
||||
global $_keys;
|
||||
global $_delimiter;
|
||||
global $isExtractAction;
|
||||
|
||||
$_keys = $keys;
|
||||
$_delimiter = $delimiter;
|
||||
|
||||
if($isExtractAction) return true;
|
||||
|
||||
if(empty($_result)) return print(implode("\n", array_fill(0, substr_count($keys, $delimiter) + 1, 0)) . "\n");
|
||||
|
||||
if(is_array($_result) and isset($_result['code']) and $_result['code'] == 'fail') return print((string) $_result['message'] . "\n");
|
||||
@@ -131,86 +130,154 @@ function p($keys = '', $delimiter = ',')
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
function parseScript($expect)
|
||||
function parseScript()
|
||||
{
|
||||
$debugInfo = debug_backtrace();
|
||||
if(!empty($debugInfo))
|
||||
{
|
||||
global $_keys;
|
||||
global $_delimiter;
|
||||
global $_current;
|
||||
|
||||
$keys = $_keys;
|
||||
$delimiter = $_delimiter;
|
||||
$file = $debugInfo[count($debugInfo)-1]['file'];
|
||||
$contents = file_get_contents($file);
|
||||
$rpeList = genParamsByRPE($contents);
|
||||
|
||||
list($moduleName, $methodName, $methodParam) = genParamsByRPE($contents);
|
||||
|
||||
$isGrup = false;
|
||||
$stepDesc = '';
|
||||
$expects = empty($expect) ? array() : explode($delimiter, $expect);
|
||||
|
||||
$object = '';
|
||||
$rowIndex = -1;
|
||||
$pos = strpos($keys, ':');
|
||||
if($pos)
|
||||
foreach($rpeList as $rpe)
|
||||
{
|
||||
$arrKey = substr($keys, 0, $pos);
|
||||
$keys = substr($keys, $pos + 1);
|
||||
$pos = strpos($arrKey, '[');
|
||||
list($moduleName, $methodName, $methodParam) = $rpe[0];
|
||||
$expectStr = trim($rpe[1], '"\'');
|
||||
$pParam = $rpe[2];
|
||||
$keys = $pParam[0];
|
||||
$delimiter = $pParam[1] ? $pParam[1] : ',';
|
||||
$isGrup = false;
|
||||
$stepDesc = '';
|
||||
$expects = '' === $expectStr ? array() : explode($delimiter, $expectStr);
|
||||
|
||||
$rowIndex = -1;
|
||||
$pos = strpos($keys, ':');
|
||||
if($pos)
|
||||
{
|
||||
$object = substr($arrKey, 0, $pos);
|
||||
$rowIndex = trim(substr($arrKey, $pos + 1), ']');
|
||||
$arrKey = substr($keys, 0, $pos);
|
||||
$keys = substr($keys, $pos + 1);
|
||||
$pos = strpos($arrKey, '[');
|
||||
$rowIndex = $pos ? trim(substr($arrKey, $pos + 1), ']') : $arrKey;
|
||||
}
|
||||
$keys = explode($delimiter, $keys);
|
||||
|
||||
if(count($keys) > 1) $isGrup = true;
|
||||
|
||||
if ($methodName === 0 && $methodParam === 0)
|
||||
{
|
||||
$stepDesc = "- 执行{$moduleName}" . ($isGrup ? "\n" : '');
|
||||
}
|
||||
else
|
||||
{
|
||||
$rowIndex = $arrKey;
|
||||
$stepDesc = "- 执行{$moduleName}模块的{$methodName}方法,参数是{$methodParam}" . ($isGrup ? "\n" : '');
|
||||
}
|
||||
}
|
||||
$keys = explode($delimiter, $keys);
|
||||
|
||||
if(count($keys) > 1) $isGrup = true;
|
||||
if(empty($keys)) $stepDesc .= " @{$expects[0]}\n";
|
||||
|
||||
if ($methodName === 0 && $methodParam === 0)
|
||||
{
|
||||
$stepDesc = "- 执行{$moduleName}" . ($isGrup ? "\n" : '');
|
||||
}
|
||||
else
|
||||
{
|
||||
$stepDesc = "- 执行{$moduleName}模块的{$methodName}方法,参数是{$methodParam}" . ($isGrup ? "\n" : '');
|
||||
}
|
||||
|
||||
if(empty($keys)) $stepDesc .= " @{$expects[0]}\n";
|
||||
|
||||
foreach($keys as $index => $row)
|
||||
{
|
||||
if(count($keys) < 2)
|
||||
foreach($keys as $index => $row)
|
||||
{
|
||||
$stepExpect = isset($expects[$index]) ? $expects[$index] : '';
|
||||
if(count($expects) == 1) $stepExpect = $expects[0];
|
||||
if($rowIndex == -1)
|
||||
{
|
||||
$stepDesc .= $row ? ",属性{$row}" : '';
|
||||
$stepDesc .= " @$expect";
|
||||
$stepDesc .= ($isGrup ? ' - ' : '') . "属性{$row} @{$stepExpect}\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
$stepDesc .= ($rowIndex == -1 ? '' : ($isGrup ? ' - ' : '') . ",属性{$rowIndex} @{$expects[0]}\n");
|
||||
$stepDesc .= ($isGrup ? ' - ' : '') . "第{$rowIndex}条的{$row}属性 @{$stepExpect}\n";
|
||||
}
|
||||
}
|
||||
else
|
||||
echo $stepDesc . ($isGrup ? "\n" : "\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Split function params.
|
||||
* 从p()函数提取传入参数
|
||||
*
|
||||
* @param array $params
|
||||
* @return array
|
||||
*/
|
||||
function splitParam($params)
|
||||
{
|
||||
$newParams = array();
|
||||
foreach($params as $param)
|
||||
{
|
||||
$param = trim($param);
|
||||
$firstSymbol = substr($param, 0, 1);
|
||||
$paramArray = str_split($param);
|
||||
$delimiterIndex = -1;
|
||||
|
||||
foreach($paramArray as $i => $p)
|
||||
{
|
||||
if($i == 0) continue;
|
||||
if($p === $firstSymbol && (!isset($paramArray[$i-1]) || '\\' != $paramArray[$i-1]))
|
||||
{
|
||||
if($rowIndex == -1)
|
||||
{
|
||||
$stepDesc .= ($isGrup ? ' - ' : '- ') . "属性{$row} @{$expects[$index]}\n";
|
||||
}
|
||||
else {
|
||||
$stepDesc .= ($isGrup ? ' - ' : '- ') . "第{$rowIndex}条的{$row}属性 @{$expects[$index]}\n";
|
||||
}
|
||||
$delimiterIndex = $i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
echo $stepDesc . ($isGrup ? "\n" : "\n");
|
||||
|
||||
if($delimiterIndex === -1)
|
||||
{
|
||||
$newParams[] = array($param, '');
|
||||
continue;
|
||||
}
|
||||
|
||||
$firstParam = substr($param, 0, $delimiterIndex);
|
||||
$firstParam = trim(trim($firstParam), '\'"');
|
||||
$lastParam = substr($param, $delimiterIndex + 1);
|
||||
$lastParam = trim(trim($lastParam), '\'"');
|
||||
$newParams[] = array($firstParam, $lastParam);
|
||||
}
|
||||
|
||||
return $newParams;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate module,method,param from r function.
|
||||
* 从r()函数提取调用的moduleName,methodName,methodParam
|
||||
*
|
||||
* @param array $rParams
|
||||
* @return array
|
||||
*/
|
||||
function genModuleAndMethod($rParams)
|
||||
{
|
||||
$newParams = array();
|
||||
foreach($rParams as $index => $param)
|
||||
{
|
||||
$param = trim($param, "'");
|
||||
$objArrowCount = substr_count($param, '->');
|
||||
$rParamsStructureList = explode('->', $param);
|
||||
|
||||
if($objArrowCount == 1)
|
||||
{
|
||||
$moduleName = substr($rParamsStructureList[0], 1);
|
||||
$method = $rParamsStructureList[1];
|
||||
$methodName = substr(explode('(', $method)[0], 0, -4);
|
||||
$methodParam = substr(explode('(', $method)[1], 0, -1);
|
||||
$methodParam = trim($methodParam, "'");
|
||||
}
|
||||
elseif($objArrowCount == 2)
|
||||
{
|
||||
$moduleName = $rParamsStructureList[1];
|
||||
$method = $rParamsStructureList[2];
|
||||
$methodName = explode('(', $method)[0];
|
||||
$methodParam = trim(substr(explode('(', $method)[1], 0, -1), ")");
|
||||
$methodParam = trim($methodParam, "'");
|
||||
}
|
||||
else
|
||||
{
|
||||
$newParams[] = array($param, 0, 0);
|
||||
continue;
|
||||
}
|
||||
|
||||
$methodParam = preg_replace("/,\s*'/", ', ', $methodParam);
|
||||
$newParams[] = array($moduleName, $methodName, $methodParam);
|
||||
}
|
||||
|
||||
return $newParams;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -222,7 +289,6 @@ function parseScript($expect)
|
||||
*/
|
||||
function genParamsByRPE($rpe)
|
||||
{
|
||||
global $_current;
|
||||
preg_match_all("/r\((.*?)\)\s*&&\s*p\((.*?)\)\s*&&\s*e\((.*?)\);/", $rpe, $matches);
|
||||
$rParams = !empty($matches[1]) ? $matches[1] : array();
|
||||
$pParams = !empty($matches[2]) ? $matches[2] : array();
|
||||
@@ -231,39 +297,13 @@ function genParamsByRPE($rpe)
|
||||
$pParams = is_array($pParams) ? $pParams : array($pParams);
|
||||
$eParams = is_array($eParams) ? $eParams : array($eParams);
|
||||
|
||||
$_current = intval($_current);
|
||||
$param = $rParams[$_current];
|
||||
$_current++;
|
||||
$param = trim($param, "'");
|
||||
$objArrowCount = substr_count($param, '->');
|
||||
$rParamsStructureList = explode('->', $param);
|
||||
$pParamsArray = splitParam($pParams);
|
||||
$rpeList = array();
|
||||
$rParamArray = genModuleAndMethod($rParams);
|
||||
|
||||
if($objArrowCount == 1)
|
||||
{
|
||||
$moduleName = substr($rParamsStructureList[0], 1);
|
||||
$method = $rParamsStructureList[1];
|
||||
$methodName = substr(explode('(', $method)[0], 0, -4);
|
||||
$methodParam = substr(explode('(', $method)[1], 0, -1);
|
||||
$methodParam = trim($methodParam, "'");
|
||||
}
|
||||
elseif($objArrowCount == 2)
|
||||
{
|
||||
$moduleName = $rParamsStructureList[1];
|
||||
$method = $rParamsStructureList[2];
|
||||
$methodName = explode('(', $method)[0];
|
||||
$methodParam = trim(substr(explode('(', $method)[1], 0, -1), ")");
|
||||
$methodParam = trim($methodParam, "'");
|
||||
}
|
||||
else
|
||||
{
|
||||
$moduleName = $param;
|
||||
$methodName = 0;
|
||||
$methodParam = 0;
|
||||
}
|
||||
foreach($rParamArray as $index => $param) $rpeList[] = array($param, $eParams[$index], $pParamsArray[$index]);
|
||||
|
||||
$methodParam = preg_replace("/,\s*'/", ', ', $methodParam);
|
||||
|
||||
return array($moduleName, $methodName, $methodParam);
|
||||
return $rpeList;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -347,13 +387,6 @@ function getValues($value, $keys, $delimiter)
|
||||
*/
|
||||
function e($expect)
|
||||
{
|
||||
global $isExtractAction;
|
||||
if($isExtractAction)
|
||||
{
|
||||
parseScript($expect);
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user