* Distinguish project execution from task module.

This commit is contained in:
holan20180123
2021-03-05 09:35:40 +08:00
parent 361af39093
commit a41e43311a
18 changed files with 430 additions and 431 deletions
+120 -121
View File
@@ -29,7 +29,7 @@ class task extends control
/**
* Create a task.
*
* @param int $projectID
* @param int $executionID
* @param int $storyID
* @param int $moduleID
* @param int $taskID
@@ -37,17 +37,17 @@ class task extends control
* @access public
* @return void
*/
public function create($projectID = 0, $storyID = 0, $moduleID = 0, $taskID = 0, $todoID = 0)
public function create($executionID = 0, $storyID = 0, $moduleID = 0, $taskID = 0, $todoID = 0)
{
$projects = $this->project->getExecutionPairs($this->session->project);
$projectID = $this->project->saveState($projectID, $projects);
$executions = $this->execution->getPairs($this->session->project);
$executionID = $this->execution->saveState($executionID, $executions);
$this->project->getLimitedExecution();
$limitedProjects = !empty($_SESSION['limitedProjects']) ? $_SESSION['limitedProjects'] : '';
if(strpos(",{$limitedProjects},", ",$projectID,") !== false)
$this->execution->getLimitedExecution();
$limitedExecutions = !empty($_SESSION['limitedExecutions']) ? $_SESSION['limitedExecutions'] : '';
if(strpos(",{$limitedExecutions},", ",$executionID,") !== false)
{
echo js::alert($this->lang->task->createDenied);
die(js::locate($this->createLink('project', 'task', "projectID=$projectID")));
die(js::locate($this->createLink('execution', 'task', "executionID=$executionID")));
}
$task = new stdClass();
@@ -65,8 +65,8 @@ class task extends control
$task->color = '';
if($taskID > 0)
{
$task = $this->task->getByID($taskID);
$projectID = $task->project;
$task = $this->task->getByID($taskID);
$executionID = $task->execution;
}
if($todoID > 0)
@@ -77,13 +77,12 @@ class task extends control
$task->desc = $todo->desc;
}
$project = $this->project->getById($projectID);
$taskLink = $this->createLink('project', 'browse', "projectID=$projectID&tab=task");
$storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('project', 'story', "projectID=$projectID");
$execution = $this->execution->getById($executionID);
$taskLink = $this->createLink('execution', 'browse', "executionID=$executionID&tab=task");
$storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('execution', 'story', "executionID=$executionID");
/* Set menu. */
$this->project->setMenu($projects, $project->id);
$this->execution->setMenu($executions, $execution->id);
if(!empty($_POST))
{
@@ -91,8 +90,8 @@ class task extends control
$response['message'] = $this->lang->saveSuccess;
setcookie('lastTaskModule', (int)$this->post->module, $this->config->cookieLife, $this->config->webRoot, '', false, false);
if($this->post->project) $projectID = (int)$this->post->project;
$tasksID = $this->task->create($projectID);
if($this->post->execution) $executionID = (int)$this->post->execution;
$tasksID = $this->task->create($executionID);
if(dao::isError())
{
$response['result'] = 'fail';
@@ -145,13 +144,13 @@ class task extends control
if($this->post->after == 'continueAdding')
{
$response['message'] = $this->lang->task->successSaved . $this->lang->task->afterChoices['continueAdding'];
$response['locate'] = $this->createLink('task', 'create', "projectID=$projectID&storyID={$this->post->story}&moduleID=$moduleID");
$response['locate'] = $this->createLink('task', 'create', "executionID=$executionID&storyID={$this->post->story}&moduleID=$moduleID");
$this->send($response);
}
elseif($this->post->after == 'toTaskList')
{
setcookie('moduleBrowseParam', 0, 0, $this->config->webRoot, '', false, false);
$taskLink = $this->createLink('project', 'task', "projectID=$projectID&status=unclosed&param=0&orderBy=id_desc");
$taskLink = $this->createLink('execution', 'task', "executionID=$executionID&status=unclosed&param=0&orderBy=id_desc");
$response['locate'] = $taskLink;
$this->send($response);
}
@@ -168,9 +167,9 @@ class task extends control
}
$users = $this->loadModel('user')->getPairs('noclosed|nodeleted');
$members = $this->project->getTeamMemberPairs($projectID, 'nodeleted');
$showAllModule = isset($this->config->project->task->allModule) ? $this->config->project->task->allModule : '';
$moduleOptionMenu = $this->tree->getTaskOptionMenu($projectID, 0, 0, $showAllModule ? 'allModule' : '');
$members = $this->execution->getTeamMemberPairs($executionID, 'nodeleted');
$showAllModule = isset($this->config->execution->task->allModule) ? $this->config->execution->task->allModule : '';
$moduleOptionMenu = $this->tree->getTaskOptionMenu($executionID, 0, 0, $showAllModule ? 'allModule' : '');
/* Fix bug #3381. When the story module is the root module. */
if($storyID)
@@ -189,16 +188,16 @@ class task extends control
$moduleID = $this->tree->getStoryModule($task->module);
$moduleIdList = $this->tree->getAllChildID($moduleID);
}
$stories = $this->story->getProjectStoryPairs($projectID, 0, 0, $moduleIdList, 'full', 'unclosed');
$stories = $this->story->getExecutionStoryPairs($executionID, 0, 0, $moduleIdList, 'full', 'unclosed');
$title = $project->name . $this->lang->colon . $this->lang->task->create;
$position[] = html::a($taskLink, $project->name);
$title = $execution->name . $this->lang->colon . $this->lang->task->create;
$position[] = html::a($taskLink, $execution->name);
$position[] = $this->lang->task->common;
$position[] = $this->lang->task->create;
/* Set Custom*/
foreach(explode(',', $this->config->task->customCreateFields) as $field) $customFields[$field] = $this->lang->task->$field;
if($project->type == 'ops') unset($customFields['story']);
if($execution->type == 'ops') unset($customFields['story']);
$this->view->customFields = $customFields;
$this->view->showFields = $this->config->task->custom->createFields;
@@ -206,12 +205,12 @@ class task extends control
$this->view->title = $title;
$this->view->position = $position;
$this->view->project = $project;
$this->view->projects = $this->config->systemMode == 'classic' ? $projects : $this->execution->getByProject($this->session->project, 'all', 0, true);
$this->view->execution = $execution;
$this->view->executions = $this->config->systemMode == 'classic' ? $executions : $this->execution->getByProject($this->session->project, 'all', 0, true);
$this->view->task = $task;
$this->view->users = $users;
$this->view->stories = $stories;
$this->view->testStoryIdList = $this->loadModel('story')->getTestStories(array_keys($stories), $project->id);
$this->view->testStoryIdList = $this->loadModel('story')->getTestStories(array_keys($stories), $execution->id);
$this->view->members = $members;
$this->view->moduleOptionMenu = $moduleOptionMenu;
$this->display();
@@ -220,7 +219,7 @@ class task extends control
/**
* Batch create task.
*
* @param int $projectID
* @param int $executionID
* @param int $storyID
* @param int $iframe
* @param int $taskID
@@ -228,14 +227,14 @@ class task extends control
* @access public
* @return void
*/
public function batchCreate($projectID = 0, $storyID = 0, $moduleID = 0, $taskID = 0, $iframe = 0)
public function batchCreate($executionID = 0, $storyID = 0, $moduleID = 0, $taskID = 0, $iframe = 0)
{
$this->project->getLimitedExecution();
$limitedProjects = !empty($_SESSION['limitedProjects']) ? $_SESSION['limitedProjects'] : '';
if(strpos(",{$limitedProjects},", ",$projectID,") !== false)
$this->execution->getLimitedExecution();
$limitedExecutions = !empty($_SESSION['limitedExecutions']) ? $_SESSION['limitedExecutions'] : '';
if(strpos(",{$limitedExecutions},", ",$executionID,") !== false)
{
echo js::alert($this->lang->task->createDenied);
die(js::locate($this->createLink('project', 'task', "projectID=$projectID")));
die(js::locate($this->createLink('execution', 'task', "executionID=$executionID")));
}
if($this->config->systemMode == 'new')
@@ -244,12 +243,12 @@ class task extends control
if($project->model == 'waterfall') $this->config->task->create->requiredFields .= ',estStarted,deadline';
}
$project = $this->project->getById($projectID);
$taskLink = $this->createLink('project', 'browse', "projectID=$projectID&tab=task");
$storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('project', 'story', "projectID=$projectID");
$execution = $this->execution->getById($executionID);
$taskLink = $this->createLink('execution', 'browse', "executionID=$executionID&tab=task");
$storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('execution', 'story', "executionID=$executionID");
/* Set menu. */
$this->project->setMenu($this->project->getExecutionPairs($this->session->project), $project->id);
$this->execution->setMenu($this->execution->getPairs($this->session->project), $execution->id);
/* When common task are child tasks, query whether common task are consumed. */
$taskConsumed = 0;
@@ -261,7 +260,7 @@ class task extends control
if(!empty($_POST))
{
$mails = $this->task->batchCreate($projectID);
$mails = $this->task->batchCreate($executionID);
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
/* Locate the browser. */
@@ -275,14 +274,14 @@ class task extends control
$this->view->showFields = $this->config->task->custom->batchCreateFields;
$stories = $this->story->getProjectStoryPairs($projectID, 0, 0, 0, 'short');
$members = $this->project->getTeamMemberPairs($projectID, 'nodeleted');
$stories = $this->story->getExecutionStoryPairs($executionID, 0, 0, 0, 'short');
$members = $this->execution->getTeamMemberPairs($executionID, 'nodeleted');
$showAllModule = isset($this->config->project->task->allModule) ? $this->config->project->task->allModule : '';
$modules = $this->loadModel('tree')->getTaskOptionMenu($projectID, 0, 0, $showAllModule ? 'allModule' : '');
$showAllModule = isset($this->config->execution->task->allModule) ? $this->config->execution->task->allModule : '';
$modules = $this->loadModel('tree')->getTaskOptionMenu($executionID, 0, 0, $showAllModule ? 'allModule' : '');
$title = $project->name . $this->lang->colon . $this->lang->task->batchCreate;
$position[] = html::a($taskLink, $project->name);
$title = $execution->name . $this->lang->colon . $this->lang->task->batchCreate;
$position[] = html::a($taskLink, $execution->name);
$position[] = $this->lang->task->common;
$position[] = $this->lang->task->batchCreate;
@@ -290,13 +289,13 @@ class task extends control
$this->view->title = $title;
$this->view->position = $position;
$this->view->project = $project;
$this->view->execution = $execution;
$this->view->stories = $stories;
$this->view->modules = $modules;
$this->view->parent = $taskID;
$this->view->storyID = $storyID;
$this->view->story = $this->story->getByID($storyID);
$this->view->storyTasks = $this->task->getStoryTaskCounts(array_keys($stories), $projectID);
$this->view->storyTasks = $this->task->getStoryTaskCounts(array_keys($stories), $executionID);
$this->view->members = $members;
$this->view->moduleID = $moduleID;
$this->view->taskConsumed = $taskConsumed;
@@ -312,14 +311,14 @@ class task extends control
*/
public function commonAction($taskID)
{
$this->view->task = $this->loadModel('task')->getByID($taskID);
$this->view->project = $this->project->getById($this->view->task->project);
$this->view->members = $this->project->getTeamMemberPairs($this->view->project->id ,'nodeleted');
$this->view->actions = $this->loadModel('action')->getList('task', $taskID);
$this->view->task = $this->loadModel('task')->getByID($taskID);
$this->view->execution = $this->execution->getById($this->view->task->execution);
$this->view->members = $this->execution->getTeamMemberPairs($this->view->execution->id ,'nodeleted');
$this->view->actions = $this->loadModel('action')->getList('task', $taskID);
/* Set menu. */
$this->project->setMenu($this->project->getExecutionPairs($this->session->project), $this->view->project->id);
$this->view->position[] = html::a($this->createLink('project', 'browse', "project={$this->view->task->project}"), $this->view->project->name);
$this->execution->setMenu($this->execution->getPairs($this->session->project), $this->view->execution->id);
$this->view->position[] = html::a($this->createLink('execution', 'browse', "execution={$this->view->task->execution}"), $this->view->execution->name);
}
/**
@@ -379,7 +378,7 @@ class task extends control
}
}
$tasks = $this->task->getParentTaskPairs($this->view->project->id, $this->view->task->parent);
$tasks = $this->task->getParentTaskPairs($this->view->execution->id, $this->view->task->parent);
if(isset($tasks[$taskID])) unset($tasks[$taskID]);
if(!isset($this->view->members[$this->view->task->assignedTo])) $this->view->members[$this->view->task->assignedTo] = $this->view->task->assignedTo;
@@ -388,12 +387,12 @@ class task extends control
$this->view->title = $this->lang->task->edit . 'TASK' . $this->lang->colon . $this->view->task->name;
$this->view->position[] = $this->lang->task->common;
$this->view->position[] = $this->lang->task->edit;
$this->view->stories = $this->story->getProjectStoryPairs($this->view->project->id);
$this->view->stories = $this->story->getExecutionStoryPairs($this->view->execution->id);
$this->view->tasks = $tasks;
$this->view->users = $this->loadModel('user')->getPairs('nodeleted', "{$this->view->task->openedBy},{$this->view->task->canceledBy},{$this->view->task->closedBy}");
$this->view->showAllModule = isset($this->config->project->task->allModule) ? $this->config->project->task->allModule : '';
$this->view->modules = $this->tree->getTaskOptionMenu($this->view->task->project, 0, 0, $this->view->showAllModule ? 'allModule' : '');
$this->view->projects = $this->config->systemMode == 'classic' ? $this->project->getExecutionPairs() : $this->execution->getByProject($this->session->project, 'all', 0, true);
$this->view->showAllModule = isset($this->config->execution->task->allModule) ? $this->config->execution->task->allModule : '';
$this->view->modules = $this->tree->getTaskOptionMenu($this->view->task->execution, 0, 0, $this->view->showAllModule ? 'allModule' : '');
$this->view->executions = $this->config->systemMode == 'classic' ? $this->execution->getPairs() : $this->execution->getByProject($this->session->project, 'all', 0, true);
$this->display();
}
@@ -445,16 +444,16 @@ class task extends control
/* The tasks of execution. */
if($executionID)
{
$execution = $this->project->getById($executionID);
$this->project->setMenu($this->project->getExecutionPairs($this->session->project), $execution->id);
$execution = $this->execution->getById($executionID);
$this->execution->setMenu($this->execution->getPairs($this->session->project), $execution->id);
/* Set modules and members. */
$showAllModule = isset($this->config->project->task->allModule) ? $this->config->project->task->allModule : '';
$showAllModule = isset($this->config->task->allModule) ? $this->config->task->allModule : '';
$modules = $this->tree->getTaskOptionMenu($executionID, 0, 0, $showAllModule ? 'allModule' : '');
$modules = array('ditto' => $this->lang->task->ditto) + $modules;
$this->view->title = $execution->name . $this->lang->colon . $this->lang->task->batchEdit;
$this->view->position[] = html::a($this->createLink('project', 'browse', "executionID=$execution->id"), $execution->name);
$this->view->position[] = html::a($this->createLink('execution', 'browse', "executionID=$execution->id"), $execution->name);
$this->view->execution = $execution;
$this->view->modules = $modules;
}
@@ -476,7 +475,7 @@ class task extends control
/* Get execution teams. */
$executionIDList = array();
foreach($tasks as $task) if(!in_array($task->project, $executionIDList)) $executionIDList[] = $task->project;
foreach($tasks as $task) if(!in_array($task->execution, $executionIDList)) $executionIDList[] = $task->execution;
$executionTeams = $this->dao->select('*')->from(TABLE_TEAM)->where('root')->in($executionIDList)->andWhere('type')->in('sprint,stage')->fetchGroup('root', 'account');
/* Judge whether the editedTasks is too large and set session. */
@@ -514,7 +513,7 @@ class task extends control
* @access public
* @return void
*/
public function assignTo($projectID, $taskID)
public function assignTo($executionID, $taskID)
{
$this->commonAction($taskID);
@@ -534,7 +533,7 @@ class task extends control
$task = $this->task->getByID($taskID);
$members = $this->project->getTeamMemberPairs($projectID, 'nodeleted');
$members = $this->execution->getTeamMemberPairs($executionID, 'nodeleted');
/* Compute next assignedTo. */
if(!empty($task->team))
@@ -546,7 +545,7 @@ class task extends control
if(!isset($members[$task->assignedTo])) $members[$task->assignedTo] = $task->assignedTo;
if(isset($members['closed']) or $task->status == 'closed') $members['closed'] = 'Closed';
$this->view->title = $this->view->project->name . $this->lang->colon . $this->lang->task->assign;
$this->view->title = $this->view->execution->name . $this->lang->colon . $this->lang->task->assign;
$this->view->position[] = $this->lang->task->assign;
$this->view->task = $task;
$this->view->members = $members;
@@ -584,11 +583,11 @@ class task extends control
/**
* Batch update assign of task.
*
* @param int $project
* @param int $execution
* @access public
* @return void
*/
public function batchAssignTo($project)
public function batchAssignTo($execution)
{
if(!empty($_POST))
{
@@ -596,7 +595,7 @@ class task extends control
$taskIDList = $this->post->taskIDList;
$taskIDList = array_unique($taskIDList);
unset($_POST['taskIDList']);
if(!is_array($taskIDList)) die(js::locate($this->createLink('project', 'task', "projectID=$project"), 'parent'));
if(!is_array($taskIDList)) die(js::locate($this->createLink('execution', 'task', "executionID=$execution"), 'parent'));
$taskIDList = array_unique($taskIDList);
$muletipleTasks = $this->dao->select('root , account')->from(TABLE_TEAM)->where('type')->eq('task')->andWhere('root')->in($taskIDList)->fetchGroup('root', 'account');
@@ -628,7 +627,7 @@ class task extends control
{
$task = $this->task->getById($taskID, true);
if(!$task) die(js::error($this->lang->notFound) . js::locate('back'));
$this->session->project = $task->PRJ;
$this->session->project = $task->project;
if($task->fromBug != 0)
{
@@ -655,19 +654,19 @@ class task extends control
if($task->assignedTo == $this->app->user->account) $this->loadModel('action')->read('task', $taskID);
/* Set menu. */
$project = $this->project->getById($task->project);
$this->project->setMenu($this->project->getExecutionPairs($this->session->project), $project->id);
$execution = $this->execution->getById($task->execution);
$this->execution->setMenu($this->execution->getPairs($this->session->project), $execution->id);
$this->executeHooks($taskID);
$title = "TASK#$task->id $task->name / $project->name";
$position[] = html::a($this->createLink('project', 'browse', "projectID=$task->project"), $project->name);
$title = "TASK#$task->id $task->name / $execution->name";
$position[] = html::a($this->createLink('execution', 'browse', "executionID=$task->execution"), $execution->name);
$position[] = $this->lang->task->common;
$position[] = $this->lang->task->view;
$this->view->title = $title;
$this->view->position = $position;
$this->view->project = $project;
$this->view->execution = $execution;
$this->view->task = $task;
$this->view->actions = $this->loadModel('action')->getList('task', $taskID);
$this->view->users = $this->loadModel('user')->getPairs('noletter');
@@ -742,11 +741,11 @@ class task extends control
die(js::locate($this->createLink('task', 'view', "taskID=$taskID"), 'parent'));
}
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->start;
$this->view->title = $this->view->execution->name . $this->lang->colon .$this->lang->task->start;
$this->view->position[] = $this->lang->task->start;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->members = $this->execution->getTeamMemberPairs($task->project, 'nodeleted');
$this->view->members = $this->execution->getTeamMemberPairs($task->execution, 'nodeleted');
$this->view->assignedTo = $task->assignedTo == '' ? $this->app->user->account : $task->assignedTo;
$this->display();
}
@@ -905,7 +904,7 @@ class task extends control
}
$task = $this->view->task;
$members = $this->execution->getTeamMemberPairs($task->project, 'nodeleted');
$members = $this->execution->getTeamMemberPairs($task->execution, 'nodeleted');
$task->nextBy = $task->openedBy;
$this->view->users = $members;
@@ -927,7 +926,7 @@ class task extends control
}
}
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->finish;
$this->view->title = $this->view->execution->name . $this->lang->colon .$this->lang->task->finish;
$this->view->position[] = $this->lang->task->finish;
$this->view->members = $members;
@@ -963,7 +962,7 @@ class task extends control
die(js::locate($this->createLink('task', 'view', "taskID=$taskID"), 'parent'));
}
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->pause;
$this->view->title = $this->view->execution->name . $this->lang->colon .$this->lang->task->pause;
$this->view->position[] = $this->lang->task->pause;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
@@ -1002,11 +1001,11 @@ class task extends control
die(js::locate($this->createLink('task', 'view', "taskID=$taskID"), 'parent'));
}
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->restart;
$this->view->title = $this->view->execution->name . $this->lang->colon .$this->lang->task->restart;
$this->view->position[] = $this->lang->task->restart;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->members = $this->execution->getTeamMemberPairs($task->project, 'nodeleted');
$this->view->members = $this->execution->getTeamMemberPairs($task->execution, 'nodeleted');
$this->view->assignedTo = $task->assignedTo == '' ? $this->app->user->account : $task->assignedTo;
$this->display();
}
@@ -1048,7 +1047,7 @@ class task extends control
}
}
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->finish;
$this->view->title = $this->view->execution->name . $this->lang->colon .$this->lang->task->finish;
$this->view->position[] = $this->lang->task->finish;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
@@ -1171,7 +1170,7 @@ class task extends control
die(js::locate($this->createLink('task', 'view', "taskID=$taskID"), 'parent'));
}
$this->view->title = $this->view->project->name . $this->lang->colon .$this->lang->task->cancel;
$this->view->title = $this->view->execution->name . $this->lang->colon .$this->lang->task->cancel;
$this->view->position[] = $this->lang->task->cancel;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
@@ -1208,7 +1207,7 @@ class task extends control
}
if(!isset($this->view->members[$this->view->task->finishedBy])) $this->view->members[$this->view->task->finishedBy] = $this->view->task->finishedBy;
$this->view->title = $this->view->project->name . $this->lang->colon . $this->lang->task->activate;
$this->view->title = $this->view->execution->name . $this->lang->colon . $this->lang->task->activate;
$this->view->position[] = $this->lang->task->activate;
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->display();
@@ -1217,20 +1216,20 @@ class task extends control
/**
* Delete a task.
*
* @param int $projectID
* @param int $executionID
* @param int $taskID
* @param string $confirm yes|no
* @access public
* @return void
*/
public function delete($projectID, $taskID, $confirm = 'no')
public function delete($executionID, $taskID, $confirm = 'no')
{
$task = $this->task->getById($taskID);
if($task->parent < 0) die(js::alert($this->lang->task->cannotDeleteParent));
if($confirm == 'no')
{
die(js::confirm($this->lang->task->confirmDelete, inlink('delete', "projectID=$projectID&taskID=$taskID&confirm=yes")));
die(js::confirm($this->lang->task->confirmDelete, inlink('delete', "executionID=$executionID&taskID=$taskID&confirm=yes")));
}
else
{
@@ -1271,16 +1270,16 @@ class task extends control
}
/**
* AJAX: return project tasks in html select.
* AJAX: return execution tasks in html select.
*
* @param int $projectID
* @param int $executionID
* @param int $taskID
* @access public
* @return string
*/
public function ajaxGetProjectTasks($projectID, $taskID = 0)
public function ajaxGetExecutionTasks($executionID, $taskID = 0)
{
$tasks = $this->task->getProjectTaskPairs((int)$projectID);
$tasks = $this->task->getExecutionTaskPairs((int)$executionID);
die(html::select('task', empty($tasks) ? array('' => '') : $tasks, $taskID, "class='form-control'"));
}
@@ -1300,12 +1299,12 @@ class task extends control
/**
* The report page.
*
* @param int $projectID
* @param int $executionID
* @param string $browseType
* @access public
* @return void
*/
public function report($projectID, $browseType = 'all', $chartType = 'default')
public function report($executionID, $browseType = 'all', $chartType = 'default')
{
$this->loadModel('report');
$this->view->charts = array();
@@ -1324,14 +1323,14 @@ class task extends control
}
}
$projects = $this->project->getExecutionPairs($this->session->project);
$executions = $this->execution->getPairs($this->session->project);
$this->project->setMenu($projects, $projectID);
$this->projects = $projects;
$this->view->title = $this->projects[$projectID] . $this->lang->colon . $this->lang->task->report->common;
$this->view->position[] = $this->projects[$projectID];
$this->execution->setMenu($executions, $executionID);
$this->executions = $executions;
$this->view->title = $this->executions[$executionID] . $this->lang->colon . $this->lang->task->report->common;
$this->view->position[] = $this->executions[$executionID];
$this->view->position[] = $this->lang->task->report->common;
$this->view->projectID = $projectID;
$this->view->executionID = $executionID;
$this->view->browseType = $browseType;
$this->view->chartType = $chartType;
$this->view->checkedCharts = $this->post->charts ? join(',', $this->post->charts) : '';
@@ -1342,16 +1341,16 @@ class task extends control
/**
* get data to export
*
* @param int $projectID
* @param int $executionID
* @param string $orderBy
* @access public
* @return void
*/
public function export($projectID, $orderBy, $type)
public function export($executionID, $orderBy, $type)
{
$project = $this->project->getById($projectID);
$execution = $this->execution->getById($executionID);
$allExportFields = $this->config->task->exportFields;
if($project->type == 'ops') $allExportFields = str_replace(' story,', '', $allExportFields);
if($execution->type == 'ops') $allExportFields = str_replace(' story,', '', $allExportFields);
if($_POST)
{
@@ -1400,9 +1399,9 @@ class task extends control
while($row = $stmt->fetch()) $tasks[$row->id] = $row;
}
/* Get users and projects. */
$users = $this->loadModel('user')->getPairs('noletter');
$projects = $this->execution->getPairs($this->session->project, 'all', 'all|nocode');
/* Get users and executions. */
$users = $this->loadModel('user')->getPairs('noletter');
$executions = $this->execution->getPairs($this->session->execution, 'all', 'all|nocode');
/* Get related objects id lists. */
$relatedStoryIdList = array();
@@ -1466,7 +1465,7 @@ class task extends control
if($type == 'group')
{
$stories = $this->loadModel('story')->getProjectStories($projectID);
$stories = $this->loadModel('story')->getExecutionStories($executionID);
$groupTasks = array();
foreach($tasks as $task)
{
@@ -1525,7 +1524,7 @@ class task extends control
/* fill some field with useful value. */
$task->story = isset($relatedStories[$task->story]) ? $relatedStories[$task->story] . "(#$task->story)" : '';
if(isset($projects[$task->project])) $task->project = $projects[$task->project] . "(#$task->project)";
if(isset($executions[$task->execution])) $task->execution = $executions[$task->execution] . "(#$task->execution)";
if(isset($taskLang->typeList[$task->type])) $task->type = $taskLang->typeList[$task->type];
if(isset($taskLang->priList[$task->pri])) $task->pri = $taskLang->priList[$task->pri];
if(isset($taskLang->statusList[$task->status])) $task->status = $this->processStatus('task', $task);
@@ -1548,9 +1547,9 @@ class task extends control
$task->canceledDate = substr($task->canceledDate, 0, 10);
$task->closedDate = substr($task->closedDate, 0, 10);
$task->lastEditedDate = substr($task->lastEditedDate, 0, 10);
$task->estimate = $task->estimate . $this->lang->project->workHourUnit;
$task->consumed = $task->consumed . $this->lang->project->workHourUnit;
$task->left = $task->left . $this->lang->project->workHourUnit;
$task->estimate = $task->estimate . $this->lang->execution->workHourUnit;
$task->consumed = $task->consumed . $this->lang->execution->workHourUnit;
$task->left = $task->left . $this->lang->execution->workHourUnit;
/* Set related files. */
$task->files = '';
@@ -1571,24 +1570,24 @@ class task extends control
$this->fetch('file', 'export2' . $this->post->fileType, $_POST);
}
$this->app->loadLang('project');
$fileName = $this->lang->task->common;
$projectName = $this->dao->findById($projectID)->from(TABLE_PROJECT)->fetch('name');
if(isset($this->lang->project->featureBar['task'][$type]))
$this->app->loadLang('execution');
$fileName = $this->lang->task->common;
$executionName = $this->dao->findById($executionID)->from(TABLE_PROJECT)->fetch('name');
if(isset($this->lang->execution->featureBar['task'][$type]))
{
$browseType = $this->lang->project->featureBar['task'][$type];
$browseType = $this->lang->execution->featureBar['task'][$type];
}
else
{
$browseType = isset($this->lang->project->statusSelects[$type]) ? $this->lang->project->statusSelects[$type] : '';
$browseType = isset($this->lang->execution->statusSelects[$type]) ? $this->lang->execution->statusSelects[$type] : '';
}
$this->view->fileName = $projectName . $this->lang->dash . $browseType . $fileName;
$this->view->fileName = $executionName . $this->lang->dash . $browseType . $fileName;
$this->view->allExportFields = $allExportFields;
$this->view->customExport = true;
$this->view->orderBy = $orderBy;
$this->view->type = $type;
$this->view->projectID = $projectID;
$this->view->executionID = $executionID;
$this->display();
}
+2 -2
View File
@@ -7,9 +7,9 @@ $(function()
});
/* Get select of stories.*/
function setStories(moduleID, projectID, num)
function setStories(moduleID, executionID, num)
{
link = createLink('story', 'ajaxGetProjectStories', 'projectID=' + projectID + '&productID=0&branch=0&moduleID=' + moduleID + '&storyID=0&num=' + num + '&type=short');
link = createLink('story', 'ajaxGetExecutionStories', 'executionID=' + executionID + '&productID=0&branch=0&moduleID=' + moduleID + '&storyID=0&num=' + num + '&type=short');
$.get(link, function(stories)
{
var storyID = $('#story' + num).val();
+27 -27
View File
@@ -1,27 +1,27 @@
/**
* Load module, stories and members.
*
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
function loadAll(projectID)
function loadAll(executionID)
{
loadModuleMenu(projectID);
loadProjectStories(projectID);
loadProjectMembers(projectID);
loadModuleMenu(executionID);
loadExecutionStories(executionID);
loadExecutionMembers(executionID);
}
/**
* Load team members of the project.
* Load team members of the execution.
*
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
function loadProjectMembers(projectID)
function loadExecutionMembers(executionID)
{
$.get(createLink('project', 'ajaxGetMembers', 'projectID=' + projectID + '&assignedTo=' + $('#assignedTo').val()), function(data)
$.get(createLink('execution', 'ajaxGetMembers', 'executionID=' + executionID + '&assignedTo=' + $('#assignedTo').val()), function(data)
{
$('#assignedTo_chosen').remove();
$('#assignedTo').next('.picker').remove();
@@ -39,15 +39,15 @@ function loadProjectMembers(projectID)
}
/**
* Load stories of the project.
* Load stories of the execution.
*
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
function loadProjectStories(projectID)
function loadExecutionStories(executionID)
{
$.get(createLink('story', 'ajaxGetProjectStories', 'projectID=' + projectID + '&productID=0&branch=0&moduleID=0&storyID=' + $('#story').val()), function(data)
$.get(createLink('story', 'ajaxGetExecutionStories', 'executionID=' + executionID + '&productID=0&branch=0&moduleID=0&storyID=' + $('#story').val()), function(data)
{
$('#story_chosen').remove();
$('#story').next('.picker').remove();
@@ -57,15 +57,15 @@ function loadProjectStories(projectID)
}
/**
* Load module of the project.
* Load module of the execution.
*
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
function loadModuleMenu(projectID)
function loadModuleMenu(executionID)
{
var link = createLink('tree', 'ajaxGetOptionMenu', 'rootID=' + projectID + '&viewtype=task');
var link = createLink('tree', 'ajaxGetOptionMenu', 'rootID=' + executionID + '&viewtype=task');
$('#moduleIdBox').load(link, function(){$('#module').chosen();});
}
@@ -195,14 +195,14 @@ function setAfter()
/**
* Load stories.
*
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
function loadStories(projectID)
function loadStories(executionID)
{
moduleID = $('#module').val();
setStories(moduleID, projectID);
setStories(moduleID, executionID);
}
/**
@@ -213,15 +213,15 @@ function loadStories(projectID)
*/
function loadModuleRelated()
{
moduleID = $('#module').val();
projectID = $('#project').val();
setStories(moduleID, projectID);
moduleID = $('#module').val();
executionID = $('#execution').val();
setStories(moduleID, executionID);
}
/* Get select of stories.*/
function setStories(moduleID, projectID)
function setStories(moduleID, executionID)
{
link = createLink('story', 'ajaxGetProjectStories', 'projectID=' + projectID + '&productID=0&branch=0&moduleID=' + moduleID);
link = createLink('story', 'ajaxGetExecutionStories', 'executionID=' + executionID + '&productID=0&branch=0&moduleID=' + moduleID);
$.get(link, function(stories)
{
var storyID = $('#story').val();
@@ -428,9 +428,9 @@ $(document).ready(function()
{
var moduleID = $('#moduleIdBox #module').val();
var extra = $(this).prop('checked') ? 'allModule' : '';
$('#moduleIdBox').load(createLink('tree', 'ajaxGetOptionMenu', "rootID=" + projectID + '&viewType=task&branch=0&rootModuleID=0&returnType=html&fieldID=&needManage=0&extra=' + extra), function()
$('#moduleIdBox').load(createLink('tree', 'ajaxGetOptionMenu', "rootID=" + executionID + '&viewType=task&branch=0&rootModuleID=0&returnType=html&fieldID=&needManage=0&extra=' + extra), function()
{
$('#moduleIdBox #module').val(moduleID).attr('onchange', "setStories(this.value, " + projectID + ")").chosen();
$('#moduleIdBox #module').val(moduleID).attr('onchange', "setStories(this.value, " + executionID + ")").chosen();
});
});
});
+34 -34
View File
@@ -1,86 +1,86 @@
$(function()
$(function()
{
$('.record-estimate-toggle').modalTrigger({width:900, type:'iframe', afterHide: function(){parent.location.href=parent.location.href;}});
})
/**
* Load module, stories and members.
*
* @param int $projectID
* Load module, stories and members.
*
* @param int $executionID
* @access public
* @return void
*/
function loadAll(projectID)
function loadAll(executionID)
{
if(!changeProjectConfirmed)
if(!changeExecutionConfirmed)
{
firstChoice = confirm(confirmChangeProject);
changeProjectConfirmed = true; // Only notice the user one time.
firstChoice = confirm(confirmChangeExecution);
changeExecutionConfirmed = true; // Only notice the user one time.
}
if(changeProjectConfirmed && firstChoice)
if(changeExecutionConfirmed && firstChoice)
{
loadModuleMenu(projectID);
loadProjectStories(projectID);
loadProjectMembers(projectID);
loadModuleMenu(executionID);
loadExecutionStories(executionID);
loadExecutionMembers(executionID);
}
else
{
$('#project').val(oldProjectID);
$("#project").trigger("chosen:updated");
$('#execution').val(oldExecutionID);
$("#execution").trigger("chosen:updated");
}
}
/**
* Load module of the project.
*
* @param int $projectID
* Load module of the execution.
*
* @param int $executionID
* @access public
* @return void
*/
function loadModuleMenu(projectID)
function loadModuleMenu(executionID)
{
var link = createLink('tree', 'ajaxGetOptionMenu', 'rootID=' + projectID + '&viewtype=task');
var link = createLink('tree', 'ajaxGetOptionMenu', 'rootID=' + executionID + '&viewtype=task');
$('#moduleIdBox').load(link, function(){$('#module').chosen();});
}
/**
* Load stories of the project.
*
* @param int $projectID
* Load stories of the execution.
*
* @param int $executionID
* @access public
* @return void
*/
function loadProjectStories(projectID, moduleID)
function loadExecutionStories(executionID, moduleID)
{
if(typeof(moduleID) == 'undefined') moduleID = 0;
var link = createLink('story', 'ajaxGetProjectStories', 'projectID=' + projectID + '&productID=0&branch=0&moduleID=' + moduleID + '&storyID=' + oldStoryID);
var link = createLink('story', 'ajaxGetExecutionStories', 'executionID=' + executionID + '&productID=0&branch=0&moduleID=' + moduleID + '&storyID=' + oldStoryID);
$('#storyIdBox').load(link, function(){$('#story').chosen();});
}
/**
* Load team members of the project.
*
* @param int $projectID
* Load team members of the execution.
*
* @param int $executionID
* @access public
* @return void
*/
function loadProjectMembers(projectID)
function loadExecutionMembers(executionID)
{
var link = createLink('project', 'ajaxGetMembers', 'projectID=' + projectID + '&assignedTo=' + oldAssignedTo);
var link = createLink('execution', 'ajaxGetMembers', 'executionID=' + executionID + '&assignedTo=' + oldAssignedTo);
$('#assignedToIdBox').load(link, function(){$('#assignedToIdBox').find('select').chosen()});
}
/**
* Load module related
*
*
* @access public
* @return void
*/
function loadModuleRelated()
{
moduleID = $('#module').val();
projectID = $('#project').val();
loadProjectStories(projectID, moduleID)
moduleID = $('#module').val();
executionID = $('#execution').val();
loadExecutionStories(executionID, moduleID)
}
/* empty function. */
@@ -148,7 +148,7 @@ $(document).ready(function()
{
var moduleID = $('#moduleIdBox #module').val();
var extra = $(this).prop('checked') ? 'allModule' : '';
$('#moduleIdBox').load(createLink('tree', 'ajaxGetOptionMenu', "rootID=" + projectID + '&viewType=task&branch=0&rootModuleID=0&returnType=html&fieldID=&needManage=0&extra=' + extra), function()
$('#moduleIdBox').load(createLink('tree', 'ajaxGetOptionMenu', "rootID=" + executionID + '&viewType=task&branch=0&rootModuleID=0&returnType=html&fieldID=&needManage=0&extra=' + extra), function()
{
$('#moduleIdBox #module').val(moduleID).attr('onchange', "loadModuleRelated()").chosen();
});
+1 -1
View File
@@ -14,6 +14,6 @@ $(function()
function changeChartType(type)
{
$('form').attr('action', createLink('task', 'report', 'projectID=' + projectID + '&browseType=' + browseType + '&chartType=' + type));
$('form').attr('action', createLink('task', 'report', 'executionID=' + executionID + '&browseType=' + browseType + '&chartType=' + type));
$('form').find('#submit').click();
}
+25 -25
View File
@@ -180,26 +180,26 @@ $lang->task->legendEffort = 'Aufwand';
$lang->task->legendLife = 'Aufgabenentwicklung';
$lang->task->legendDesc = 'Aufgabenbeschreibung';
$lang->task->confirmDelete = "Möchten Sie diese Aufgabe löschen?";
$lang->task->confirmDeleteEstimate = "Möchten Sie das löschen?";
$lang->task->copyStoryTitle = "Story kopieren";
$lang->task->afterSubmit = "Nach der Erstellung,";
$lang->task->successSaved = "Erstellt!";
$lang->task->delayWarning = " <strong class='text-danger'> Verzögerung %s Tage </strong>";
$lang->task->remindBug = "Diese Aufgabe wurde aus einem Bus erzeugt. Möchten Sie den Bug aktualisieren:%s?";
$lang->task->confirmChangeProject = "Wenn Sie {$lang->executionCommon} ändern, das verwendete Modul, Story and Assignor will be changed. Do you want to do it?";
$lang->task->confirmFinish = '"Reststunden " sind 0. Möchten Sue den Status auf Erledigt setzen?';
$lang->task->confirmRecord = '"Reststunden " sind 0. Möchten Sie den Task auf Erledigt setzen?';
$lang->task->confirmTransfer = '"Reststunden " sind 0. Möchten Sie den Task transferieren?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Es wurde keine Story verknüpft. Sie können %s für dieses Projekt, anschließend %s.";
$lang->task->noticeSaveRecord = 'Ihre Stunden wurden nicht gespeichrt. Bitte erst speichern.';
$lang->task->commentActions = '%s. %s, kommentiert von <strong>%s</strong>.';
$lang->task->deniedNotice = 'Nur %s kann die Aufgabe %s.';
$lang->task->noTask = 'Keine Aufagben. ';
$lang->task->createDenied = 'Aufgben erstellen it in diesem Projekt gesperrt';
$lang->task->cannotDeleteParent = 'Cannot delete parent task';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->confirmDelete = "Möchten Sie diese Aufgabe löschen?";
$lang->task->confirmDeleteEstimate = "Möchten Sie das löschen?";
$lang->task->copyStoryTitle = "Story kopieren";
$lang->task->afterSubmit = "Nach der Erstellung,";
$lang->task->successSaved = "Erstellt!";
$lang->task->delayWarning = " <strong class='text-danger'> Verzögerung %s Tage </strong>";
$lang->task->remindBug = "Diese Aufgabe wurde aus einem Bus erzeugt. Möchten Sie den Bug aktualisieren:%s?";
$lang->task->confirmChangeExecution = "Wenn Sie {$lang->executionCommon} ändern, das verwendete Modul, Story and Assignor will be changed. Do you want to do it?";
$lang->task->confirmFinish = '"Reststunden " sind 0. Möchten Sue den Status auf Erledigt setzen?';
$lang->task->confirmRecord = '"Reststunden " sind 0. Möchten Sie den Task auf Erledigt setzen?';
$lang->task->confirmTransfer = '"Reststunden " sind 0. Möchten Sie den Task transferieren?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Es wurde keine Story verknüpft. Sie können %s für dieses Projekt, anschließend %s.";
$lang->task->noticeSaveRecord = 'Ihre Stunden wurden nicht gespeichrt. Bitte erst speichern.';
$lang->task->commentActions = '%s. %s, kommentiert von <strong>%s</strong>.';
$lang->task->deniedNotice = 'Nur %s kann die Aufgabe %s.';
$lang->task->noTask = 'Keine Aufagben. ';
$lang->task->createDenied = 'Aufgben erstellen it in diesem Projekt gesperrt';
$lang->task->cannotDeleteParent = 'Cannot delete parent task';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
@@ -229,7 +229,7 @@ $lang->task->report->select = 'Gruppieren nach';
$lang->task->report->create = 'Erstellen';
$lang->task->report->value = 'Task Anzahl';
$lang->task->report->charts['tasksPerProject'] = '' . $lang->executionCommon;
$lang->task->report->charts['tasksPerExecution'] = '' . $lang->executionCommon;
$lang->task->report->charts['tasksPerModule'] = 'Modul';
$lang->task->report->charts['tasksPerAssignedTo'] = 'Zustängikeit';
$lang->task->report->charts['tasksPerType'] = 'Kategorie';
@@ -249,7 +249,7 @@ $lang->task->report->options->type = 'pie';
$lang->task->report->options->width = 500;
$lang->task->report->options->height = 140;
$lang->task->report->tasksPerProject = new stdclass();
$lang->task->report->tasksPerExecution = new stdclass();
$lang->task->report->tasksPerModule = new stdclass();
$lang->task->report->tasksPerAssignedTo = new stdclass();
$lang->task->report->tasksPerType = new stdclass();
@@ -263,7 +263,7 @@ $lang->task->report->tasksPerFinishedBy = new stdclass();
$lang->task->report->tasksPerClosedReason = new stdclass();
$lang->task->report->finishedTasksPerDay = new stdclass();
$lang->task->report->tasksPerProject->item = $lang->executionCommon;
$lang->task->report->tasksPerExecution->item = $lang->executionCommon;
$lang->task->report->tasksPerModule->item = 'Modul';
$lang->task->report->tasksPerAssignedTo->item = 'Konto';
$lang->task->report->tasksPerType->item = 'Typ';
@@ -277,7 +277,7 @@ $lang->task->report->tasksPerFinishedBy->item = 'Benutzer';
$lang->task->report->tasksPerClosedReason->item = 'Grund';
$lang->task->report->finishedTasksPerDay->item = 'Datum';
$lang->task->report->tasksPerProject->graph = new stdclass();
$lang->task->report->tasksPerExecution->graph = new stdclass();
$lang->task->report->tasksPerModule->graph = new stdclass();
$lang->task->report->tasksPerAssignedTo->graph = new stdclass();
$lang->task->report->tasksPerType->graph = new stdclass();
@@ -291,7 +291,7 @@ $lang->task->report->tasksPerFinishedBy->graph = new stdclass();
$lang->task->report->tasksPerClosedReason->graph = new stdclass();
$lang->task->report->finishedTasksPerDay->graph = new stdclass();
$lang->task->report->tasksPerProject->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerExecution->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerModule->graph->xAxisName = 'Modul';
$lang->task->report->tasksPerAssignedTo->graph->xAxisName = 'Benutzer';
$lang->task->report->tasksPerType->graph->xAxisName = 'Typ';
+25 -25
View File
@@ -180,26 +180,26 @@ $lang->task->legendEffort = 'Effort';
$lang->task->legendLife = 'Task Life';
$lang->task->legendDesc = 'Task Description';
$lang->task->confirmDelete = "Do you want to delete this task?";
$lang->task->confirmDeleteEstimate = "Do you want to delete it?";
$lang->task->copyStoryTitle = "Copy Story";
$lang->task->afterSubmit = "Next ";
$lang->task->successSaved = "Created!";
$lang->task->delayWarning = " <strong class='text-danger'> Delay %s days </strong>";
$lang->task->remindBug = "This task is converted from a bug. Do you want to update the Bug:%s?";
$lang->task->confirmChangeProject = "If you change {$lang->executionCommon}, Module, Story and AssignedTo will also be changed. Do you want to change it?";
$lang->task->confirmFinish = '"Left Hour" is 0. Do you want to change the status to "Finished"?';
$lang->task->confirmRecord = '"Left Hour" is 0. Do you want to set the task as "Finished"?';
$lang->task->confirmTransfer = '"Left Hour" is 0,Do you want to transfer task?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "No story has been linked. You can %s for this project, then %s.";
$lang->task->noticeSaveRecord = 'Your Hour is not saved. Please save it first.';
$lang->task->commentActions = '%s. %s, commented by <strong>%s</strong>.';
$lang->task->deniedNotice = 'Only the %s can %s the task.';
$lang->task->noTask = 'No tasks yet. ';
$lang->task->createDenied = 'Create Task is denied in this project';
$lang->task->cannotDeleteParent = 'Cannot delete parent task';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->confirmDelete = "Do you want to delete this task?";
$lang->task->confirmDeleteEstimate = "Do you want to delete it?";
$lang->task->copyStoryTitle = "Copy Story";
$lang->task->afterSubmit = "Next ";
$lang->task->successSaved = "Created!";
$lang->task->delayWarning = " <strong class='text-danger'> Delay %s days </strong>";
$lang->task->remindBug = "This task is converted from a bug. Do you want to update the Bug:%s?";
$lang->task->confirmChangeExecution = "If you change {$lang->executionCommon}, Module, Story and AssignedTo will also be changed. Do you want to change it?";
$lang->task->confirmFinish = '"Left Hour" is 0. Do you want to change the status to "Finished"?';
$lang->task->confirmRecord = '"Left Hour" is 0. Do you want to set the task as "Finished"?';
$lang->task->confirmTransfer = '"Left Hour" is 0,Do you want to transfer task?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "No story has been linked. You can %s for this project, then %s.";
$lang->task->noticeSaveRecord = 'Your Hour is not saved. Please save it first.';
$lang->task->commentActions = '%s. %s, commented by <strong>%s</strong>.';
$lang->task->deniedNotice = 'Only the %s can %s the task.';
$lang->task->noTask = 'No tasks yet. ';
$lang->task->createDenied = 'Create Task is denied in this project';
$lang->task->cannotDeleteParent = 'Cannot delete parent task';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
@@ -229,7 +229,7 @@ $lang->task->report->select = 'Select Report Type';
$lang->task->report->create = 'Create Report';
$lang->task->report->value = 'Tasks';
$lang->task->report->charts['tasksPerProject'] = 'Group by ' . $lang->executionCommon . 'Task';
$lang->task->report->charts['tasksPerExecution'] = 'Group by ' . $lang->executionCommon . 'Task';
$lang->task->report->charts['tasksPerModule'] = 'Group by Module Task';
$lang->task->report->charts['tasksPerAssignedTo'] = 'Group by AssignedTo';
$lang->task->report->charts['tasksPerType'] = 'Group by Task Type';
@@ -249,7 +249,7 @@ $lang->task->report->options->type = 'pie';
$lang->task->report->options->width = 500;
$lang->task->report->options->height = 140;
$lang->task->report->tasksPerProject = new stdclass();
$lang->task->report->tasksPerExecution = new stdclass();
$lang->task->report->tasksPerModule = new stdclass();
$lang->task->report->tasksPerAssignedTo = new stdclass();
$lang->task->report->tasksPerType = new stdclass();
@@ -263,7 +263,7 @@ $lang->task->report->tasksPerFinishedBy = new stdclass();
$lang->task->report->tasksPerClosedReason = new stdclass();
$lang->task->report->finishedTasksPerDay = new stdclass();
$lang->task->report->tasksPerProject->item = $lang->executionCommon;
$lang->task->report->tasksPerExecution->item = $lang->executionCommon;
$lang->task->report->tasksPerModule->item = 'Module';
$lang->task->report->tasksPerAssignedTo->item = 'AssignedTo';
$lang->task->report->tasksPerType->item = 'Type';
@@ -277,7 +277,7 @@ $lang->task->report->tasksPerFinishedBy->item = 'FinishedBy';
$lang->task->report->tasksPerClosedReason->item = 'Reason';
$lang->task->report->finishedTasksPerDay->item = 'Date';
$lang->task->report->tasksPerProject->graph = new stdclass();
$lang->task->report->tasksPerExecution->graph = new stdclass();
$lang->task->report->tasksPerModule->graph = new stdclass();
$lang->task->report->tasksPerAssignedTo->graph = new stdclass();
$lang->task->report->tasksPerType->graph = new stdclass();
@@ -291,7 +291,7 @@ $lang->task->report->tasksPerFinishedBy->graph = new stdclass();
$lang->task->report->tasksPerClosedReason->graph = new stdclass();
$lang->task->report->finishedTasksPerDay->graph = new stdclass();
$lang->task->report->tasksPerProject->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerExecution->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerModule->graph->xAxisName = 'Module';
$lang->task->report->tasksPerAssignedTo->graph->xAxisName = 'User';
$lang->task->report->tasksPerType->graph->xAxisName = 'Type';
+25 -25
View File
@@ -180,26 +180,26 @@ $lang->task->legendEffort = 'Effort';
$lang->task->legendLife = 'Vie de la Tâche';
$lang->task->legendDesc = 'Description Tâche';
$lang->task->confirmDelete = "Voulez-vous réellement supprimer cette tâche ?";
$lang->task->confirmDeleteEstimate = "Voulez-vous la supprimer ?";
$lang->task->copyStoryTitle = '<span style="color:blue;">StoryModel</span>';
$lang->task->afterSubmit = "Suiv. ";
$lang->task->successSaved = "Créée !";
$lang->task->delayWarning = " <strong class='text-danger'> Retard %s jours </strong>";
$lang->task->remindBug = "Cette tâche a été convertie depuis un bug. Voulez-vous mettre à jour le Bug : %s ?";
$lang->task->confirmChangeProject = "Si vous changez {$lang->executionCommon}, Module, Story et AssignedTo seront également changés. Voulez-vous le faire ?";
$lang->task->confirmFinish = '"Heures Restantes" à 0. Voulez-vous passer le statut à "Terminée" ?';
$lang->task->confirmRecord = '"Heures Restantes" à 0. Voulez-vous passer le statut de la tâche à "Finie" ?';
$lang->task->confirmTransfer = '"Heures Restantes" à 0. Voulez-vous transférer la tâche ?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Aucune Story n'est associée. Vous pouvez %s pour ce projet, alors %s.";
$lang->task->noticeSaveRecord = "Votre temps n'a pas été sauvé. Enregistrez-le d'abord.";
$lang->task->commentActions = '%s. %s, commenté par <strong>%s</strong>.';
$lang->task->deniedNotice = 'Seulement le %s peut %s la tâche.';
$lang->task->noTask = "Pas de tâche pour l'instant. ";
$lang->task->createDenied = 'La création de tâches est interdite dans ce projet';
$lang->task->cannotDeleteParent = 'Impossible de supprimer la tâche parente';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->confirmDelete = "Voulez-vous réellement supprimer cette tâche ?";
$lang->task->confirmDeleteEstimate = "Voulez-vous la supprimer ?";
$lang->task->copyStoryTitle = '<span style="color:blue;">StoryModel</span>';
$lang->task->afterSubmit = "Suiv. ";
$lang->task->successSaved = "Créée !";
$lang->task->delayWarning = " <strong class='text-danger'> Retard %s jours </strong>";
$lang->task->remindBug = "Cette tâche a été convertie depuis un bug. Voulez-vous mettre à jour le Bug : %s ?";
$lang->task->confirmChangeExecution = "Si vous changez {$lang->executionCommon}, Module, Story et AssignedTo seront également changés. Voulez-vous le faire ?";
$lang->task->confirmFinish = '"Heures Restantes" à 0. Voulez-vous passer le statut à "Terminée" ?';
$lang->task->confirmRecord = '"Heures Restantes" à 0. Voulez-vous passer le statut de la tâche à "Finie" ?';
$lang->task->confirmTransfer = '"Heures Restantes" à 0. Voulez-vous transférer la tâche ?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Aucune Story n'est associée. Vous pouvez %s pour ce projet, alors %s.";
$lang->task->noticeSaveRecord = "Votre temps n'a pas été sauvé. Enregistrez-le d'abord.";
$lang->task->commentActions = '%s. %s, commenté par <strong>%s</strong>.';
$lang->task->deniedNotice = 'Seulement le %s peut %s la tâche.';
$lang->task->noTask = "Pas de tâche pour l'instant. ";
$lang->task->createDenied = 'La création de tâches est interdite dans ce projet';
$lang->task->cannotDeleteParent = 'Impossible de supprimer la tâche parente';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"Coût Total" doit être numérique.';
@@ -229,7 +229,7 @@ $lang->task->report->select = 'Choix Type de Rapport';
$lang->task->report->create = 'Créer Rapport';
$lang->task->report->value = 'Tâches';
$lang->task->report->charts['tasksPerProject'] = 'Regroupé par ' . $lang->executionCommon . ' Tâche';
$lang->task->report->charts['tasksPerExecution'] = 'Regroupé par ' . $lang->executionCommon . ' Tâche';
$lang->task->report->charts['tasksPerModule'] = 'Regroupé par Module';
$lang->task->report->charts['tasksPerAssignedTo'] = 'Regroupé par Assignation';
$lang->task->report->charts['tasksPerType'] = 'Regroupé par Type de Tâche';
@@ -249,7 +249,7 @@ $lang->task->report->options->type = 'pie';
$lang->task->report->options->width = 500;
$lang->task->report->options->height = 140;
$lang->task->report->tasksPerProject = new stdclass();
$lang->task->report->tasksPerExecution = new stdclass();
$lang->task->report->tasksPerModule = new stdclass();
$lang->task->report->tasksPerAssignedTo = new stdclass();
$lang->task->report->tasksPerType = new stdclass();
@@ -263,7 +263,7 @@ $lang->task->report->tasksPerFinishedBy = new stdclass();
$lang->task->report->tasksPerClosedReason = new stdclass();
$lang->task->report->finishedTasksPerDay = new stdclass();
$lang->task->report->tasksPerProject->item = $lang->executionCommon;
$lang->task->report->tasksPerExecution->item = $lang->executionCommon;
$lang->task->report->tasksPerModule->item = 'Module';
$lang->task->report->tasksPerAssignedTo->item = 'Détenteur';
$lang->task->report->tasksPerType->item = 'Type';
@@ -277,7 +277,7 @@ $lang->task->report->tasksPerFinishedBy->item = 'Finisseur';
$lang->task->report->tasksPerClosedReason->item = 'Raison';
$lang->task->report->finishedTasksPerDay->item = 'Date';
$lang->task->report->tasksPerProject->graph = new stdclass();
$lang->task->report->tasksPerExecution->graph = new stdclass();
$lang->task->report->tasksPerModule->graph = new stdclass();
$lang->task->report->tasksPerAssignedTo->graph = new stdclass();
$lang->task->report->tasksPerType->graph = new stdclass();
@@ -291,7 +291,7 @@ $lang->task->report->tasksPerFinishedBy->graph = new stdclass();
$lang->task->report->tasksPerClosedReason->graph = new stdclass();
$lang->task->report->finishedTasksPerDay->graph = new stdclass();
$lang->task->report->tasksPerProject->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerExecution->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerModule->graph->xAxisName = 'Module';
$lang->task->report->tasksPerAssignedTo->graph->xAxisName = 'Utilisateur';
$lang->task->report->tasksPerType->graph->xAxisName = 'Type';
+25 -25
View File
@@ -180,26 +180,26 @@ $lang->task->legendEffort = 'Chấm công';
$lang->task->legendLife = 'Toàn bộ nhiệm vụ';
$lang->task->legendDesc = 'Mô tả nhiệm vụ';
$lang->task->confirmDelete = "Bạn có muốn xóa nhiệm vụ này?";
$lang->task->confirmDeleteEstimate = "Bạn có muốn xóa nó?";
$lang->task->copyStoryTitle = "Copy";
$lang->task->afterSubmit = "Tiếp ";
$lang->task->successSaved = "Đã tạo!";
$lang->task->delayWarning = " <strong class='text-danger'> Tạm ngưng %s ngày </strong>";
$lang->task->remindBug = "Nhiệm vụ này được chuyển từ một bug. Bạn có muốn cập nhật Bug: %s?";
$lang->task->confirmChangeProject = "Nếu bạn thay đổi {$lang->executionCommon}, Module, Câu chuyện và Người được bàn giao sẽ cũng bị thay đổi. Bạn có muốn thay đổi nó?";
$lang->task->confirmFinish = '"Còn lại" bằng 0. Bạn có muốn thay đổi tình trạng thành "Kết thúc"?';
$lang->task->confirmRecord = '"Còn lại" bằng 0. Bạn có muốn thiết lập nhiệm vụ thành "Kết thúc"?';
$lang->task->confirmTransfer = '"Còn lại" bằng 0,Bạn có muốn chuyển thành nhiệm vụ?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Không có câu chuyện liên kết. Bạn có thể %s cho dự án này, sau đó %s.";
$lang->task->noticeSaveRecord = 'Số giờ làm của bạn chưa được lưu. Vui lòng lưu nó trước.';
$lang->task->commentActions = '%s. %s, nhận xét bởi <strong>%s</strong>.';
$lang->task->deniedNotice = 'Chỉ có %s này có thể %s nhiệm vụ này.';
$lang->task->noTask = 'Không có nhiệm vụ nào';
$lang->task->createDenied = 'Tạo nhiệm vụ bị từ chối trong dự án này';
$lang->task->cannotDeleteParent = 'Không thể xóa nhiệm vụ cha';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->confirmDelete = "Bạn có muốn xóa nhiệm vụ này?";
$lang->task->confirmDeleteEstimate = "Bạn có muốn xóa nó?";
$lang->task->copyStoryTitle = "Copy";
$lang->task->afterSubmit = "Tiếp ";
$lang->task->successSaved = "Đã tạo!";
$lang->task->delayWarning = " <strong class='text-danger'> Tạm ngưng %s ngày </strong>";
$lang->task->remindBug = "Nhiệm vụ này được chuyển từ một bug. Bạn có muốn cập nhật Bug: %s?";
$lang->task->confirmChangeExecution = "Nếu bạn thay đổi {$lang->executionCommon}, Module, Câu chuyện và Người được bàn giao sẽ cũng bị thay đổi. Bạn có muốn thay đổi nó?";
$lang->task->confirmFinish = '"Còn lại" bằng 0. Bạn có muốn thay đổi tình trạng thành "Kết thúc"?';
$lang->task->confirmRecord = '"Còn lại" bằng 0. Bạn có muốn thiết lập nhiệm vụ thành "Kết thúc"?';
$lang->task->confirmTransfer = '"Còn lại" bằng 0,Bạn có muốn chuyển thành nhiệm vụ?';
$lang->task->noticeTaskStart = '"Cost Hour" and "Left Hour" cannot be 0 at the same time.';
$lang->task->noticeLinkStory = "Không có câu chuyện liên kết. Bạn có thể %s cho dự án này, sau đó %s.";
$lang->task->noticeSaveRecord = 'Số giờ làm của bạn chưa được lưu. Vui lòng lưu nó trước.';
$lang->task->commentActions = '%s. %s, nhận xét bởi <strong>%s</strong>.';
$lang->task->deniedNotice = 'Chỉ có %s này có thể %s nhiệm vụ này.';
$lang->task->noTask = 'Không có nhiệm vụ nào';
$lang->task->createDenied = 'Tạo nhiệm vụ bị từ chối trong dự án này';
$lang->task->cannotDeleteParent = 'Không thể xóa nhiệm vụ cha';
$lang->task->addChildTask = 'Because the task has already consumed consumption, to ensure data consistency, we will help you create a subtask with the same name to record the consumption.';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"Total Cost" must be numbers.';
@@ -229,7 +229,7 @@ $lang->task->report->select = 'Chọn loại báo cáo';
$lang->task->report->create = 'Tạo báo cáo';
$lang->task->report->value = 'Nhiệm vụ';
$lang->task->report->charts['tasksPerProject'] = 'Nhiệm vụ ' . $lang->executionCommon;
$lang->task->report->charts['tasksPerExecution'] = 'Nhiệm vụ ' . $lang->executionCommon;
$lang->task->report->charts['tasksPerModule'] = 'Module nhiệm vụ';
$lang->task->report->charts['tasksPerAssignedTo'] = 'giao cho';
$lang->task->report->charts['tasksPerType'] = 'Loại nhiệm vụ';
@@ -249,7 +249,7 @@ $lang->task->report->options->type = 'pie';
$lang->task->report->options->width = 500;
$lang->task->report->options->height = 140;
$lang->task->report->tasksPerProject = new stdclass();
$lang->task->report->tasksPerExecution = new stdclass();
$lang->task->report->tasksPerModule = new stdclass();
$lang->task->report->tasksPerAssignedTo = new stdclass();
$lang->task->report->tasksPerType = new stdclass();
@@ -263,7 +263,7 @@ $lang->task->report->tasksPerFinishedBy = new stdclass();
$lang->task->report->tasksPerClosedReason = new stdclass();
$lang->task->report->finishedTasksPerDay = new stdclass();
$lang->task->report->tasksPerProject->item = $lang->executionCommon;
$lang->task->report->tasksPerExecution->item = $lang->executionCommon;
$lang->task->report->tasksPerModule->item = 'Module';
$lang->task->report->tasksPerAssignedTo->item = 'Giao cho';
$lang->task->report->tasksPerType->item = 'Loại';
@@ -277,7 +277,7 @@ $lang->task->report->tasksPerFinishedBy->item = 'Người kết thúc';
$lang->task->report->tasksPerClosedReason->item = 'Lý do';
$lang->task->report->finishedTasksPerDay->item = 'Ngày';
$lang->task->report->tasksPerProject->graph = new stdclass();
$lang->task->report->tasksPerExecution->graph = new stdclass();
$lang->task->report->tasksPerModule->graph = new stdclass();
$lang->task->report->tasksPerAssignedTo->graph = new stdclass();
$lang->task->report->tasksPerType->graph = new stdclass();
@@ -291,7 +291,7 @@ $lang->task->report->tasksPerFinishedBy->graph = new stdclass();
$lang->task->report->tasksPerClosedReason->graph = new stdclass();
$lang->task->report->finishedTasksPerDay->graph = new stdclass();
$lang->task->report->tasksPerProject->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerExecution->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerModule->graph->xAxisName = 'Module';
$lang->task->report->tasksPerAssignedTo->graph->xAxisName = 'Người dùng';
$lang->task->report->tasksPerType->graph->xAxisName = 'Loại';
+25 -25
View File
@@ -180,26 +180,26 @@ $lang->task->legendEffort = '工时信息';
$lang->task->legendLife = '任务的一生';
$lang->task->legendDesc = '任务描述';
$lang->task->confirmDelete = "您确定要删除这个任务吗?";
$lang->task->confirmDeleteEstimate = "您确定要删除这个记录吗?";
$lang->task->copyStoryTitle = "同{$lang->SRCommon}";
$lang->task->afterSubmit = "添加之后";
$lang->task->successSaved = "成功添加,";
$lang->task->delayWarning = " <strong class='text-danger'> 延期%s天 </strong>";
$lang->task->remindBug = "该任务为Bug转化得到,是否更新Bug:%s ?";
$lang->task->confirmChangeProject = "修改{$lang->executionCommon}会导致相应的所属模块、相关{$lang->SRCommon}和指派人发生变化,确定吗?";
$lang->task->confirmFinish = '"预计剩余"为0,确认将任务状态改为"已完成"吗?';
$lang->task->confirmRecord = '"剩余"为0,任务将标记为"已完成",您确定吗?';
$lang->task->confirmTransfer = '"当前剩余"为0,任务将被转交,您确定吗?';
$lang->task->noticeTaskStart = '"总计消耗"和"预计剩余"不能同时为0';
$lang->task->noticeLinkStory = "没有可关联的相关{$lang->SRCommon},您可以为当前项目%s,然后%s";
$lang->task->noticeSaveRecord = '您有尚未保存的工时记录,请先将其保存。';
$lang->task->commentActions = '%s. %s, 由 <strong>%s</strong> 添加备注。';
$lang->task->deniedNotice = '当前任务只有%s才可以%s。';
$lang->task->noTask = '暂时没有任务。';
$lang->task->createDenied = '你不能在该项目添加任务';
$lang->task->cannotDeleteParent = '不能删除父任务。';
$lang->task->addChildTask = '因该任务已经产生消耗,为保证数据一致性,我们会帮您创建一条同名子任务记录该消耗。';
$lang->task->confirmDelete = "您确定要删除这个任务吗?";
$lang->task->confirmDeleteEstimate = "您确定要删除这个记录吗?";
$lang->task->copyStoryTitle = "同{$lang->SRCommon}";
$lang->task->afterSubmit = "添加之后";
$lang->task->successSaved = "成功添加,";
$lang->task->delayWarning = " <strong class='text-danger'> 延期%s天 </strong>";
$lang->task->remindBug = "该任务为Bug转化得到,是否更新Bug:%s ?";
$lang->task->confirmChangeExecution = "修改{$lang->executionCommon}会导致相应的所属模块、相关{$lang->SRCommon}和指派人发生变化,确定吗?";
$lang->task->confirmFinish = '"预计剩余"为0,确认将任务状态改为"已完成"吗?';
$lang->task->confirmRecord = '"剩余"为0,任务将标记为"已完成",您确定吗?';
$lang->task->confirmTransfer = '"当前剩余"为0,任务将被转交,您确定吗?';
$lang->task->noticeTaskStart = '"总计消耗"和"预计剩余"不能同时为0';
$lang->task->noticeLinkStory = "没有可关联的相关{$lang->SRCommon},您可以为当前项目%s,然后%s";
$lang->task->noticeSaveRecord = '您有尚未保存的工时记录,请先将其保存。';
$lang->task->commentActions = '%s. %s, 由 <strong>%s</strong> 添加备注。';
$lang->task->deniedNotice = '当前任务只有%s才可以%s。';
$lang->task->noTask = '暂时没有任务。';
$lang->task->createDenied = '你不能在该项目添加任务';
$lang->task->cannotDeleteParent = '不能删除父任务。';
$lang->task->addChildTask = '因该任务已经产生消耗,为保证数据一致性,我们会帮您创建一条同名子任务记录该消耗。';
$lang->task->error = new stdclass();
$lang->task->error->totalNumber = '"总计消耗"必须为数字';
@@ -229,7 +229,7 @@ $lang->task->report->select = '请选择报表类型';
$lang->task->report->create = '生成报表';
$lang->task->report->value = '任务数';
$lang->task->report->charts['tasksPerProject'] = '按' . $lang->executionCommon . '任务数统计';
$lang->task->report->charts['tasksPerExecution'] = '按' . $lang->executionCommon . '任务数统计';
$lang->task->report->charts['tasksPerModule'] = '按模块任务数统计';
$lang->task->report->charts['tasksPerAssignedTo'] = '按指派给统计';
$lang->task->report->charts['tasksPerType'] = '按任务类型统计';
@@ -249,7 +249,7 @@ $lang->task->report->options->type = 'pie';
$lang->task->report->options->width = 500;
$lang->task->report->options->height = 140;
$lang->task->report->tasksPerProject = new stdclass();
$lang->task->report->tasksPerExecution = new stdclass();
$lang->task->report->tasksPerModule = new stdclass();
$lang->task->report->tasksPerAssignedTo = new stdclass();
$lang->task->report->tasksPerType = new stdclass();
@@ -263,7 +263,7 @@ $lang->task->report->tasksPerFinishedBy = new stdclass();
$lang->task->report->tasksPerClosedReason = new stdclass();
$lang->task->report->finishedTasksPerDay = new stdclass();
$lang->task->report->tasksPerProject->item = $lang->executionCommon;
$lang->task->report->tasksPerExecution->item = $lang->executionCommon;
$lang->task->report->tasksPerModule->item = '模块';
$lang->task->report->tasksPerAssignedTo->item = '用户';
$lang->task->report->tasksPerType->item = '类型';
@@ -277,7 +277,7 @@ $lang->task->report->tasksPerFinishedBy->item = '用户';
$lang->task->report->tasksPerClosedReason->item = '原因';
$lang->task->report->finishedTasksPerDay->item = '日期';
$lang->task->report->tasksPerProject->graph = new stdclass();
$lang->task->report->tasksPerExecution->graph = new stdclass();
$lang->task->report->tasksPerModule->graph = new stdclass();
$lang->task->report->tasksPerAssignedTo->graph = new stdclass();
$lang->task->report->tasksPerType->graph = new stdclass();
@@ -291,7 +291,7 @@ $lang->task->report->tasksPerFinishedBy->graph = new stdclass();
$lang->task->report->tasksPerClosedReason->graph = new stdclass();
$lang->task->report->finishedTasksPerDay->graph = new stdclass();
$lang->task->report->tasksPerProject->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerExecution->graph->xAxisName = $lang->executionCommon;
$lang->task->report->tasksPerModule->graph->xAxisName = '模块';
$lang->task->report->tasksPerAssignedTo->graph->xAxisName = '用户';
$lang->task->report->tasksPerType->graph->xAxisName = '类型';
+77 -77
View File
@@ -16,11 +16,11 @@ class taskModel extends model
/**
* Create a task.
*
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
public function create($projectID)
public function create($executionID)
{
if($this->post->estimate < 0)
{
@@ -29,7 +29,7 @@ class taskModel extends model
}
$this->getExtraRequiredFields();
$projectID = (int)$projectID;
$executionID = (int)$executionID;
$taskIdList = array();
$taskFiles = array();
$requiredFields = "," . $this->config->task->create->requiredFields . ",";
@@ -44,10 +44,10 @@ class taskModel extends model
$this->loadModel('file');
$task = fixer::input('post')
->setDefault('project', $projectID)
->setDefault('execution', $executionID)
->setDefault('estimate,left,story', 0)
->setDefault('status', 'wait')
->setIF($this->config->systemMode == 'new', 'PRJ', $this->session->PRJ)
->setIF($this->config->systemMode == 'new', 'project', $this->session->project)
->setIF($this->post->estimate != false, 'left', $this->post->estimate)
->setIF($this->post->story != false, 'storyVersion', $this->loadModel('story')->getVersion($this->post->story))
->setDefault('estStarted', '0000-00-00')
@@ -62,7 +62,7 @@ class taskModel extends model
->setIF(is_numeric($this->post->left), 'left', (float)$this->post->left)
->setDefault('openedBy', $this->app->user->account)
->setDefault('openedDate', helper::now())
->cleanINT('project,story,module')
->cleanINT('execution,story,module')
->stripTags($this->config->task->editor->create['id'], $this->config->allowedTags)
->join('mailto', ',')
->remove('after,files,labels,assignedTo,uid,storyEstimate,storyDesc,storyPri,team,teamEstimate,teamMember,multiple,teams,contactListMenu,selectTestStory,testStory,testPri,testEstStarted,testDeadline,testAssignedTo,testEstimate')
@@ -82,7 +82,7 @@ class taskModel extends model
/* Check duplicate task. */
if($task->type != 'affair')
{
$result = $this->loadModel('common')->removeDuplicate('task', $task, "project={$projectID} and story=" . (int)$task->story);
$result = $this->loadModel('common')->removeDuplicate('task', $task, "execution={$executionID} and story=" . (int)$task->story);
if($result['stop'])
{
$taskIdList[$assignedTo] = array('status' => 'exists', 'id' => $result['duplicate']);
@@ -93,8 +93,8 @@ class taskModel extends model
$task = $this->file->processImgURL($task, $this->config->task->editor->create['id'], $this->post->uid);
/* Fix Bug #1525 */
$projectType = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch('type');
if($projectType == 'ops')
$executionType = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($executionID)->fetch('type');
if($executionType == 'ops')
{
$requiredFields = str_replace(",story,", ',', "$requiredFields");
$task->story = 0;
@@ -231,11 +231,11 @@ class taskModel extends model
/**
* Create a batch task.
*
* @param int $projectID
* @param int $executionID
* @access public
* @return void
*/
public function batchCreate($projectID)
public function batchCreate($executionID)
{
$this->loadModel('action');
$now = helper::now();
@@ -271,7 +271,7 @@ class taskModel extends model
}
}
$result = $this->loadModel('common')->removeDuplicate('task', $tasks, "project=$projectID and story " . helper::dbIN($storyIDs));
$result = $this->loadModel('common')->removeDuplicate('task', $tasks, "execution=$executionID and story " . helper::dbIN($storyIDs));
$tasks = $result['data'];
$story = 0;
@@ -303,8 +303,8 @@ class taskModel extends model
$data[$i]->pri = $tasks->pri[$i];
$data[$i]->estimate = $tasks->estimate[$i];
$data[$i]->left = $tasks->estimate[$i];
$data[$i]->PRJ = $this->config->systemMode == 'new' ? $this->session->PRJ : 0;
$data[$i]->project = $projectID;
$data[$i]->project = $this->config->systemMode == 'new' ? $this->session->project : 0;
$data[$i]->execution = $executionID;
$data[$i]->estStarted = empty($tasks->estStarted[$i]) ? '0000-00-00' : $tasks->estStarted[$i];
$data[$i]->deadline = empty($tasks->deadline[$i]) ? '0000-00-00' : $tasks->deadline[$i];
$data[$i]->status = 'wait';
@@ -329,9 +329,9 @@ class taskModel extends model
}
/* Fix bug #1525*/
$projectType = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch('type');
$executionType = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($executionID)->fetch('type');
$requiredFields = ',' . $this->config->task->create->requiredFields . ',';
if($projectType == 'ops') $requiredFields = str_replace(',story,', ',', $requiredFields);
if($executionType == 'ops') $requiredFields = str_replace(',story,', ',', $requiredFields);
$requiredFields = trim($requiredFields, ',');
/* check data. */
@@ -844,17 +844,17 @@ class taskModel extends model
->setDefault('lastEditedBy', $this->app->user->account)
->add('lastEditedDate', $now)
->stripTags($this->config->task->editor->edit['id'], $this->config->allowedTags)
->cleanINT('project,story,module')
->cleanINT('execution,story,module')
->join('mailto', ',')
->remove('comment,files,labels,uid,multiple,team,teamEstimate,teamConsumed,teamLeft,contactListMenu')
->get();
if($task->consumed < $oldTask->consumed) die(js::error($this->lang->task->error->consumedSmall));
/* Fix bug#1388, Check children task projectID and moduleID. */
if(isset($task->project) and $task->project != $oldTask->project)
/* Fix bug#1388, Check children task executionID and moduleID. */
if(isset($task->execution) and $task->execution != $oldTask->execution)
{
$this->dao->update(TABLE_TASK)->set('project')->eq($task->project)->set('module')->eq($task->module)->where('parent')->eq($taskID)->exec();
$this->dao->update(TABLE_TASK)->set('execution')->eq($task->execution)->set('module')->eq($task->module)->where('parent')->eq($taskID)->exec();
}
$task = $this->loadModel('file')->processImgURL($task, $this->config->task->editor->edit['id'], $this->post->uid);
@@ -894,7 +894,7 @@ class taskModel extends model
foreach($teams as $member) $this->dao->insert(TABLE_TEAM)->data($member)->autoCheck()->exec();
/* Assign the left hours to zero who will be skipped. */
$skipMembers = $this->loadModel('project')->getTeamSkip($oldTask->team, $oldTask->assignedTo, $task->assignedTo);
$skipMembers = $this->loadModel('execution')->getTeamSkip($oldTask->team, $oldTask->assignedTo, $task->assignedTo);
foreach($skipMembers as $account => $team) $this->dao->update(TABLE_TEAM)->set('left')->eq(0)->where('root')->eq($taskID)->andWhere('type')->eq('task')->andWhere('account')->eq($account)->exec();
$task = $this->computeHours4Multiple($oldTask, $task, array(), $autoStatus = false);
@@ -905,9 +905,9 @@ class taskModel extends model
}
}
$projectType = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($task->project)->fetch('type');
$executionType = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($task->execution)->fetch('type');
$requiredFields = "," . $this->config->task->edit->requiredFields . ",";
if($projectType == 'ops')
if($executionType == 'ops')
{
$requiredFields = str_replace(",story,", ',', "$requiredFields");
$task->story = 0;
@@ -1306,7 +1306,7 @@ class taskModel extends model
if(!empty($oldTask->team))
{
$skipMembers = $this->loadModel('project')->getTeamSkip($oldTask->team, $oldTask->assignedTo, $task->assignedTo);
$skipMembers = $this->loadModel('execution')->getTeamSkip($oldTask->team, $oldTask->assignedTo, $task->assignedTo);
foreach($skipMembers as $account => $team) $this->dao->update(TABLE_TEAM)->set('left')->eq(0)->where('root')->eq($taskID)->andWhere('type')->eq('task')->andWhere('account')->eq($account)->exec();
$this->dao->update(TABLE_TEAM)->set('left')->eq($task->left)
@@ -1647,7 +1647,7 @@ class taskModel extends model
->andWhere('type')->eq('task')
->andWhere('account')->eq($oldTask->assignedTo)->exec();
$skipMembers = $this->loadModel('project')->getTeamSkip($oldTask->team, $oldTask->assignedTo, $task->assignedTo);
$skipMembers = $this->loadModel('execution')->getTeamSkip($oldTask->team, $oldTask->assignedTo, $task->assignedTo);
foreach($skipMembers as $account => $team) $this->dao->update(TABLE_TEAM)->set('left')->eq(0)->where('root')->eq($taskID)->andWhere('type')->eq('task')->andWhere('account')->eq($account)->exec();
$task = $this->computeHours4Multiple($oldTask, $task);
@@ -1888,9 +1888,9 @@ class taskModel extends model
}
/**
* Get tasks list of a project.
* Get tasks list of a execution.
*
* @param int $projectID
* @param int $executionID
* @param array|string $moduleIdList
* @param string $status
* @param string $orderBy
@@ -1898,13 +1898,13 @@ class taskModel extends model
* @access public
* @return array
*/
public function getTasksByModule($projectID = 0, $moduleIdList = 0, $orderBy = 'id_desc', $pager = null)
public function getTasksByModule($executionID = 0, $moduleIdList = 0, $orderBy = 'id_desc', $pager = null)
{
$tasks = $this->dao->select('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')
->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')
->where('t1.project')->eq((int)$projectID)
->where('t1.execution')->eq((int)$executionID)
->beginIF($moduleIdList)->andWhere('t1.module')->in($moduleIdList)->fi()
->andWhere('t1.deleted')->eq(0)
->orderBy($orderBy)
@@ -1918,9 +1918,9 @@ class taskModel extends model
}
/**
* Get tasks of a project.
* Get tasks of a execution.
*
* @param int $projectID
* @param int $executionID
* @param int $productID
* @param string $type
* @param string $modules
@@ -1930,7 +1930,7 @@ class taskModel extends model
* @access public
* @return array|void
*/
public function getProjectTasks($projectID, $productID = 0, $type = 'all', $modules = 0, $orderBy = 'status_asc, id_desc', $pager = null)
public function getExecutionTasks($executionID, $productID = 0, $type = 'all', $modules = 0, $orderBy = 'status_asc, id_desc', $pager = null)
{
if(is_string($type)) $type = strtolower($type);
$tasks = $this->dao->select('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')
@@ -1939,7 +1939,7 @@ class taskModel extends model
->leftJoin(TABLE_USER)->alias('t3')->on('t1.assignedTo = t3.account')
->leftJoin(TABLE_TEAM)->alias('t4')->on('t4.root = t1.id')
->leftJoin(TABLE_MODULE)->alias('t5')->on('t1.module = t5.id')
->where('t1.project')->eq((int)$projectID)
->where('t1.execution')->eq((int)$executionID)
->beginIF($type == 'myinvolved')
->andWhere("((t4.`account` = '{$this->app->user->account}' AND t4.`type` = 'task') OR t1.`assignedTo` = '{$this->app->user->account}' OR t1.`finishedby` = '{$this->app->user->account}')")
->fi()
@@ -1999,21 +1999,21 @@ class taskModel extends model
}
/**
* Get project tasks pairs.
* Get execution tasks pairs.
*
* @param int $projectID
* @param int $executionID
* @param string $status
* @param string $orderBy
* @access public
* @return array
*/
public function getProjectTaskPairs($projectID, $status = 'all', $orderBy = 'finishedBy, id_desc')
public function getExecutionTaskPairs($executionID, $status = 'all', $orderBy = 'finishedBy, id_desc')
{
$tasks = array('' => '');
$stmt = $this->dao->select('t1.id,t1.name,t1.parent,t2.realname AS finishedByRealName')
->from(TABLE_TASK)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.finishedBy = t2.account')
->where('t1.project')->eq((int)$projectID)
->where('t1.execution')->eq((int)$executionID)
->andWhere('t1.deleted')->eq(0)
->beginIF($status != 'all')->andWhere('t1.status')->in($status)->fi()
->orderBy($orderBy)
@@ -2023,20 +2023,20 @@ class taskModel extends model
}
/**
* Get project parent tasks pairs.
* Get execution parent tasks pairs.
*
* @param int $projectID
* @param int $executionID
* @param string $append
* @access public
* @return array
*/
public function getParentTaskPairs($projectID, $append = '')
public function getParentTaskPairs($executionID, $append = '')
{
$tasks = $this->dao->select('id, name')->from(TABLE_TASK)
->where('deleted')->eq(0)
->andWhere('parent')->le(0)
->andWhere('status')->notin('cancel,closed')
->andWhere('project')->eq($projectID)
->andWhere('execution')->eq($executionID)
->beginIF($append)->orWhere('id')->in($append)->fi()
->fetchPairs();
@@ -2056,20 +2056,20 @@ class taskModel extends model
* @param int $limit
* @param object $pager
* @param string $orderBy
* @param int $programID
* @param int $projectID
* @access public
* @return array
*/
public function getUserTasks($account, $type = 'assignedTo', $limit = 0, $pager = null, $orderBy = "id_desc", $programID = 0)
public function getUserTasks($account, $type = 'assignedTo', $limit = 0, $pager = null, $orderBy = "id_desc", $projectID = 0)
{
if(!$this->loadModel('common')->checkField(TABLE_TASK, $type)) return array();
$tasks = $this->dao->select('t1.*, t2.id as projectID, t2.name as projectName, t3.id as storyID, t3.title as storyTitle, t3.status AS storyStatus, t3.version AS latestStoryVersion')
$tasks = $this->dao->select('t1.*, t2.id as executionID, t2.name as executionName, t3.id as storyID, t3.title as storyTitle, t3.status AS storyStatus, t3.version AS latestStoryVersion')
->from(TABLE_TASK)->alias('t1')
->leftjoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
->leftjoin(TABLE_PROJECT)->alias('t2')->on('t1.execution = t2.id')
->leftjoin(TABLE_STORY)->alias('t3')->on('t1.story = t3.id')
->where('t1.deleted')->eq(0)
->beginIF($type != 'closedBy' and $this->app->moduleName == 'block')->andWhere('t1.status')->ne('closed')->fi()
->beginIF($programID)->andWhere('t1.PRJ')->eq($programID)->fi()
->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi()
->beginIF($type == 'finishedBy')
->andWhere('t1.finishedby', 1)->eq($account)
->orWhere('t1.finishedList')->like("%,{$account},%")
@@ -2098,25 +2098,25 @@ class taskModel extends model
*
* @param string $account
* @param string $status
* @param array $skipProjectIDList
* @param array $skipExecutionIDList
* @access public
* @return array
*/
public function getUserTaskPairs($account, $status = 'all', $skipProjectIDList = array())
public function getUserTaskPairs($account, $status = 'all', $skipExecutionIDList = array())
{
$stmt = $this->dao->select('t1.id, t1.name, t2.name as project')
$stmt = $this->dao->select('t1.id, t1.name, t2.name as execution')
->from(TABLE_TASK)->alias('t1')
->leftjoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
->leftjoin(TABLE_PROJECT)->alias('t2')->on('t1.execution = t2.id')
->where('t1.assignedTo')->eq($account)
->andWhere('t1.deleted')->eq(0)
->beginIF($status != 'all')->andWhere('t1.status')->in($status)->fi()
->beginIF(!empty($skipProjectIDList))->andWhere('t1.project')->notin($skipProjectIDList)->fi()
->beginIF(!empty($skipExecutionIDList))->andWhere('t1.execution')->notin($skipExecutionIDList)->fi()
->query();
$tasks = array();
while($task = $stmt->fetch())
{
$tasks[$task->id] = $task->project . ' / ' . $task->name;
$tasks[$task->id] = $task->execution . ' / ' . $task->name;
}
return $tasks;
}
@@ -2125,17 +2125,17 @@ class taskModel extends model
* Get task pairs of a story.
*
* @param int $storyID
* @param int $projectID
* @param int $executionID
* @access public
* @return array
*/
public function getStoryTasks($storyID, $projectID = 0)
public function getStoryTasks($storyID, $executionID = 0)
{
$tasks = $this->dao->select('id, parent, name, assignedTo, pri, status, estimate, consumed, closedReason, `left`')
->from(TABLE_TASK)
->where('story')->eq((int)$storyID)
->andWhere('deleted')->eq(0)
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
->beginIF($executionID)->andWhere('execution')->eq($executionID)->fi()
->fetchAll('id');
$parents = array();
@@ -2205,17 +2205,17 @@ class taskModel extends model
* Get counts of some stories' tasks.
*
* @param array $stories
* @param int $projectID
* @param int $executionID
* @access public
* @return int
*/
public function getStoryTaskCounts($stories, $projectID = 0)
public function getStoryTaskCounts($stories, $executionID = 0)
{
$taskCounts = $this->dao->select('story, COUNT(*) AS tasks')
->from(TABLE_TASK)
->where('story')->in($stories)
->andWhere('deleted')->eq(0)
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
->beginIF($executionID)->andWhere('execution')->eq($executionID)->fi()
->groupBy('story')
->fetchPairs();
foreach($stories as $storyID)
@@ -2520,24 +2520,24 @@ class taskModel extends model
}
/**
* Get report data of tasks per project
* Get report data of tasks per execution
*
* @access public
* @return array
*/
public function getDataOfTasksPerProject()
public function getDataOfTasksPerExecution()
{
$tasks = $this->dao->select('id,project')->from(TABLE_TASK)->alias('t1')
$tasks = $this->dao->select('id,execution')->from(TABLE_TASK)->alias('t1')
->where($this->reportCondition())
->fetchAll('id');
if(!$tasks) return array();
$datas = $this->processData4Report($tasks, '', 'project');
$datas = $this->processData4Report($tasks, '', 'execution');
$projects = $this->loadModel('project')->getExecutionPairs($this->session->PRJ, 'all', 'all');
foreach($datas as $projectID => $data)
$executions = $this->loadModel('execution')->getPairs($this->session->project, 'all', 'all');
foreach($datas as $executionID => $data)
{
$data->name = isset($projects[$projectID]) ? $projects[$projectID] : $this->lang->report->undefined;
$data->name = isset($executions[$executionID]) ? $executions[$executionID] : $this->lang->report->undefined;
}
return $datas;
}
@@ -2931,7 +2931,7 @@ class taskModel extends model
if($id == 'estimate' || $id == 'consumed' || $id == 'left')
{
$value = round($task->$id, 1);
$title = " title='{$value} {$this->lang->project->workHour}'";
$title = " title='{$value} {$this->lang->execution->workHour}'";
}
echo "<td class='" . $class . "'" . $title . ">";
@@ -2970,13 +2970,13 @@ class taskModel extends model
$storyChanged ? print("<span class='status-story status-changed'>{$this->lang->story->changed}</span>") : print("<span class='status-task status-{$task->status}'> " . $this->processStatus('task', $task) . "</span>");
break;
case 'estimate':
echo round($task->estimate, 1) . ' ' . $this->lang->project->workHourUnit;
echo round($task->estimate, 1) . ' ' . $this->lang->execution->workHourUnit;
break;
case 'consumed':
echo round($task->consumed, 1) . ' ' . $this->lang->project->workHourUnit;
echo round($task->consumed, 1) . ' ' . $this->lang->execution->workHourUnit;
break;
case 'left':
echo round($task->left, 1) . ' ' . $this->lang->project->workHourUnit;
echo round($task->left, 1) . ' ' . $this->lang->execution->workHourUnit;
break;
case 'progress':
echo round($task->progress, 2) . '%';
@@ -3065,7 +3065,7 @@ class taskModel extends model
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'iframe', true);
common::printIcon('task', 'edit', "taskID=$task->id", $task, 'list');
common::printIcon('task', 'batchCreate', "project=$task->project&storyID=$task->story&moduleID=$task->module&taskID=$task->id&ifame=0", $task, 'list', 'split', '', '', '', '', $this->lang->task->children);
common::printIcon('task', 'batchCreate', "execution=$task->execution&storyID=$task->story&moduleID=$task->module&taskID=$task->id&ifame=0", $task, 'list', 'split', '', '', '', '', $this->lang->task->children);
break;
}
echo '</td>';
@@ -3094,7 +3094,7 @@ class taskModel extends model
$btnClass = $task->assignedTo == 'closed' ? ' disabled' : '';
$btnClass = "iframe btn btn-icon-left btn-sm {$btnClass}";
$assignToLink = helper::createLink('task', 'assignTo', "projectID=$task->project&taskID=$task->id", '', true);
$assignToLink = helper::createLink('task', 'assignTo', "executionID=$task->execution&taskID=$task->id", '', true);
$assignToHtml = html::a($assignToLink, "<i class='icon icon-hand-right'></i> <span title='" . zget($users, $task->assignedTo) . "' class='{$btnTextClass}'>{$assignedToText}</span>", '', "class='$btnClass'");
echo !common::hasPriv('task', 'assignTo', $task) ? "<span style='padding-left: 21px' class='{$btnTextClass}'>{$assignedToText}</span>" : $assignToHtml;
@@ -3158,8 +3158,8 @@ class taskModel extends model
*/
public function getSubject($task)
{
$projectName = $this->loadModel('project')->getById($task->project)->name;
return 'TASK#' . $task->id . ' ' . $task->name . ' - ' . $projectName;
$executionName = $this->loadModel('execution')->getById($task->execution)->name;
return 'TASK#' . $task->id . ' ' . $task->name . ' - ' . $executionName;
}
/**
@@ -3242,7 +3242,7 @@ class taskModel extends model
*/
public function getMemberPairs($task)
{
$users = $this->loadModel('project')->getTeamMemberPairs($task->project, 'nodeleted');
$users = $this->loadModel('execution')->getTeamMemberPairs($task->execution, 'nodeleted');
$members = array('');
foreach($task->team as $member)
{
@@ -3259,9 +3259,9 @@ class taskModel extends model
*/
public function getExtraRequiredFields()
{
/* Add required fields to waterfall project. */
$project = $this->loadModel('program')->getPRJByID($this->session->PRJ);
if(!empty($project) && $project->model == 'waterfall')
/* Add required fields to waterfall execution. */
$execution = $this->loadModel('project')->getByID($this->session->project);
if(!empty($execution) && $execution->model == 'waterfall')
{
$this->config->task->create->requiredFields .= ',estStarted,deadline';
$this->config->task->edit->requiredFields .= ',estStarted,deadline';
+8 -8
View File
@@ -18,13 +18,13 @@
<div class="main-header clearfix">
<h2 class="pull-left">
<?php if($parent):?>
<span class='pull-left'><?php echo $parentTitle . $this->lang->colon;?></span>
<span class='pull-left'><?php echo $parentTitle . $this->lang->colon;?></span>
<?php echo $lang->task->batchCreateChildren;?>
<?php else:?>
<?php echo $lang->task->batchCreate;?>
<?php endif;?>
</h2>
<?php if($project->type != 'ops'):?>
<?php if($execution->type != 'ops'):?>
<a class="checkbox-primary pull-left" id='zeroTaskStory' href='javascript:toggleZeroTaskStory();'>
<label><?php echo $lang->story->zeroTask;?></label>
</a>
@@ -61,7 +61,7 @@
<tr>
<th class='w-30px'><?php echo $lang->idAB;?></th>
<th class='w-150px<?php echo zget($visibleFields, 'module', ' hidden') . zget($requiredFields, 'module', '', ' required');?>'><?php echo $lang->task->module?></th>
<?php if($project->type != 'ops'):?>
<?php if($execution->type != 'ops'):?>
<th class='w-200px<?php echo zget($visibleFields, 'story', ' hidden') . zget($requiredFields, 'story', '', ' required'); echo $hiddenStory;?>'><?php echo $lang->task->story;?></th>
<?php endif;?>
<th class='c-name required has-btn'><?php echo $lang->task->name;?></span></th>
@@ -84,7 +84,7 @@
$lang->task->typeList['ditto'] = $lang->task->ditto;
$members['ditto'] = $lang->task->ditto;
$modules['ditto'] = $lang->task->ditto;
if($project->type == 'ops') $colspan = $colspan - 1;
if($execution->type == 'ops') $colspan = $colspan - 1;
?>
<?php for($i = 0; $i < $config->task->batchCreate; $i++):?>
<?php
@@ -104,10 +104,10 @@
<tr>
<td class='text-center'><?php echo $i + 1;?></td>
<td <?php echo zget($visibleFields, 'module', "class='hidden'")?> style='overflow:visible'>
<?php echo html::select("module[$i]", $modules, $module, "class='form-control chosen' onchange='setStories(this.value, $project->id, $i)'")?>
<?php echo html::select("module[$i]", $modules, $module, "class='form-control chosen' onchange='setStories(this.value, $execution->id, $i)'")?>
<?php echo html::hidden("parent[$i]", $parent);?>
</td>
<?php if($project->type != 'ops'):?>
<?php if($execution->type != 'ops'):?>
<td <?php echo zget($visibleFields, 'story', "class='hidden'"); echo $hiddenStory;?> style='overflow: visible'>
<div class='input-group'>
<?php echo html::select("story[$i]", $stories, $currentStory, "class='form-control chosen' onchange='setStoryRelated($i)'");?>
@@ -159,7 +159,7 @@
<tr>
<td class='text-center'>%s</td>
<td <?php echo zget($visibleFields, 'module', "class='hidden'")?> style='overflow:visible'>
<?php echo html::select("module[%s]", $modules, $module, "class='form-control chosen' onchange='setStories(this.value, $project->id, \"%s\")'")?>
<?php echo html::select("module[%s]", $modules, $module, "class='form-control chosen' onchange='setStories(this.value, $execution->id, \"%s\")'")?>
<?php echo html::hidden("parent[%s]", $parent);?>
</td>
<td <?php echo zget($visibleFields, 'story', "class='hidden'"); echo $hiddenStory;?> style='overflow: visible'>
@@ -195,7 +195,7 @@
</tr>
</tbody>
</table>
<?php js::set('projectType', $project->type);?>
<?php js::set('executionType', $execution->type);?>
<?php js::set('storyTasks', $storyTasks);?>
<?php js::set('mainField', 'name');?>
<?php js::set('ditto', $lang->task->ditto);?>
+3 -3
View File
@@ -80,8 +80,8 @@ js::set('dittoNotice', $dittoNotice);
<?php
if(!isset($execution))
{
$prjInfo = $this->project->getById($tasks[$taskID]->project);
$modules = $this->tree->getOptionMenu($tasks[$taskID]->project, $viewType = 'task');
$prjInfo = $this->execution->getById($tasks[$taskID]->execution);
$modules = $this->tree->getOptionMenu($tasks[$taskID]->execution, $viewType = 'task');
foreach($modules as $moduleID => $moduleName) $modules[$moduleID] = '/' . $prjInfo->name. $moduleName;
$modules = array('ditto' => $this->lang->task->ditto) + $modules;
}
@@ -91,7 +91,7 @@ js::set('dittoNotice', $dittoNotice);
<?php $disableHour = (isset($teams[$taskID]) or $tasks[$taskID]->parent < 0) ? "disabled='disabled'" : '';?>
<?php
$members = array('' => '', 'ditto' => $this->lang->task->ditto);
$teamAccounts = array_keys($executionTeams[$tasks[$taskID]->project]);
$teamAccounts = array_keys($executionTeams[$tasks[$taskID]->execution]);
foreach($teamAccounts as $teamAccount) $members[$teamAccount] = $users[$teamAccount];
$members['closed'] = 'Closed';
+7 -7
View File
@@ -33,7 +33,7 @@
<table class='table table-form'>
<tr>
<th><?php echo $lang->task->execution;?></th>
<td><?php echo html::select('project', $projects, $project->id, "class='form-control chosen' onchange='loadAll(this.value)' required");?></td><td></td><td></td>
<td><?php echo html::select('execution', $executions, $execution->id, "class='form-control chosen' onchange='loadAll(this.value)' required");?></td><td></td><td></td>
</tr>
<tr>
<th><?php echo $lang->task->type;?></th>
@@ -46,7 +46,7 @@
</tr>
<tr>
<th><?php echo $lang->task->module;?></th>
<td id='moduleIdBox'><?php echo html::select('module', $moduleOptionMenu, $task->module, "class='form-control chosen' onchange='setStories(this.value, $project->id)'");?></td>
<td id='moduleIdBox'><?php echo html::select('module', $moduleOptionMenu, $task->module, "class='form-control chosen' onchange='setStories(this.value, $execution->id)'");?></td>
<td>
<div class="checkbox-primary">
<input type="checkbox" id="showAllModule" <?php if($showAllModule) echo 'checked';?>><label for="showAllModule" class="no-margin"><?php echo $lang->task->allModule;?></label>
@@ -75,12 +75,12 @@
<td><?php echo html::hidden('status', 'wait');?></td>
</tr>
<?php $this->printExtendFields('', 'table', 'columns=3');?>
<?php if(strpos(",$showFields,", ',story,') !== false and $project->type != 'ops'):?>
<?php if(strpos(",$showFields,", ',story,') !== false and $execution->type != 'ops'):?>
<tr>
<th><?php echo $lang->task->story;?></th>
<td colspan='3'>
<?php if(empty($stories)):?>
<span id='storyBox'><?php printf($lang->task->noticeLinkStory, html::a($this->createLink('project', 'linkStory', "projectID=$project->id"), $lang->project->linkStory, '_blank', 'class="text-primary"'), html::a("javascript:loadStories($project->id)", $lang->refresh, '', 'class="text-primary"'));?></span>
<span id='storyBox'><?php printf($lang->task->noticeLinkStory, html::a($this->createLink('execution', 'linkStory', "executionID=$execution->id"), $lang->execution->linkStory, '_blank', 'class="text-primary"'), html::a("javascript:loadStories($execution->id)", $lang->refresh, '', 'class="text-primary"'));?></span>
<?php else:?>
<div class='input-group'>
<?php echo html::select('story', array($task->story => $stories[$task->story]), $task->story, "class='form-control chosen' onchange='setStoryRelated();'");?>
@@ -90,7 +90,7 @@
</td>
</tr>
<?php endif;?>
<?php if($stories and $project->type != 'ops'):?>
<?php if($stories and $execution->type != 'ops'):?>
<tr id='testStoryBox' class='hidden'>
<th><?php echo $lang->task->selectTestStory;?></th>
<td colspan='3'>
@@ -234,7 +234,7 @@
<th><?php echo $lang->story->mailto;?></th>
<td colspan='3'>
<div class="input-group">
<?php echo html::select('mailto[]', $project->acl == 'private' ? $members : $users, str_replace(' ', '', $task->mailto), "class='form-control chosen' data-placeholder='{$lang->chooseUsersToMail}' multiple");?>
<?php echo html::select('mailto[]', $execution->acl == 'private' ? $members : $users, str_replace(' ', '', $task->mailto), "class='form-control chosen' data-placeholder='{$lang->chooseUsersToMail}' multiple");?>
<?php echo $this->fetch('my', 'buildContactLists');?>
</div>
</td>
@@ -295,7 +295,7 @@
<?php js::set('stories', $stories);?>
<?php js::set('storyPinYin', (empty($config->isINT) and class_exists('common')) ? common::convert2Pinyin($stories) : array());?>
<?php js::set('testStoryIdList', $testStoryIdList);?>
<?php js::set('projectID', $project->id);?>
<?php js::set('executionID', $execution->id);?>
<script>
$(function(){parent.$('body.hide-modal-close').removeClass('hide-modal-close');})
</script>
+8 -8
View File
@@ -16,9 +16,9 @@
<?php include '../../common/view/sortable.html.php';?>
<?php js::set('oldStoryID', $task->story);?>
<?php js::set('oldAssignedTo', $task->assignedTo);?>
<?php js::set('oldProjectID', $task->project);?>
<?php js::set('confirmChangeProject', $lang->task->confirmChangeProject);?>
<?php js::set('changeProjectConfirmed', false);?>
<?php js::set('oldExecutionID', $task->execution);?>
<?php js::set('confirmChangeExecution', $lang->task->confirmChangeExecution);?>
<?php js::set('changeExecutionConfirmed', false);?>
<?php js::set('newRowCount', count($task->team) < 6 ? 6 - count($task->team) : 1);?>
<div class='main-content' id='mainContent'>
<form method='post' enctype='multipart/form-data' target='hiddenwin' id='dataform'>
@@ -91,10 +91,10 @@
<?php if($task->parent <= 0):?>
<tr>
<th class='thWidth'><?php echo $lang->task->execution;?></th>
<td><?php echo html::select('project', $projects, $task->project, 'class="form-control chosen" onchange="loadAll(this.value)"');?></td>
<td><?php echo html::select('execution', $executions, $task->execution, 'class="form-control chosen" onchange="loadAll(this.value)"');?></td>
</tr>
<?php else:?>
<?php echo html::hidden('project', $task->project);?>
<?php echo html::hidden('execution', $task->execution);?>
<?php endif;?>
<tr>
<th class='thWidth'><?php echo $lang->task->module;?></th>
@@ -109,7 +109,7 @@
</div>
</td>
</tr>
<?php if($project->type != 'ops'):?>
<?php if($execution->type != 'ops'):?>
<tr>
<th><?php echo $lang->task->story;?></th>
<td><span id="storyIdBox"><?php echo html::select('story', $stories, $task->story, "class='form-control chosen'");?></span></td>
@@ -163,7 +163,7 @@
<th><?php echo $lang->task->mailto;?></th>
<td>
<div class='input-group'>
<?php echo html::select('mailto[]', $project->acl == 'private' ? $members : $users, str_replace(' ' , '', $task->mailto), 'class="form-control chosen" multiple');?>
<?php echo html::select('mailto[]', $execution->acl == 'private' ? $members : $users, str_replace(' ' , '', $task->mailto), 'class="form-control chosen" multiple');?>
<?php echo $this->fetch('my', 'buildContactLists');?>
</div>
</td>
@@ -305,5 +305,5 @@
</div>
</form>
</div>
<?php js::set('projectID', $project->id);?>
<?php js::set('executionID', $execution->id);?>
<?php include '../../common/view/footer.html.php';?>
+2 -2
View File
@@ -53,8 +53,8 @@
<tr class="text-center">
<td><?php echo $estimate->id;?></td>
<td><?php echo $estimate->date;?></td>
<td title="<?php echo $estimate->consumed . ' ' . $lang->project->workHour;?>"><?php echo $estimate->consumed . ' ' . $lang->project->workHourUnit;?></td>
<td title="<?php echo $estimate->left . ' ' . $lang->project->workHour;?>"><?php echo $estimate->left . ' ' . $lang->project->workHourUnit;?></td>
<td title="<?php echo $estimate->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $estimate->consumed . ' ' . $lang->execution->workHourUnit;?></td>
<td title="<?php echo $estimate->left . ' ' . $lang->execution->workHour;?>"><?php echo $estimate->left . ' ' . $lang->execution->workHourUnit;?></td>
<td class="text-left" title="<?php echo $estimate->work;?>"><?php echo $estimate->work;?></td>
<?php if(empty($task->team) or $task->assignedTo == $this->app->user->account):?>
<td align='center' class='c-actions'>
+4 -4
View File
@@ -5,7 +5,7 @@
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author wenjie<wenjie@cnezsoft.com>
* @package project
* @package execution
* @version $Id: report.html.php 1594 2011-04-10 11:00:00Z wj $
* @link http://www.zentao.net
*/
@@ -13,7 +13,7 @@
<?php include '../../common/view/header.html.php';?>
<div id="mainMenu" class="clearfix">
<div class="btn-toolbar pull-left">
<?php echo html::a($this->createLink('project', 'task', "projectID=$projectID&browseType=$browseType"), $lang->goback, '', "class='btn'");?>
<?php echo html::a($this->createLink('execution', 'task', "executionID=$executionID&browseType=$browseType"), $lang->goback, '', "class='btn'");?>
<div class='divider'></div>
<div class='page-title'>
<span class='text'><?php echo $lang->task->report->common;?></span>
@@ -46,7 +46,7 @@
<?php echo html::a("javascript:changeChartType(\"$type\")", ($type == 'default' ? "<i class='icon icon-list-alt muted'></i> " : "<i class='icon icon-chart-{$type} muted'></i> ") . $typeName, '', "class='btn btn-link " . ($type == $chartType ? 'btn-active-line' : '') . "'")?>
<?php endforeach;?>
</div>
<div class='text-muted' style='padding-top:5px'><?php echo str_replace('%tab%', $lang->project->unclosed . $lang->task->common, $lang->report->notice->help);?></div>
<div class='text-muted' style='padding-top:5px'><?php echo str_replace('%tab%', $lang->execution->unclosed . $lang->task->common, $lang->report->notice->help);?></div>
<?php foreach($charts as $chartType => $chartOption):?>
<div class='table-row chart-row'>
<div class='main-col'>
@@ -83,6 +83,6 @@
</div>
</div>
</div>
<?php js::set('projectID', $projectID);?>
<?php js::set('executionID', $executionID);?>
<?php js::set('browseType', $browseType);?>
<?php include '../../common/view/footer.html.php';?>
+12 -12
View File
@@ -12,7 +12,7 @@
?>
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/kindeditor.html.php';?>
<?php $browseLink = $app->session->taskList != false ? $app->session->taskList : $this->createLink('project', 'browse', "projectID=$task->project");?>
<?php $browseLink = $app->session->taskList != false ? $app->session->taskList : $this->createLink('execution', 'browse', "executionID=$task->execution");?>
<?php js::set('sysurl', common::getSysUrl());?>
<div id="mainMenu" class="clearfix">
<div class="btn-toolbar pull-left">
@@ -39,8 +39,8 @@
<div class="btn-toolbar pull-right">
<?php
$checkObject = new stdclass();
$checkObject->project = $task->project;
$link = $this->createLink('task', 'create', "project={$task->project}&storyID={$task->story}&moduleID={$task->module}");
$checkObject->execution = $task->execution;
$link = $this->createLink('task', 'create', "execution={$task->execution}&storyID={$task->story}&moduleID={$task->module}");
if(common::hasPriv('task', 'create', $checkObject)) echo html::a($link, "<i class='icon icon-plus'></i> {$lang->task->create}", '', "class='btn btn-primary'");
?>
</div>
@@ -55,7 +55,7 @@
<?php echo !empty($task->desc) ? $task->desc : "<div class='text-center text-muted'>" . $lang->noData . '</div>';?>
</div>
</div>
<?php if($project->type != 'ops'):?>
<?php if($execution->type != 'ops'):?>
<?php if($task->fromBug != 0):?>
<div class="detail">
<div class="detail-title"><?php echo $lang->bug->steps;?></div>
@@ -126,7 +126,7 @@
<td class='visible-lg'><?php echo $child->left;?></td>
<td class='c-actions'>
<?php
common::printIcon('task', 'assignTo', "projectID=$child->project&taskID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
common::printIcon('task', 'assignTo', "executionID=$child->execution&taskID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
common::printIcon('task', 'start', "taskID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
common::printIcon('task', 'activate', "taskID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
common::printIcon('task', 'close', "taskID=$child->id", $child, 'list', '', '', 'iframe showinonlybody', true);
@@ -157,8 +157,8 @@
<?php if(!isonlybody()) echo "<div class='divider'></div>";?>
<?php if(!$task->deleted):?>
<?php
if(empty($task->team) or empty($task->children)) common::printIcon('task', 'batchCreate', "project=$task->project&storyID=$task->story&moduleID=$task->module&taskID=$task->id", $task, 'button', 'split', '', '', '', "title='{$lang->task->children}'", $lang->task->children);
common::printIcon('task', 'assignTo', "projectID=$task->project&taskID=$task->id", $task, 'button', '', '', 'iframe', true, '', empty($task->team) ? $lang->task->assignTo : $lang->task->transfer);
if(empty($task->team) or empty($task->children)) common::printIcon('task', 'batchCreate', "execution=$task->execution&storyID=$task->story&moduleID=$task->module&taskID=$task->id", $task, 'button', 'split', '', '', '', "title='{$lang->task->children}'", $lang->task->children);
common::printIcon('task', 'assignTo', "executionID=$task->execution&taskID=$task->id", $task, 'button', '', '', 'iframe', true, '', empty($task->team) ? $lang->task->assignTo : $lang->task->transfer);
common::printIcon('task', 'start', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
common::printIcon('task', 'restart', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'button', '', '', 'iframe showinonlybody', true);
@@ -172,8 +172,8 @@
if(!isonlybody()) echo "<div class='divider'></div>";
common::printIcon('task', 'edit', "taskID=$task->id", $task, 'button', '', '', 'showinonlybody');
common::printIcon('task', 'create', "projctID={$task->project}&storyID=0&moduleID=0&taskID=$task->id", $task, 'button', 'copy');
common::printIcon('task', 'delete', "projectID=$task->project&taskID=$task->id", $task, 'button', 'trash', 'hiddenwin');
common::printIcon('task', 'create', "projctID={$task->execution}&storyID=0&moduleID=0&taskID=$task->id", $task, 'button', 'copy');
common::printIcon('task', 'delete', "executionID=$task->execution&taskID=$task->id", $task, 'button', 'trash', 'hiddenwin');
if($task->parent > 0) echo html::a(helper::createLink('task', 'view', "taskID=$task->parent"), "<i class='icon icon-chevron-double-up'></i>", '', "class='btn btn-link' title='{$lang->task->parent}'");
?>
<?php endif;?>
@@ -196,7 +196,7 @@
<tbody>
<tr>
<th class='w-90px'><?php echo $lang->task->execution;?></th>
<td><?php if(!common::printLink('project', 'view', "projectID=$task->project", $project->name)) echo $project->name;?></td>
<td><?php if(!common::printLink('execution', 'view', "executionID=$task->execution", $execution->name)) echo $execution->name;?></td>
</tr>
<tr>
<th><?php echo $lang->task->module;?></th>
@@ -218,7 +218,7 @@
foreach($modulePath as $key => $module)
{
$moduleTitle .= $module->name;
if(!common::printLink('project', 'task', "projectID=$task->project&browseType=byModule&param=$module->id", $module->name)) echo $module->name;
if(!common::printLink('execution', 'task', "executionID=$task->execution&browseType=byModule&param=$module->id", $module->name)) echo $module->name;
if(isset($modulePath[$key + 1]))
{
$moduleTitle .= '/';
@@ -231,7 +231,7 @@
?>
<td title='<?php echo $moduleTitle?>'><?php echo $printModule?></td>
</tr>
<?php if($project->type != 'ops'):?>
<?php if($execution->type != 'ops'):?>
<tr class='nofixed'>
<th><?php echo $lang->task->story;?></th>
<td>