Merge branch 'master' of https://github.com/easysoft/zentaopms
This commit is contained in:
@@ -332,6 +332,7 @@ class block extends control
|
||||
$this->app->user = new stdclass();
|
||||
$this->app->user->account = 'guest';
|
||||
}
|
||||
$this->app->user->rights = $this->loadModel('user')->authorize($this->app->user->account);
|
||||
|
||||
$sso = base64_decode($this->get->sso);
|
||||
$this->view->sso = $sso;
|
||||
|
||||
+17
-13
@@ -129,31 +129,35 @@ $lang->block->availableBlocks->case = 'My case';
|
||||
$lang->block->availableBlocks->story = 'My story';
|
||||
$lang->block->availableBlocks->product = $lang->productCommon;
|
||||
$lang->block->availableBlocks->project = $lang->projectCommon;
|
||||
$lang->block->availableBlocks->plan = 'Plan list';
|
||||
$lang->block->availableBlocks->release = 'Release list';
|
||||
$lang->block->availableBlocks->build = 'Build list';
|
||||
$lang->block->availableBlocks->testtask = 'Test build list';
|
||||
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['project'] = $lang->projectCommon;
|
||||
$lang->block->moduleList['qa'] = '测试';
|
||||
$lang->block->moduleList['todo'] = '待办';
|
||||
$lang->block->moduleList['qa'] = 'Test';
|
||||
$lang->block->moduleList['todo'] = 'Todo';
|
||||
|
||||
$lang->block->modules['product'] = new stdclass();
|
||||
$lang->block->modules['product']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . '列表';
|
||||
$lang->block->modules['product']->availableBlocks->story = '需求列表';
|
||||
$lang->block->modules['product']->availableBlocks->plan = '计划列表';
|
||||
$lang->block->modules['product']->availableBlocks->release = '发布列表';
|
||||
$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . ' list';
|
||||
$lang->block->modules['product']->availableBlocks->story = 'Story list';
|
||||
$lang->block->modules['product']->availableBlocks->plan = 'Plan list';
|
||||
$lang->block->modules['product']->availableBlocks->release = 'Release list';
|
||||
$lang->block->modules['project'] = new stdclass();
|
||||
$lang->block->modules['project']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['project']->availableBlocks->list = $lang->projectCommon . '列表';
|
||||
$lang->block->modules['project']->availableBlocks->task = '任务列表';
|
||||
$lang->block->modules['project']->availableBlocks->build = '版本列表';
|
||||
$lang->block->modules['project']->availableBlocks->list = $lang->projectCommon . ' list';
|
||||
$lang->block->modules['project']->availableBlocks->task = 'Task list';
|
||||
$lang->block->modules['project']->availableBlocks->build = 'Build list';
|
||||
$lang->block->modules['qa'] = new stdclass();
|
||||
$lang->block->modules['qa']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['qa']->availableBlocks->bug = 'Bug列表';
|
||||
$lang->block->modules['qa']->availableBlocks->case = '用例列表';
|
||||
$lang->block->modules['qa']->availableBlocks->testtask = '版本列表';
|
||||
$lang->block->modules['qa']->availableBlocks->bug = 'Bug list';
|
||||
$lang->block->modules['qa']->availableBlocks->case = 'Case list';
|
||||
$lang->block->modules['qa']->availableBlocks->testtask = 'Test build list';
|
||||
$lang->block->modules['todo'] = new stdclass();
|
||||
$lang->block->modules['todo']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['todo']->availableBlocks->list = '待办列表';
|
||||
$lang->block->modules['todo']->availableBlocks->list = 'Todo list';
|
||||
|
||||
$lang->block->orderByList = new stdclass();
|
||||
|
||||
|
||||
@@ -122,13 +122,17 @@ $lang->block->orderBy = '排序';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
|
||||
$lang->block->availableBlocks->todo = '我的待办';
|
||||
$lang->block->availableBlocks->task = '我的任务';
|
||||
$lang->block->availableBlocks->bug = '我的Bug';
|
||||
$lang->block->availableBlocks->case = '我的用例';
|
||||
$lang->block->availableBlocks->story = '我的需求';
|
||||
$lang->block->availableBlocks->product = $lang->productCommon . '列表';
|
||||
$lang->block->availableBlocks->project = $lang->projectCommon . '列表';
|
||||
$lang->block->availableBlocks->todo = '我的待办';
|
||||
$lang->block->availableBlocks->task = '我的任务';
|
||||
$lang->block->availableBlocks->bug = '我的Bug';
|
||||
$lang->block->availableBlocks->case = '我的用例';
|
||||
$lang->block->availableBlocks->story = '我的需求';
|
||||
$lang->block->availableBlocks->product = $lang->productCommon . '列表';
|
||||
$lang->block->availableBlocks->project = $lang->projectCommon . '列表';
|
||||
$lang->block->availableBlocks->plan = '计划列表';
|
||||
$lang->block->availableBlocks->release = '发布列表';
|
||||
$lang->block->availableBlocks->build = '版本列表';
|
||||
$lang->block->availableBlocks->testtask = '测试版本列表';
|
||||
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['project'] = $lang->projectCommon;
|
||||
|
||||
@@ -84,7 +84,7 @@ js::set('refresh', $lang->refresh);
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<?php $showOs = strpos(",$showFields,", ',os,') !== false;?>
|
||||
<?php $showOS = strpos(",$showFields,", ',os,') !== false;?>
|
||||
<?php $showBrowser = strpos(",$showFields,", ',browser,') !== false;?>
|
||||
<tr>
|
||||
<th><?php echo $lang->bug->type;?></th>
|
||||
@@ -97,7 +97,7 @@ js::set('refresh', $lang->refresh);
|
||||
unset($lang->bug->typeList['trackthings']);
|
||||
echo html::select('type', $lang->bug->typeList, $type, "class='form-control'");
|
||||
?>
|
||||
<?php if($showOs):?>
|
||||
<?php if($showOS):?>
|
||||
<span class='input-group-addon fix-border'><?php echo $lang->bug->os?></span>
|
||||
<?php echo html::select('os', $lang->bug->osList, $os, "class='form-control'");?>
|
||||
<?php endif;?>
|
||||
|
||||
@@ -178,7 +178,6 @@ $lang->product = new stdclass();
|
||||
$lang->product->menu = new stdclass();
|
||||
|
||||
$lang->product->menu->list = array('link' => '%s', 'fixed' => true);
|
||||
$lang->product->menu->index = 'Index|product|index|locate=no';
|
||||
$lang->product->menu->story = array('link' => 'Story|product|browse|productID=%s', 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->menu->dynamic = 'Dynamic|product|dynamic|productID=%s';
|
||||
$lang->product->menu->plan = array('link' => 'Plan|productplan|browse|productID=%s', 'subModule' => 'productplan');
|
||||
@@ -191,6 +190,7 @@ $lang->product->menu->view = array('link' => 'Info|product|view|productID=%s'
|
||||
$lang->product->menu->project = "{$lang->projectCommon}s|product|project|status=all&productID=%s";
|
||||
$lang->product->menu->create = array('link' => '<span class="icon-plus"> </span>New|product|create', 'float' => 'right');
|
||||
$lang->product->menu->all = array('link' => '<span class="icon-cubes"> </span>All|product|index|locate=no&productID=%s', 'float' => 'right');
|
||||
$lang->product->menu->index = array('link' => "<i class='icon-home'></i>Homepage|product|index|locate=no", 'float' => 'right');
|
||||
|
||||
$lang->story = new stdclass();
|
||||
$lang->productplan = new stdclass();
|
||||
@@ -207,7 +207,6 @@ $lang->project = new stdclass();
|
||||
$lang->project->menu = new stdclass();
|
||||
|
||||
$lang->project->menu->list = array('link' => '%s', 'fixed' => true);
|
||||
$lang->project->menu->index = 'Index|project|index|locate=no';
|
||||
$lang->project->menu->task = array('link' => 'Task|project|task|projectID=%s', 'subModule' => 'task,tree', 'alias' => 'grouptask,importtask,importbug,burn');
|
||||
$lang->project->menu->story = array('link' => 'Story|project|story|projectID=%s', 'subModule' => 'story', 'alias' => 'linkstory');
|
||||
$lang->project->menu->bug = 'Bug|project|bug|projectID=%s';
|
||||
@@ -220,6 +219,7 @@ $lang->project->menu->product = array('link' => "{$lang->productCommon}|projec
|
||||
$lang->project->menu->view = 'Info|project|view|projectID=%s';
|
||||
$lang->project->menu->create = array('link' => '<span class="icon-add"> </span>New|project|create', 'float' => 'right');
|
||||
$lang->project->menu->all = array('link' => "<i class='icon-th-large'></i> {$lang->projectCommon}s|project|index|locate=no&status=undone&projectID=%s", 'float' => 'right');
|
||||
$lang->project->menu->index = array('link' => "<i class='icon-home'></i>Homepage|project|index|locate=no", 'float' => 'right');
|
||||
|
||||
$lang->task = new stdclass();
|
||||
$lang->build = new stdclass();
|
||||
@@ -231,28 +231,28 @@ $lang->qa = new stdclass();
|
||||
$lang->qa->menu = new stdclass();
|
||||
|
||||
$lang->qa->menu->product = array('link' => '%s', 'fixed' => true);
|
||||
$lang->qa->menu->index = 'Index|qa|index|locate=no&productID=%s';
|
||||
$lang->qa->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
|
||||
$lang->qa->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
|
||||
$lang->qa->menu->testtask = array('link' => 'Build|testtask|browse|productID=%s');
|
||||
$lang->qa->menu->index = array('link' => "<i class='icon-home'></i>Homepage|qa|index|locate=no&productID=%s", 'float' => 'right');
|
||||
|
||||
$lang->bug = new stdclass();
|
||||
$lang->bug->menu = new stdclass();
|
||||
|
||||
$lang->bug->menu->product = array('link' => '%s', 'fixed' => true);
|
||||
$lang->bug->menu->index = 'Index|qa|index|locate=no&productID=%s';
|
||||
$lang->bug->menu->bug = array('link' => 'Bug|bug|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,resolve,close,activate,report,batchedit,confirmbug,assignto', 'subModule' => 'tree');
|
||||
$lang->bug->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
|
||||
$lang->bug->menu->testtask = array('link' => 'Build|testtask|browse|productID=%s');
|
||||
$lang->bug->menu->index = array('link' => "<i class='icon-home'></i>Homepage|qa|index|locate=no&productID=%s", 'float' => 'right');
|
||||
|
||||
$lang->testcase = new stdclass();
|
||||
$lang->testcase->menu = new stdclass();
|
||||
|
||||
$lang->testcase->menu->product = array('link' => '%s', 'fixed' => true);
|
||||
$lang->testcase->menu->index = 'Index|qa|index|locate=no&productID=%s';
|
||||
$lang->testcase->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
|
||||
$lang->testcase->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,batchedit,showimport,groupcase', 'subModule' => 'tree');
|
||||
$lang->testcase->menu->testtask = array('link' => 'Build|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase');
|
||||
$lang->testcase->menu->index = array('link' => "<i class='icon-home'></i>Homepage|qa|index|locate=no&productID=%s", 'float' => 'right');
|
||||
|
||||
$lang->testtask = new stdclass();
|
||||
$lang->testtask->menu = $lang->testcase->menu;
|
||||
|
||||
@@ -178,7 +178,6 @@ $lang->product = new stdclass();
|
||||
$lang->product->menu = new stdclass();
|
||||
|
||||
$lang->product->menu->list = array('link' => '%s', 'fixed' => true);
|
||||
$lang->product->menu->index = '首页|product|index|locate=no';
|
||||
$lang->product->menu->story = array('link' => '需求|product|browse|productID=%s', 'alias' => 'batchedit', 'subModule' => 'story');
|
||||
$lang->product->menu->dynamic = '动态|product|dynamic|productID=%s';
|
||||
$lang->product->menu->plan = array('link' => '计划|productplan|browse|productID=%s', 'subModule' => 'productplan');
|
||||
@@ -191,6 +190,7 @@ $lang->product->menu->view = array('link' => '概况|product|view|productID=%
|
||||
$lang->product->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s";
|
||||
$lang->product->menu->create = array('link' => "<i class='icon-plus'></i> 添加{$lang->productCommon}|product|create", 'float' => 'right');
|
||||
$lang->product->menu->all = array('link' => "<i class='icon-cubes'></i> 所有{$lang->productCommon}|product|all|productID=%s", 'float' => 'right');
|
||||
$lang->product->menu->index = array('link' => "<i class='icon-home'></i>产品主页|product|index|locate=no", 'float' => 'right');
|
||||
|
||||
$lang->story = new stdclass();
|
||||
$lang->productplan = new stdclass();
|
||||
@@ -207,7 +207,6 @@ $lang->project = new stdclass();
|
||||
$lang->project->menu = new stdclass();
|
||||
|
||||
$lang->project->menu->list = array('link' => '%s', 'fixed' => true);
|
||||
$lang->project->menu->index = '首页|project|index|locate=no';
|
||||
$lang->project->menu->task = array('link' => '任务|project|task|projectID=%s', 'subModule' => 'task,tree', 'alias' => 'grouptask,importtask,burn,importbug,kanban,printkanban,tree');
|
||||
$lang->project->menu->story = array('link' => '需求|project|story|projectID=%s', 'subModule' => 'story', 'alias' => 'linkstory');
|
||||
$lang->project->menu->bug = 'Bug|project|bug|projectID=%s';
|
||||
@@ -220,6 +219,7 @@ $lang->project->menu->product = $lang->productCommon . '|project|manageproduct
|
||||
$lang->project->menu->view = array('link' => '概况|project|view|projectID=%s', 'alias' => 'edit,start,suspend,putoff,close');
|
||||
$lang->project->menu->create = array('link' => "<i class='icon-plus'></i> 添加{$lang->projectCommon}|project|create", 'float' => 'right');
|
||||
$lang->project->menu->all = array('link' => "<i class='icon-th-large'></i> 所有{$lang->projectCommon}|project|all|status=undone&projectID=%s", 'float' => 'right');
|
||||
$lang->project->menu->index = array('link' => "<i class='icon-home'></i>项目主页|project|index|locate=no", 'float' => 'right');
|
||||
|
||||
$lang->task = new stdclass();
|
||||
$lang->build = new stdclass();
|
||||
@@ -231,28 +231,28 @@ $lang->qa = new stdclass();
|
||||
$lang->qa->menu = new stdclass();
|
||||
|
||||
$lang->qa->menu->product = array('link' => '%s', 'fixed' => true);
|
||||
$lang->qa->menu->index = '首页|qa|index|locate=no&productID=%s';
|
||||
$lang->qa->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
|
||||
$lang->qa->menu->testcase = array('link' => '用例|testcase|browse|productID=%s');
|
||||
$lang->qa->menu->testtask = array('link' => '版本|testtask|browse|productID=%s');
|
||||
$lang->qa->menu->index = array('link' => "<i class='icon-home'></i>测试主页|qa|index|locate=no&productID=%s", 'float' => 'right');
|
||||
|
||||
$lang->bug = new stdclass();
|
||||
$lang->bug->menu = new stdclass();
|
||||
|
||||
$lang->bug->menu->product = array('link' => '%s', 'fixed' => true);
|
||||
$lang->bug->menu->index = '首页|qa|index|locate=no&productID=%s';
|
||||
$lang->bug->menu->bug = array('link' => 'Bug|bug|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,resolve,close,activate,report,batchedit,confirmbug,assignto', 'subModule' => 'tree');
|
||||
$lang->bug->menu->testcase = array('link' => '用例|testcase|browse|productID=%s');
|
||||
$lang->bug->menu->testtask = array('link' => '版本|testtask|browse|productID=%s');
|
||||
$lang->bug->menu->index = array('link' => "<i class='icon-home'></i>测试主页|qa|index|locate=no&productID=%s", 'float' => 'right');
|
||||
|
||||
$lang->testcase = new stdclass();
|
||||
$lang->testcase->menu = new stdclass();
|
||||
|
||||
$lang->testcase->menu->product = array('link' => '%s', 'fixed' => true);
|
||||
$lang->testcase->menu->index = '首页|qa|index|locate=no&productID=%s';
|
||||
$lang->testcase->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
|
||||
$lang->testcase->menu->testcase = array('link' => '用例|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,batchedit,showimport,groupcase', 'subModule' => 'tree');
|
||||
$lang->testcase->menu->testtask = array('link' => '版本|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase');
|
||||
$lang->testcase->menu->index = array('link' => "<i class='icon-home'></i>测试主页|qa|index|locate=no&productID=%s", 'float' => 'right');
|
||||
|
||||
$lang->testtask = new stdclass();
|
||||
$lang->testtask->menu = $lang->testcase->menu;
|
||||
|
||||
+6
-40
@@ -115,7 +115,7 @@ class deptModel extends model
|
||||
*
|
||||
* @param int $rootDeptID
|
||||
* @param string $userFunc
|
||||
* @param array|int $param
|
||||
* @param int $param
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -216,21 +216,6 @@ class deptModel extends model
|
||||
return html::a(helper::createLink('group', 'managemember', "groupID=$groupID&deptID={$dept->id}"), $dept->name, '_self', "id='dept{$dept->id}'");
|
||||
}
|
||||
|
||||
/**
|
||||
* Create project manage members link.
|
||||
*
|
||||
* @param int $dept
|
||||
* @param array $params
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function createPrjManageMemberLink($dept, $params)
|
||||
{
|
||||
$projectID = $params['projectID'];
|
||||
$team2Import = $params['team2Import'];
|
||||
return html::a(helper::createLink('project', 'managemembers', "projectID=$projectID&team2Import=$team2Import&deptID={$dept->id}"), $dept->name, '_self', "id='dept{$dept->id}'");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get sons of a department.
|
||||
*
|
||||
@@ -353,35 +338,16 @@ class deptModel extends model
|
||||
* Get user pairs of a department.
|
||||
*
|
||||
* @param int $deptID
|
||||
* @param string $params
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDeptUserPairs($deptID = 0, $params = '')
|
||||
public function getDeptUserPairs($deptID = 0)
|
||||
{
|
||||
$fields = 'account, realname';
|
||||
if(strpos($params, 'devfirst')!== false) $fields .= ", INSTR(',td,pm,qd,qa,dev,', role) AS roleOrder";
|
||||
$orderBy = strpos($params, 'first') !== false ? 'roleOrder DESC, account' : 'account';
|
||||
|
||||
$childDeptIds = $this->getAllChildID($deptID);
|
||||
$users = $this->dao->select($fields)->from(TABLE_USER)
|
||||
return $this->dao->select('account, realname')->from(TABLE_USER)
|
||||
->where('deleted')->eq(0)
|
||||
->beginIF($deptID)->andWhere('dept')->in($childDeptIds)->fi()
|
||||
->orderBy($orderBy)
|
||||
->fetchAll('account');
|
||||
|
||||
/* Cycle the user records to append the first letter of his account. */
|
||||
foreach($users as $account => $user)
|
||||
{
|
||||
$firstLetter = ucfirst(substr($account, 0, 1)) . ':';
|
||||
if(strpos($params, 'noletter') !== false) $firstLetter = '';
|
||||
$users[$account] = $firstLetter . $user->realname;
|
||||
}
|
||||
|
||||
/* Append empty users. */
|
||||
if(strpos($params, 'noempty') === false) $users[''] = '';
|
||||
|
||||
return $users;
|
||||
->beginIF($deptID)->andWhere('dept')->in($this->getAllChildID($deptID))->fi()
|
||||
->orderBy('account')
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -235,7 +235,7 @@ class group extends control
|
||||
}
|
||||
$group = $this->group->getById($groupID);
|
||||
$groupUsers = $this->group->getUserPairs($groupID);
|
||||
$allUsers = $this->loadModel('dept')->getDeptUserPairs($deptID, 'noempty, noletter');
|
||||
$allUsers = $this->loadModel('dept')->getDeptUserPairs($deptID);
|
||||
$otherUsers = array_diff_assoc($allUsers, $groupUsers);
|
||||
|
||||
$title = $this->lang->company->common . $this->lang->colon . $group->name . $this->lang->colon . $this->lang->group->manageMember;
|
||||
|
||||
@@ -981,24 +981,6 @@ class taskModel extends model
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tasks a story.
|
||||
*
|
||||
* @param int $storyID
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getStoryTasks($storyID, $projectID = 0)
|
||||
{
|
||||
return $this->dao->select('*')
|
||||
->from(TABLE_TASK)
|
||||
->where('story')->eq((int)$storyID)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->beginIF($projectID)->andWhere('project')->eq($projectID)->fi()
|
||||
->fetchAll();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get counts of some stories' tasks.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user