Merge branch '18.x' into ipd1.1
This commit is contained in:
+108
-46
@@ -53,177 +53,239 @@ $config->task->excludeCheckFileds = ',pri,estStartedDitto,deadlineDitto,parent,r
|
||||
$config->task->datatable = new stdclass();
|
||||
$config->task->datatable->defaultField = array('id', 'name', 'pri', 'assignedTo', 'status', 'finishedBy', 'deadline', 'estimate', 'consumed', 'left', 'progress', 'actions');
|
||||
|
||||
global $lang;
|
||||
global $app, $lang;
|
||||
$config->task->datatable->fieldList['id']['title'] = 'idAB';
|
||||
$config->task->datatable->fieldList['id']['fixed'] = 'left';
|
||||
$config->task->datatable->fieldList['id']['width'] = '70';
|
||||
$config->task->datatable->fieldList['id']['required'] = 'yes';
|
||||
$config->task->datatable->fieldList['id']['type'] = 'checkID';
|
||||
$config->task->datatable->fieldList['id']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['id']['checkbox'] = true;
|
||||
|
||||
$config->task->datatable->fieldList['name']['title'] = 'name';
|
||||
$config->task->datatable->fieldList['name']['fixed'] = 'left';
|
||||
$config->task->datatable->fieldList['name']['width'] = 'auto';
|
||||
$config->task->datatable->fieldList['name']['required'] = 'yes';
|
||||
$config->task->datatable->fieldList['name']['title'] = 'name';
|
||||
$config->task->datatable->fieldList['name']['required'] = 'yes';
|
||||
$config->task->datatable->fieldList['name']['width'] = '356';
|
||||
$config->task->datatable->fieldList['name']['type'] = 'html';
|
||||
$config->task->datatable->fieldList['name']['fixed'] = 'left';
|
||||
$config->task->datatable->fieldList['name']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['name']['nestedToggle'] = true;
|
||||
$config->task->datatable->fieldList['name']['iconRender'] = true;
|
||||
|
||||
$config->task->datatable->fieldList['pri']['title'] = 'priAB';
|
||||
$config->task->datatable->fieldList['pri']['fixed'] = 'left';
|
||||
$config->task->datatable->fieldList['pri']['width'] = '35';
|
||||
$config->task->datatable->fieldList['pri']['type'] = 'html';
|
||||
$config->task->datatable->fieldList['pri']['width'] = '45';
|
||||
$config->task->datatable->fieldList['pri']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['pri']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['pri']['name'] = $lang->task->pri;
|
||||
|
||||
$config->task->datatable->fieldList['assignedTo']['title'] = 'assignedTo';
|
||||
$config->task->datatable->fieldList['assignedTo']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['assignedTo']['width'] = '100';
|
||||
$config->task->datatable->fieldList['assignedTo']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['assignedTo']['control'] = 'select';
|
||||
$config->task->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' => 'getTeamMemberPairs', 'params' => '$executionID&execution');
|
||||
$config->task->datatable->fieldList['assignedTo']['title'] = 'assignedTo';
|
||||
$config->task->datatable->fieldList['assignedTo']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['assignedTo']['width'] = '100';
|
||||
$config->task->datatable->fieldList['assignedTo']['type'] = 'html';
|
||||
$config->task->datatable->fieldList['assignedTo']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['assignedTo']['currentUser'] = $app->user->account;
|
||||
$config->task->datatable->fieldList['assignedTo']['assignLink'] = array('module' => 'task', 'method' => 'assignTo', 'params' => 'executionID={execution}&taskID={id}');
|
||||
$config->task->datatable->fieldList['assignedTo']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['assignedTo']['control'] = 'select';
|
||||
$config->task->datatable->fieldList['assignedTo']['dataSource'] = array('module' => 'user', 'method' => 'getTeamMemberPairs', 'params' => '$executionID&execution');
|
||||
|
||||
$config->task->datatable->fieldList['assignedDate']['title'] = 'assignedDate';
|
||||
$config->task->datatable->fieldList['assignedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['assignedDate']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['assignedDate']['width'] = '110';
|
||||
$config->task->datatable->fieldList['assignedDate']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['assignedDate']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['type']['title'] = 'typeAB';
|
||||
$config->task->datatable->fieldList['type']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['type']['type'] = 'category';
|
||||
$config->task->datatable->fieldList['type']['width'] = '80';
|
||||
$config->task->datatable->fieldList['type']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['type']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['type']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['type']['map'] = $lang->task->typeList;
|
||||
|
||||
$config->task->datatable->fieldList['status']['title'] = 'statusAB';
|
||||
$config->task->datatable->fieldList['status']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['status']['type'] = 'html';
|
||||
$config->task->datatable->fieldList['status']['width'] = '60';
|
||||
$config->task->datatable->fieldList['status']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['status']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['status']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['finishedBy']['title'] = 'finishedByAB';
|
||||
$config->task->datatable->fieldList['finishedBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['finishedBy']['type'] = 'user';
|
||||
$config->task->datatable->fieldList['finishedBy']['width'] = '80';
|
||||
$config->task->datatable->fieldList['finishedBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['finishedBy']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['finishedBy']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['deadline']['title'] = 'deadlineAB';
|
||||
$config->task->datatable->fieldList['deadline']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['deadline']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['deadline']['width'] = '70';
|
||||
$config->task->datatable->fieldList['deadline']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['deadline']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['deadline']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['deadline']['control'] = 'date';
|
||||
$config->task->datatable->fieldList['deadline']['control'] = 'date';
|
||||
|
||||
$config->task->datatable->fieldList['estimate']['title'] = 'estimateAB';
|
||||
$config->task->datatable->fieldList['estimate']['width'] = '85';
|
||||
$config->task->datatable->fieldList['estimate']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['estimate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['estimate']['width'] = '65';
|
||||
$config->task->datatable->fieldList['estimate']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['consumed']['title'] = 'consumedAB';
|
||||
$config->task->datatable->fieldList['consumed']['width'] = '85';
|
||||
$config->task->datatable->fieldList['consumed']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['consumed']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['consumed']['width'] = '65';
|
||||
$config->task->datatable->fieldList['consumed']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['left']['title'] = 'leftAB';
|
||||
$config->task->datatable->fieldList['left']['width'] = '85';
|
||||
$config->task->datatable->fieldList['left']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['left']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['left']['width'] = '65';
|
||||
$config->task->datatable->fieldList['left']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['progress']['title'] = 'progressAB';
|
||||
$config->task->datatable->fieldList['progress']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['progress']['width'] = '75';
|
||||
$config->task->datatable->fieldList['progress']['type'] = 'progress';
|
||||
$config->task->datatable->fieldList['progress']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['progress']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['progress']['sort'] = 'no';
|
||||
$config->task->datatable->fieldList['progress']['sortType'] = false;
|
||||
$config->task->datatable->fieldList['progress']['name'] = $lang->task->progress;
|
||||
|
||||
$config->task->datatable->fieldList['openedBy']['title'] = 'openedByAB';
|
||||
$config->task->datatable->fieldList['openedBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['openedBy']['type'] = 'user';
|
||||
$config->task->datatable->fieldList['openedBy']['width'] = '90';
|
||||
$config->task->datatable->fieldList['openedBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['openedBy']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['openedBy']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['openedDate']['title'] = 'openedDate';
|
||||
$config->task->datatable->fieldList['openedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['openedDate']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['openedDate']['width'] = '110';
|
||||
$config->task->datatable->fieldList['openedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['openedDate']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['openedDate']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['estStarted']['title'] = 'estStarted';
|
||||
$config->task->datatable->fieldList['estStarted']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['estStarted']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['estStarted']['width'] = '90';
|
||||
$config->task->datatable->fieldList['estStarted']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['estStarted']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['estStarted']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['estStarted']['control'] = 'date';
|
||||
|
||||
$config->task->datatable->fieldList['realStarted']['title'] = 'realStarted';
|
||||
$config->task->datatable->fieldList['realStarted']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['realStarted']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['realStarted']['width'] = '95';
|
||||
$config->task->datatable->fieldList['realStarted']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['realStarted']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['realStarted']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['finishedDate']['title'] = 'finishedDateAB';
|
||||
$config->task->datatable->fieldList['finishedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['finishedDate']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['finishedDate']['width'] = '105';
|
||||
$config->task->datatable->fieldList['finishedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['finishedDate']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['finishedDate']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['canceledBy']['title'] = 'canceledBy';
|
||||
$config->task->datatable->fieldList['canceledBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['canceledBy']['type'] = 'user';
|
||||
$config->task->datatable->fieldList['canceledBy']['width'] = '110';
|
||||
$config->task->datatable->fieldList['canceledBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['canceledBy']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['canceledBy']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['canceledDate']['title'] = 'canceledDate';
|
||||
$config->task->datatable->fieldList['canceledDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['canceledDate']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['canceledDate']['width'] = '115';
|
||||
$config->task->datatable->fieldList['canceledDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['canceledDate']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['canceledDate']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['closedBy']['title'] = 'closedBy';
|
||||
$config->task->datatable->fieldList['closedBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['closedBy']['type'] = 'user';
|
||||
$config->task->datatable->fieldList['closedBy']['width'] = '100';
|
||||
$config->task->datatable->fieldList['closedBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['closedBy']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['closedBy']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['closedDate']['title'] = 'closedDate';
|
||||
$config->task->datatable->fieldList['closedDate']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['closedDate']['width'] = '115';
|
||||
$config->task->datatable->fieldList['closedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['closedDate']['width'] = '95';
|
||||
$config->task->datatable->fieldList['closedDate']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['closedDate']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['closedReason']['title'] = 'closedReason';
|
||||
$config->task->datatable->fieldList['closedReason']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['closedReason']['width'] = '120';
|
||||
$config->task->datatable->fieldList['closedReason']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['closedReason']['dataSource'] = array('lang' => 'reasonList');
|
||||
$config->task->datatable->fieldList['closedReason']['title'] = 'closedReason';
|
||||
$config->task->datatable->fieldList['closedReason']['type'] = 'category';
|
||||
$config->task->datatable->fieldList['closedReason']['width'] = '120';
|
||||
$config->task->datatable->fieldList['closedReason']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['closedReason']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['closedReason']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['closedReason']['map'] = $lang->task->reasonList;
|
||||
|
||||
$config->task->datatable->fieldList['lastEditedBy']['title'] = 'lastEditedBy';
|
||||
$config->task->datatable->fieldList['lastEditedBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['lastEditedBy']['width'] = '95';
|
||||
$config->task->datatable->fieldList['lastEditedBy']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['lastEditedBy']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['lastEditedBy']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['lastEditedDate']['title'] = 'lastEditedDate';
|
||||
$config->task->datatable->fieldList['lastEditedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['lastEditedDate']['width'] = '120';
|
||||
$config->task->datatable->fieldList['lastEditedDate']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['lastEditedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['lastEditedDate']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['lastEditedDate']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['activatedDate']['title'] = 'activatedDate';
|
||||
$config->task->datatable->fieldList['activatedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['activatedDate']['width'] = '90';
|
||||
$config->task->datatable->fieldList['activatedDate']['type'] = 'date';
|
||||
$config->task->datatable->fieldList['activatedDate']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['activatedDate']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['activatedDate']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['story']['title'] = "storyAB";
|
||||
$config->task->datatable->fieldList['story']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['story']['width'] = '80';
|
||||
$config->task->datatable->fieldList['story']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['story']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['story']['required'] = 'no';
|
||||
$config->task->datatable->fieldList['story']['name'] = $lang->task->story;
|
||||
$config->task->datatable->fieldList['story']['type'] = 'html';
|
||||
$config->task->datatable->fieldList['story']['control'] = 'select';
|
||||
$config->task->datatable->fieldList['story']['dataSource'] = array('module' => 'story', 'method' => 'getExecutionStoryPairs', 'params' => '$executionID&0&all&&&active');
|
||||
|
||||
$config->task->datatable->fieldList['mailto']['title'] = 'mailto';
|
||||
$config->task->datatable->fieldList['mailto']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['mailto']['width'] = '100';
|
||||
$config->task->datatable->fieldList['mailto']['fixed'] = 'no';
|
||||
$config->task->datatable->fieldList['mailto']['sortType'] = true;
|
||||
$config->task->datatable->fieldList['mailto']['required'] = 'no';
|
||||
|
||||
$config->task->datatable->fieldList['module']['title'] = 'idAB';
|
||||
$config->task->datatable->fieldList['module']['title'] = 'module';
|
||||
$config->task->datatable->fieldList['module']['control'] = 'select';
|
||||
$config->task->datatable->fieldList['module']['dataSource'] = array('module' => 'tree', 'method' => 'getTaskOptionMenu', 'params' => '$executionID');
|
||||
$config->task->datatable->fieldList['module']['display'] = false;
|
||||
|
||||
$config->task->datatable->fieldList['execution']['title'] = 'idAB';
|
||||
$config->task->datatable->fieldList['execution']['title'] = 'execution';
|
||||
$config->task->datatable->fieldList['execution']['control'] = 'hidden';
|
||||
$config->task->datatable->fieldList['execution']['dataSource'] = array('module' => 'execution', 'method' => 'getPairs');
|
||||
$config->task->datatable->fieldList['execution']['display'] = false;
|
||||
|
||||
$config->task->datatable->fieldList['project']['title'] = 'idAB';
|
||||
$config->task->datatable->fieldList['project']['title'] = 'project';
|
||||
$config->task->datatable->fieldList['project']['control'] = 'hidden';
|
||||
$config->task->datatable->fieldList['project']['dataSource'] = array('module' => 'project', 'method' => 'getPairs');
|
||||
$config->task->datatable->fieldList['project']['display'] = false;
|
||||
|
||||
$config->task->datatable->fieldList['mode']['title'] = 'idAB';
|
||||
$config->task->datatable->fieldList['mode']['title'] = 'mode';
|
||||
$config->task->datatable->fieldList['mode']['control'] = 'hidden';
|
||||
$config->task->datatable->fieldList['mode']['display'] = false;
|
||||
|
||||
$config->task->datatable->fieldList['desc']['title'] = 'idAB';
|
||||
$config->task->datatable->fieldList['desc']['title'] = 'desc';
|
||||
$config->task->datatable->fieldList['desc']['control'] = 'textarea';
|
||||
$config->task->datatable->fieldList['desc']['display'] = false;
|
||||
|
||||
$config->task->datatable->fieldList['actions']['title'] = 'actions';
|
||||
$config->task->datatable->fieldList['actions']['type'] = 'html';
|
||||
$config->task->datatable->fieldList['actions']['fixed'] = 'right';
|
||||
$config->task->datatable->fieldList['actions']['width'] = '180';
|
||||
$config->task->datatable->fieldList['actions']['required'] = 'yes';
|
||||
|
||||
@@ -1224,7 +1224,7 @@ class task extends control
|
||||
if($task->assignedTo == $currentAccount) $taskEffortFold = 1;
|
||||
if(!empty($task->team))
|
||||
{
|
||||
$teamMember = array_column($task->team, 'account');
|
||||
$teamMember = helper::arrayColumn($task->team, 'account');
|
||||
if(in_array($currentAccount, $teamMember)) $taskEffortFold = 1;
|
||||
}
|
||||
}
|
||||
@@ -1873,7 +1873,7 @@ class task extends control
|
||||
|
||||
if(!empty($this->view->task->team))
|
||||
{
|
||||
$teamAccounts = array_column($this->view->task->team, 'account');
|
||||
$teamAccounts = helper::arrayColumn($this->view->task->team, 'account');
|
||||
$teamMembers = array();
|
||||
foreach($this->view->members as $account => $name)
|
||||
{
|
||||
@@ -2126,7 +2126,7 @@ class task extends control
|
||||
if($this->session->taskOnlyCondition)
|
||||
{
|
||||
$tasks = $this->dao->select('*')->from(TABLE_TASK)->alias('t1')->where($this->session->taskQueryCondition)
|
||||
->beginIF($this->post->exportType == 'selected')->andWhere('t1.id')->in($this->cookie->checkedItem)->fi()
|
||||
->beginIF($this->post->exportType == 'selected')->andWhere('t1.id')->in($this->post->checkedItem)->fi()
|
||||
->orderBy($sort)->fetchAll('id');
|
||||
|
||||
foreach($tasks as $key => $task)
|
||||
@@ -2149,7 +2149,7 @@ class task extends control
|
||||
}
|
||||
elseif($this->session->taskQueryCondition)
|
||||
{
|
||||
$stmt = $this->dbh->query($this->session->taskQueryCondition . ($this->post->exportType == 'selected' ? " AND t1.id IN({$this->cookie->checkedItem})" : '') . " ORDER BY " . strtr($orderBy, '_', ' '));
|
||||
$stmt = $this->dbh->query($this->session->taskQueryCondition . ($this->post->exportType == 'selected' ? " AND t1.id IN({$this->post->checkedItem})" : '') . " ORDER BY " . strtr($orderBy, '_', ' '));
|
||||
while($row = $stmt->fetch()) $tasks[$row->id] = $row;
|
||||
}
|
||||
|
||||
|
||||
+200
-22
@@ -121,6 +121,8 @@ class taskModel extends model
|
||||
->setIF(is_numeric($this->post->estimate), 'estimate', (float)$this->post->estimate)
|
||||
->setIF(is_numeric($this->post->consumed), 'consumed', (float)$this->post->consumed)
|
||||
->setIF(is_numeric($this->post->left), 'left', (float)$this->post->left)
|
||||
->setIF(!$this->post->estStarted, 'estStarted', null)
|
||||
->setIF(!$this->post->deadline, 'deadline', null)
|
||||
->setDefault('openedBy', $this->app->user->account)
|
||||
->setDefault('openedDate', helper::now())
|
||||
->setDefault('vision', $this->config->vision)
|
||||
@@ -128,8 +130,6 @@ class taskModel extends model
|
||||
->stripTags($this->config->task->editor->create['id'], $this->config->allowedTags)
|
||||
->join('mailto', ',')
|
||||
->remove('after,files,labels,assignedTo,uid,storyEstimate,storyDesc,storyPri,team,teamSource,teamEstimate,teamConsumed,teamLeft,teamMember,multiple,teams,contactListMenu,selectTestStory,testStory,testPri,testEstStarted,testDeadline,testAssignedTo,testEstimate,sync,otherLane,region,lane,estStartedDitto,deadlineDitto')
|
||||
->removeIF(!$this->post->estStarted, 'estStarted')
|
||||
->removeIF(!$this->post->deadline, 'deadline')
|
||||
->add('version', 1)
|
||||
->get();
|
||||
|
||||
@@ -172,7 +172,7 @@ class taskModel extends model
|
||||
|
||||
if(strpos($requiredFields, ',estStarted,') !== false and !isset($task->estStarted)) dao::$errors['estStarted'] = sprintf($this->lang->error->notempty, $this->lang->task->estStarted);
|
||||
if(strpos($requiredFields, ',deadline,') !== false and !isset($task->deadline)) dao::$errors['deadline'] = sprintf($this->lang->error->notempty, $this->lang->task->deadline);
|
||||
if(isset($task->estStarted) and isset($task->deadline) and !helper::isZeroDate($task->deadline) and $task->deadline <= $task->estStarted) dao::$errors['deadline'] = sprintf($this->lang->error->ge, $this->lang->task->deadline, $task->estStarted);
|
||||
if(isset($task->estStarted) and isset($task->deadline) and !helper::isZeroDate($task->deadline) and $task->deadline < $task->estStarted) dao::$errors['deadline'] = sprintf($this->lang->error->ge, $this->lang->task->deadline, $task->estStarted);
|
||||
|
||||
if(dao::isError()) return false;
|
||||
|
||||
@@ -2522,8 +2522,8 @@ class taskModel extends model
|
||||
{
|
||||
if(is_string($type)) $type = strtolower($type);
|
||||
$orderBy = str_replace('pri_', 'priOrder_', $orderBy);
|
||||
$fields = "DISTINCT t1.*, t2.id AS storyID, t2.title AS storyTitle, t2.product, t2.branch, t2.version AS latestStoryVersion, t2.status AS storyStatus, t3.realname AS assignedToRealName, IF(t1.`pri` = 0, {$this->config->maxPriValue}, t1.`pri`) as priOrder";
|
||||
($this->config->edition == 'max' or $this->config->edition == 'ipd') && $fields .= ', t6.name as designName, t6.version as latestDesignVersion';
|
||||
$fields = "DISTINCT t1.*, t2.id AS storyID, t2.title AS storyTitle, t2.product, t2.branch, t2.version AS latestStoryVersion, t2.status AS storyStatus, IF(t1.`pri` = 0, {$this->config->maxPriValue}, t1.`pri`) as priOrder";
|
||||
($this->config->edition == 'max' or $this->config->edition == 'ipd') && $fields .= ', t5.name as designName, t5.version as latestDesignVersion';
|
||||
|
||||
$actionIDList = array();
|
||||
if($type == 'assignedbyme') $actionIDList = $this->dao->select('objectID')->from(TABLE_ACTION)->where('objectType')->eq('task')->andWhere('action')->eq('assigned')->andWhere('actor')->eq($this->app->user->account)->fetchPairs('objectID', 'objectID');
|
||||
@@ -2531,21 +2531,20 @@ class taskModel extends model
|
||||
$tasks = $this->dao->select($fields)
|
||||
->from(TABLE_TASK)->alias('t1')
|
||||
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
|
||||
->leftJoin(TABLE_USER)->alias('t3')->on('t1.assignedTo = t3.account')
|
||||
->leftJoin(TABLE_TASKTEAM)->alias('t4')->on('t4.task = t1.id')
|
||||
->leftJoin(TABLE_MODULE)->alias('t5')->on('t1.module = t5.id')
|
||||
->beginIF($this->config->edition == 'max' or $this->config->edition == 'ipd')->leftJoin(TABLE_DESIGN)->alias('t6')->on('t1.design= t6.id')->fi()
|
||||
->leftJoin(TABLE_TASKTEAM)->alias('t3')->on('t3.task = t1.id')
|
||||
->beginIF($productID)->leftJoin(TABLE_MODULE)->alias('t4')->on('t1.module = t4.id')->fi()
|
||||
->beginIF($this->config->edition == 'max' or $this->config->edition == 'ipd')->leftJoin(TABLE_DESIGN)->alias('t5')->on('t1.design= t5.id')->fi()
|
||||
->where('t1.execution')->eq((int)$executionID)
|
||||
->beginIF($type == 'myinvolved')
|
||||
->andWhere("((t4.`account` = '{$this->app->user->account}') OR t1.`assignedTo` = '{$this->app->user->account}' OR t1.`finishedby` = '{$this->app->user->account}')")
|
||||
->andWhere("((t3.`account` = '{$this->app->user->account}') OR t1.`assignedTo` = '{$this->app->user->account}' OR t1.`finishedby` = '{$this->app->user->account}')")
|
||||
->fi()
|
||||
->beginIF($productID)->andWhere("((t5.root=" . (int)$productID . " and t5.type='story') OR t2.product=" . (int)$productID . ")")->fi()
|
||||
->beginIF($productID)->andWhere("((t4.root=" . (int)$productID . " and t4.type='story') OR t2.product=" . (int)$productID . ")")->fi()
|
||||
->beginIF($type == 'undone')->andWhere('t1.status')->notIN('done,closed')->fi()
|
||||
->beginIF($type == 'needconfirm')->andWhere('t2.version > t1.storyVersion')->andWhere("t2.status = 'active'")->fi()
|
||||
->beginIF($type == 'assignedtome')->andWhere("(t1.assignedTo = '{$this->app->user->account}' or (t1.mode = 'multi' and t4.`account` = '{$this->app->user->account}' and t1.status != 'closed' and t4.status != 'done') )")->fi()
|
||||
->beginIF($type == 'assignedtome')->andWhere("(t1.assignedTo = '{$this->app->user->account}' or (t1.mode = 'multi' and t3.`account` = '{$this->app->user->account}' and t1.status != 'closed' and t3.status != 'done') )")->fi()
|
||||
->beginIF($type == 'finishedbyme')
|
||||
->andWhere('t1.finishedby', 1)->eq($this->app->user->account)
|
||||
->orWhere('t4.status')->eq("done")
|
||||
->orWhere('t3.status')->eq("done")
|
||||
->markRight(1)
|
||||
->fi()
|
||||
->beginIF($type == 'delayed')->andWhere('t1.deadline')->gt('1970-1-1')->andWhere('t1.deadline')->lt(date(DT_DATE1))->andWhere('t1.status')->in('wait,doing')->fi()
|
||||
@@ -2577,11 +2576,13 @@ class taskModel extends model
|
||||
{
|
||||
if($task->parent > 0) $parents[$task->parent] = $task->parent;
|
||||
}
|
||||
$parents = $this->dao->select('*')->from(TABLE_TASK)->where('id')->in($parents)->fetchAll('id');
|
||||
$parents = $this->dao->select('*')->from(TABLE_TASK)->where('id')->in($parents)->fetchAll('id');
|
||||
$userList = $this->dao->select('account,realname')->from(TABLE_USER)->fetchPairs('account');
|
||||
|
||||
if($this->config->vision == 'lite') $tasks = $this->appendLane($tasks);
|
||||
foreach($tasks as $task)
|
||||
{
|
||||
$task->assignedToRealName = zget($userList, $task->assignedTo);
|
||||
if($task->parent > 0)
|
||||
{
|
||||
if(isset($tasks[$task->parent]))
|
||||
@@ -3988,10 +3989,11 @@ class taskModel extends model
|
||||
*
|
||||
* @param object $task
|
||||
* @param array $users
|
||||
* @param bool $output
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function printAssignedHtml($task, $users)
|
||||
public function printAssignedHtml($task, $users, $output = true)
|
||||
{
|
||||
$btnTextClass = '';
|
||||
$btnClass = '';
|
||||
@@ -4025,9 +4027,12 @@ class taskModel extends model
|
||||
$btnClass .= $task->assignedTo == 'closed' ? ' disabled' : '';
|
||||
$btnClass .= ' iframe btn btn-icon-left btn-sm';
|
||||
$assignToLink = $task->assignedTo == 'closed' ? '#' : helper::createLink('task', 'assignTo', "executionID=$task->execution&taskID=$task->id", '', true);
|
||||
$assignToHtml = html::a($assignToLink, "<i class='icon icon-hand-right'></i> <span title='" . $assignedToTitle . "'>{$assignedToText}</span>", '', "class='$btnClass'");
|
||||
$assignToHtml = html::a($assignToLink, "<i class='icon icon-hand-right'></i> <span title='" . $assignedToTitle . "'>{$assignedToText}</span>", '', "class='$btnClass' data-toggle='modal'");
|
||||
|
||||
echo !common::hasPriv('task', 'assignTo', $task) ? "<span style='padding-left: 21px' class='{$btnTextClass}'>{$assignedToText}</span>" : $assignToHtml;
|
||||
$html = !common::hasPriv('task', 'assignTo', $task) ? "<span style='padding-left: 21px' class='{$btnTextClass}'>{$assignedToText}</span>" : $assignToHtml;
|
||||
|
||||
if(!$output) return $html;
|
||||
echo $html;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -4304,17 +4309,17 @@ class taskModel extends model
|
||||
$canEdit = common::hasPriv('task', 'edit');
|
||||
$canBatchCreate = ($this->config->vision != 'lite' and common::hasPriv('task', 'batchCreate'));
|
||||
|
||||
if($task->status != 'pause') $menu .= $this->buildMenu('task', 'start', $params, $task, 'browse', '', '', 'iframe', true);
|
||||
if($task->status == 'pause') $menu .= $this->buildMenu('task', 'restart', $params, $task, 'browse', '', '', 'iframe', true);
|
||||
$menu .= $this->buildMenu('task', 'finish', $params, $task, 'browse', '', '', 'iframe', true);
|
||||
$menu .= $this->buildMenu('task', 'close', $params, $task, 'browse', '', '', 'iframe', true);
|
||||
if($task->status != 'pause') $menu .= $this->buildMenu('task', 'start', $params, $task, 'browse', '', '', 'iframe', true, 'data-toggle="modal"');
|
||||
if($task->status == 'pause') $menu .= $this->buildMenu('task', 'restart', $params, $task, 'browse', '', '', 'iframe', true, 'data-toggle="modal"');
|
||||
$menu .= $this->buildMenu('task', 'finish', $params, $task, 'browse', '', '', 'iframe', true, 'data-toggle="modal"');
|
||||
$menu .= $this->buildMenu('task', 'close', $params, $task, 'browse', '', '', 'iframe', true, 'data-toggle="modal"');
|
||||
|
||||
if(($canStart or $canRestart or $canFinish or $canClose) and ($canRecordEstimate or $canEdit or $canBatchCreate))
|
||||
{
|
||||
$menu .= "<div class='dividing-line'></div>";
|
||||
}
|
||||
|
||||
$menu .= $this->buildMenu('task', 'recordEstimate', $params, $task, 'browse', 'time', '', 'iframe', true);
|
||||
$menu .= $this->buildMenu('task', 'recordEstimate', $params, $task, 'browse', 'time', '', 'iframe', true, 'data-toggle="modal"');
|
||||
$menu .= $this->buildMenu('task', 'edit', $params, $task, 'browse');
|
||||
if($this->config->vision != 'lite')
|
||||
{
|
||||
@@ -4553,4 +4558,177 @@ class taskModel extends model
|
||||
if(!empty($deadline) and !helper::isZeroDate($deadline) and $deadline > $execution->end) dao::$errors['deadline'][] = $pre . sprintf($this->lang->task->error->endGtExecution, $this->lang->execution->common, $execution->end);
|
||||
if(!empty($deadline) and !helper::isZeroDate($deadline) and $deadline < $execution->begin) dao::$errors['deadline'][] = $pre . sprintf($this->lang->task->error->endLtExecution, $this->lang->execution->common, $execution->begin);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate col for dtable.
|
||||
*
|
||||
* @param string $orderBy
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function generateCol($orderBy = '')
|
||||
{
|
||||
$setting = $this->loadModel('datatable')->getSetting('execution');
|
||||
$fieldList = $this->config->task->datatable->fieldList;
|
||||
|
||||
foreach($fieldList as $field => $items)
|
||||
{
|
||||
if(isset($items['title'])) continue;
|
||||
|
||||
$title = $field == 'id' ? 'ID' : zget($this->lang->task, $field, zget($this->lang, $field, $field));
|
||||
$fieldList[$field]['title'] = $title;
|
||||
}
|
||||
|
||||
if(empty($setting))
|
||||
{
|
||||
$setting = $this->config->task->datatable->defaultField;
|
||||
$order = 1;
|
||||
foreach($setting as $key => $value)
|
||||
{
|
||||
$set = new stdclass();;
|
||||
$set->id = $value;
|
||||
$set->order = $order ++;
|
||||
$set->show = true;
|
||||
$setting[$key] = $set;
|
||||
}
|
||||
}
|
||||
|
||||
foreach($setting as $key => $set)
|
||||
{
|
||||
if(empty($set->show))
|
||||
{
|
||||
unset($setting[$key]);
|
||||
continue;
|
||||
}
|
||||
|
||||
$sortType = '';
|
||||
if(!strpos($orderBy, ',') && strpos($orderBy, $set->id) !== false)
|
||||
{
|
||||
$sort = str_replace("{$set->id}_", '', $orderBy);
|
||||
$sortType = $sort == 'asc' ? 'up' : 'down';
|
||||
}
|
||||
|
||||
$set->name = $set->id;
|
||||
$set->title = $fieldList[$set->id]['title'];
|
||||
|
||||
if(isset($fieldList[$set->id]['checkbox'])) $set->checkbox = $fieldList[$set->id]['checkbox'];
|
||||
if(isset($fieldList[$set->id]['nestedToggle'])) $set->nestedToggle = $fieldList[$set->id]['nestedToggle'];
|
||||
if(isset($fieldList[$set->id]['fixed'])) $set->fixed = $fieldList[$set->id]['fixed'];
|
||||
if(isset($fieldList[$set->id]['type'])) $set->type = $fieldList[$set->id]['type'];
|
||||
if(isset($fieldList[$set->id]['sortType'])) $set->sortType = $fieldList[$set->id]['sortType'];
|
||||
if(isset($fieldList[$set->id]['flex'])) $set->flex = $fieldList[$set->id]['flex'];
|
||||
if(isset($fieldList[$set->id]['minWidth'])) $set->minWidth = $fieldList[$set->id]['minWidth'];
|
||||
if(isset($fieldList[$set->id]['maxWidth'])) $set->maxWidth = $fieldList[$set->id]['maxWidth'];
|
||||
if(isset($fieldList[$set->id]['pri'])) $set->pri = $fieldList[$set->id]['pri'];
|
||||
if(isset($fieldList[$set->id]['map'])) $set->map = $fieldList[$set->id]['map'];
|
||||
|
||||
if($sortType) $set->sortType = $sortType;
|
||||
|
||||
if(isset($set->fixed) && $set->fixed == 'no') unset($set->fixed);
|
||||
if(isset($set->width)) $set->width = str_replace('px', '', $set->width);
|
||||
unset($set->id);
|
||||
}
|
||||
|
||||
usort($setting, array('datatableModel', 'sortCols'));
|
||||
return $setting;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate row for dtable.
|
||||
*
|
||||
* @param array $tasks
|
||||
* @param array $users
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function generateRow($tasks, $users)
|
||||
{
|
||||
$userFields = array('assignedTo', 'openedBy', 'closedBy', 'lastEditedBy', 'finishedBy');
|
||||
$dateFields = array('assignedDate', 'openedDate', 'deadline', 'finishedDate', 'closedDate', 'lastEditedDate', 'canceledDate', 'activatedDate', 'estStarted', 'realStarted', 'replacetypeDate');
|
||||
$canView = common::hasPriv('task', 'view');
|
||||
$rows = array();
|
||||
foreach($tasks as $task)
|
||||
{
|
||||
$task->assignedTo = $this->printAssignedHtml($task, $users, false);
|
||||
$task->actions = '<div class="c-actions">' . $this->buildOperateBrowseMenu($task) . '</div>';
|
||||
|
||||
$taskName = '';
|
||||
$taskLink = helper::createLink('task', 'view', "taskID=$task->id", '', $this->config->vision == 'lite' ? true : false);
|
||||
$linkClass = $this->config->vision == 'lite' ? 'class="iframe"' : '';
|
||||
|
||||
if($task->parent > 0 and isset($task->parentName)) $task->name = "{$task->parentName} / {$task->name}";
|
||||
if($task->module and isset($modulePairs[$task->module])) $taskName .= "<span class='label label-gray label-badge'>" . $modulePairs[$task->module] . '</span> ';
|
||||
if($task->parent > 0) $taskName .= '<span class="label label-badge label-light" title="' . $this->lang->task->children . '">' . $this->lang->task->childrenAB . '</span> ';
|
||||
if(!empty($task->team)) $taskName .= '<span class="label label-badge label-light" title="' . $this->lang->task->multiple . '">' . $this->lang->task->multipleAB . '</span> ';
|
||||
|
||||
$taskName .= $canView ? html::a($taskLink, $task->name, null, "$linkClass style='color: $task->color' title='$task->name'") : "<span style='color: $task->color'>$task->name</span>";
|
||||
if(!empty($task->children)) $taskName .= '<a class="task-toggle" data-id="' . $task->id . '"><i class="icon icon-angle-double-right"></i></a>';
|
||||
if($task->fromBug) $taskName .= html::a(helper::createLink('bug', 'view', "id=$task->fromBug"), "[BUG#$task->fromBug]", '', "class='bug'");
|
||||
$task->name = $taskName;
|
||||
|
||||
$priClass = $task->pri ? "label-pri label-pri-{$task->pri}" : '';
|
||||
$task->pri = "<span class='{$priClass}'>" . zget($this->lang->task->priList, $task->pri) . '</span>';
|
||||
|
||||
$task->statusCode = $task->status;
|
||||
$storyChanged = (!empty($task->storyStatus) && $task->storyStatus == 'active' && $task->latestStoryVersion > $task->storyVersion && !in_array($task->status, array('cancel', 'closed')));
|
||||
$task->status = $storyChanged ? "<span class='status-story status-changed' title='{$this->lang->story->changed}'>{$this->lang->story->changed}</span>" : "<span class='status-task status-{$task->status}' title='{$this->processStatus('task', $task)}'> " . $this->processStatus('task', $task) . "</span>";
|
||||
|
||||
$task->estimateNum = round($task->estimate, 1);
|
||||
$task->consumedNum = round($task->consumed, 1);
|
||||
$task->leftNum = round($task->left, 1);
|
||||
|
||||
$task->estimate = round($task->estimate, 1) . $this->lang->execution->workHourUnit;
|
||||
$task->consumed = round($task->consumed, 1) . $this->lang->execution->workHourUnit;
|
||||
$task->left = round($task->left, 1) . $this->lang->execution->workHourUnit;
|
||||
|
||||
$task->design = '';
|
||||
$task->story = '';
|
||||
if(!empty($task->storyID))
|
||||
{
|
||||
if(common::hasPriv('story', 'view'))
|
||||
{
|
||||
$task->story = html::a(helper::createLink('story', 'view', "storyid=$task->storyID", 'html', true), "<i class='icon icon-{$this->lang->icons['story']}'></i>", '', "class='iframe' data-width='1050' title='{$task->storyTitle}' data-toggle='modal' data-size='lg'");
|
||||
}
|
||||
else
|
||||
{
|
||||
$task->story = "<i class='icon icon-{$this->lang->icons['story']}' title='{$task->storyTitle}'></i>";
|
||||
}
|
||||
}
|
||||
|
||||
$mailto = explode(',', $task->mailto);
|
||||
foreach($mailto as $key => $account)
|
||||
{
|
||||
$account = trim($account);
|
||||
if(empty($account))
|
||||
{
|
||||
unset($mailto[$key]);
|
||||
continue;
|
||||
}
|
||||
|
||||
$mailto[$key] = zget($users, $account);
|
||||
}
|
||||
$task->mailto = implode(' ', $mailto);
|
||||
|
||||
foreach($userFields as $field) $task->$field = zget($users, $task->$field);
|
||||
foreach($dateFields as $field) $task->$field = empty($task->$field) || helper::isZeroDate($task->$field) ? '' : $task->$field;
|
||||
|
||||
$children = isset($task->children) ? $task->children : array();
|
||||
unset($task->children);
|
||||
|
||||
$task->isParent = false;
|
||||
if($task->parent == -1)
|
||||
{
|
||||
$task->isParent = true;
|
||||
$task->parent = 0;
|
||||
}
|
||||
|
||||
$rows[] = $task;
|
||||
|
||||
if(!empty($children))
|
||||
{
|
||||
$rows = array_merge($rows, $this->generateRow($children, $users));
|
||||
}
|
||||
}
|
||||
return $rows;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,8 +186,8 @@ $colspan = count($visibleFields) + 3;
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan='<?php echo $colspan?>' class='text-center form-actions'>
|
||||
<?php echo html::submitButton();?>
|
||||
<?php echo html::backButton();?>
|
||||
<?php echo html::submitButton(); ?>
|
||||
<?php echo html::backButton(); ?>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
@@ -344,4 +344,5 @@ $(function()
|
||||
</script>
|
||||
<?php endif;?>
|
||||
<?php include '../../common/view/pastetext.html.php';?>
|
||||
<?php include '../../ai/view/inputinject.html.php';?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -354,4 +354,5 @@ foreach(explode(',', $config->task->create->requiredFields) as $field)
|
||||
<script>
|
||||
$(function(){parent.$('body.hide-modal-close').removeClass('hide-modal-close');})
|
||||
</script>
|
||||
<?php include '../../ai/view/inputinject.html.php';?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -308,4 +308,5 @@ foreach(explode(',', $config->task->edit->requiredFields) as $field)
|
||||
</form>
|
||||
</div>
|
||||
<?php js::set('executionID', $execution->id);?>
|
||||
<?php include '../../ai/view/inputinject.html.php';?>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<?php include '../../common/view/kindeditor.html.php';?>
|
||||
<?php include '../../ai/view/promptmenu.html.php';?>
|
||||
<?php $browseLink = $app->session->taskList != false ? $app->session->taskList : $this->createLink('execution', 'browse', "executionID=$task->execution");?>
|
||||
<?php js::set('sysurl', common::getSysUrl());?>
|
||||
<?php if(strpos($_SERVER["QUERY_STRING"], 'isNotice=1') === false):?>
|
||||
|
||||
Reference in New Issue
Block a user