diff --git a/module/block/css/dashboard.css b/module/block/css/dashboard.css index 94c2ceba63..93c5c8bf64 100644 --- a/module/block/css/dashboard.css +++ b/module/block/css/dashboard.css @@ -20,8 +20,8 @@ body {background: #fafafa;} .dashboard .panel-dragging-shadow {position: absolute;} .dashboard-empty-message {text-align: center; margin-top: 100px;} .dashboard-empty-message > h5 {margin-bottom: 20px;} -.dashboard-actions {text-align: right; margin-top: -10px; margin-right: 10px; margin-bottom: 10px;} -.dashboard-actions > a {display: inline-block; width: 20px; height: 20px; text-align: center; color: #999; border: 1px solid #999; line-height: 20px; background: #999; color: #fff} +.dashboard-actions {position: absolute; top:-20px; right:-10px;} +.dashboard-actions > a {display: inline-block; width: 40px; height: 20px; text-align: center; color: #999; border: 1px solid #999; line-height: 20px; background: #1a4f85; color: #fff} .dashboard-actions > a:hover {background: #2e6dad; border-color: #2e6dad} #wrap .outer {background-color: #fafafa;} diff --git a/module/block/lang/en.php b/module/block/lang/en.php index 3e8bdde95e..662da3e202 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -81,7 +81,7 @@ $lang->block->default['qa']['2']['grid'] = 4; $lang->block->default['qa']['2']['params']['num'] = 15; $lang->block->default['qa']['2']['params']['orderBy'] = 'id_desc'; -$lang->block->default['qa']['2']['params']['type'] = 'assignedTo'; +$lang->block->default['qa']['2']['params']['type'] = 'assigntome'; $lang->block->default['qa']['3']['title'] = 'Waiting test task'; $lang->block->default['qa']['3']['block'] = 'testtask'; diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index cc2be9d763..afa2a9ba54 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -31,7 +31,6 @@ $lang->block->createBlock = '添加区块'; $lang->block->editBlock = '编辑区块'; $lang->block->ordersSaved = '排序已保存'; $lang->block->confirmRemoveBlock = '确定移除区块【{0}】吗?'; -$lang->block->emptyMessage = '这里什么也没有。快来定制你的页面!'; $lang->block->refresh = '刷新'; $lang->block->hidden = '隐藏'; $lang->block->dynamicInfo = "%s, %s %s %s %s。"; @@ -81,7 +80,7 @@ $lang->block->default['qa']['2']['grid'] = 4; $lang->block->default['qa']['2']['params']['num'] = 15; $lang->block->default['qa']['2']['params']['orderBy'] = 'id_desc'; -$lang->block->default['qa']['2']['params']['type'] = 'assignedTo'; +$lang->block->default['qa']['2']['params']['type'] = 'assigntome'; $lang->block->default['qa']['3']['title'] = '待测版本列表'; $lang->block->default['qa']['3']['block'] = 'testtask'; diff --git a/module/block/view/dashboard.html.php b/module/block/view/dashboard.html.php index 88b257f526..808d69f0ee 100644 --- a/module/block/view/dashboard.html.php +++ b/module/block/view/dashboard.html.php @@ -18,7 +18,6 @@ if(isset($pageCSS)) css::internal($pageCSS);
-
block->emptyMessage ?>
block->createBlock?>
@@ -35,10 +34,10 @@ if(isset($pageCSS)) css::internal($pageCSS);
diff --git a/module/bug/control.php b/module/bug/control.php index bd8750599c..e706efba31 100644 --- a/module/bug/control.php +++ b/module/bug/control.php @@ -116,7 +116,7 @@ class bug extends control $this->bug->buildSearchForm($productID, $this->products, $queryID, $actionURL); $this->loadModel('search')->mergeFeatureBar('bug', 'browse'); - $showModule = !empty($this->config->datatable->bugbrowse->showModule) ? $this->config->datatable->bugbrowse->showModule : ''; + $showModule = !empty($this->config->datatable->bugBrowse->showModule) ? $this->config->datatable->bugBrowse->showModule : ''; $this->view->modulePairs = $showModule ? $this->tree->getModulePairs($productID, 'bug', $showModule) : array(); /* Set view. */ diff --git a/module/common/lang/en.php b/module/common/lang/en.php index b4b2418d20..a918ea1a5a 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -67,7 +67,8 @@ $lang->unfold = '+'; $lang->fold = '-'; $lang->homepage = 'Set homepage'; $lang->tutorial = 'Novice tutorial'; -$lang->feature = 'New features'; +$lang->changeLog = 'Change log'; +$lang->manual = 'Manual'; $lang->customMenu = 'Custom menu'; $lang->tutorialConfirm = 'Detected you have not quit tutorial mode, quit now?'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index b9aed9f3e8..e2020fdd11 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -67,7 +67,8 @@ $lang->unfold = '+'; $lang->fold = '-'; $lang->homepage = '设为主页'; $lang->tutorial = '新手教程'; -$lang->feature = '了解新功能'; +$lang->changeLog = '修改日志'; +$lang->manual = '手册'; $lang->customMenu = '自定义导航'; $lang->tutorialConfirm = '检测到你尚未退出新手教程模式,是否现在退出?'; diff --git a/module/common/model.php b/module/common/model.php index 6e558587e0..b4cc184901 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -296,9 +296,13 @@ class commonModel extends model if($app->company->website) echo html::a($app->company->website, $lang->company->website, '_blank'); if($app->company->backyard) echo html::a($app->company->backyard, $lang->company->backyard, '_blank'); - if(!commonModel::isTutorialMode() and self::hasPriv('tutorial', 'start')) echo html::a(helper::createLink('tutorial', 'start'), $lang->tutorial, '', "class='iframe' data-width='800' data-headerless='true'"); - echo html::a(helper::createLink('misc', 'changeLog'), $lang->feature, '', "class='iframe' data-width='800' data-headerless='true'"); - echo html::a('javascript:;', $lang->help, '', "class='open-help-tab'"); + echo ""; echo html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about iframe' data-width='900' data-headerless='true' data-class='modal-about'"); } diff --git a/module/common/view/datatable.fix.html.php b/module/common/view/datatable.fix.html.php index 8d1d3e6b5b..31d1f0b871 100644 --- a/module/common/view/datatable.fix.html.php +++ b/module/common/view/datatable.fix.html.php @@ -50,16 +50,18 @@ $(function() });
-
+
-
- icons['dept']);?> -
+
icons['dept']);?>
    @@ -27,7 +25,7 @@
    -
    +
    dept->manageChild;?> @@ -121,19 +119,19 @@ $(function() sort: { title: 'dept->dragAndSort ?>', - template: '' + template: '' }, edit: { linkTemplate: '', title: 'dept->edit ?>', - template: '' + template: 'edit?>' }, "delete": { linkTemplate: '', title: 'dept->delete ?>', - template: '' + template: 'delete?>' } }, action: function(event) diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 61e7e2ef86..612e758b70 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -923,9 +923,6 @@ $lang->resource->dev->db = 'db'; $lang->dev->methodOrder[5] = 'api'; $lang->dev->methodOrder[10] = 'db'; -$lang->resource->datatable = new stdclass(); -$lang->resource->datatable->custom = 'custom'; - /* Every version of new privilege. */ $lang->changelog['1.0.1'][] = 'project-computeBurn'; diff --git a/module/product/control.php b/module/product/control.php index cd299c87c7..fa6479b62c 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -155,7 +155,7 @@ class product extends control $this->product->buildSearchForm($productID, $this->products, $queryID, $actionURL); $this->loadModel('search')->mergeFeatureBar('product', 'browse'); - $showModule = !empty($this->config->datatable->productbrowse->showModule) ? $this->config->datatable->productbrowse->showModule : ''; + $showModule = !empty($this->config->datatable->productBrowse->showModule) ? $this->config->datatable->productBrowse->showModule : ''; $this->view->modulePairs = $showModule ? $this->tree->getModulePairs($productID, 'story', $showModule) : array(); /* Assign. */ diff --git a/module/project/control.php b/module/project/control.php index 87b8ebe0dc..ab8ae213a2 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -189,7 +189,7 @@ class project extends control $memberPairs = array(); foreach($this->view->teamMembers as $key => $member) $memberPairs[$key] = $member->realname; - $showModule = !empty($this->config->datatable->projecttask->showModule) ? $this->config->datatable->projecttask->showModule : ''; + $showModule = !empty($this->config->datatable->projectTask->showModule) ? $this->config->datatable->projectTask->showModule : ''; $this->view->modulePairs = $showModule ? $this->tree->getModulePairs($projectID, 'task', $showModule) : array(); /* Assign. */ @@ -226,7 +226,7 @@ class project extends control * @access public * @return void */ - public function grouptask($projectID = 0, $groupBy = 'story') + public function grouptask($projectID = 0, $groupBy = 'story', $filter = '') { $project = $this->commonAction($projectID); $projectID = $project->id; @@ -296,6 +296,7 @@ class project extends control $this->view->users = $users; $this->view->moduleID = 0; $this->view->moduleName = $this->lang->tree->all; + $this->view->filter = $filter; $this->display(); } @@ -1560,7 +1561,6 @@ class project extends control { $this->project->manageMembers($projectID); $this->locate($this->createLink('project', 'team', "projectID=$projectID")); - exit; } /* Load model. */ diff --git a/module/project/js/grouptask.js b/module/project/js/grouptask.js index a2eeb6578b..26e8ffc21c 100644 --- a/module/project/js/grouptask.js +++ b/module/project/js/grouptask.js @@ -34,9 +34,3 @@ $(function() $tbody.find('tr.group-collapse').addClass('hidden'); }); }) - -function setFilter(groupBy, setting) -{ - $.cookie('groupFilter_' + groupBy, setting, {expires:config.cookieLife, path:config.webRoot}); - location.href = removeAnchor(location.href); -} diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 0c09e85b50..fcefcd691c 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -148,15 +148,15 @@ $lang->project->groups['type'] = '类型分组'; $lang->project->groups['deadline'] = '截止分组'; $lang->project->groupFilter['story']['all'] = $lang->project->all; -$lang->project->groupFilter['story']['linked'] = '关联需求的任务'; +$lang->project->groupFilter['story']['linked'] = '已关联需求的任务'; $lang->project->groupFilter['pri']['all'] = $lang->project->all; $lang->project->groupFilter['pri']['setted'] = '已设置'; $lang->project->groupFilter['assignedTo']['undone'] = '未完成'; $lang->project->groupFilter['assignedTo']['all'] = $lang->project->all; -$lang->project->groupFilter['finishedBy']['all'] = $lang->project->all; $lang->project->groupFilter['finishedBy']['done'] = '已完成'; -$lang->project->groupFilter['closedBy']['all'] = $lang->project->all; +$lang->project->groupFilter['finishedBy']['all'] = $lang->project->all; $lang->project->groupFilter['closedBy']['closed'] = '已关闭'; +$lang->project->groupFilter['closedBy']['all'] = $lang->project->all; $lang->project->groupFilter['deadline']['all'] = $lang->project->all; $lang->project->groupFilter['deadline']['setted'] = '已设置'; diff --git a/module/project/model.php b/module/project/model.php index 3c3d70fd0c..c3344910c2 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -1271,6 +1271,7 @@ class projectModel extends model */ public function getTeamMembers($projectID) { + if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getTeamMembers(); return $this->dao->select("t1.*, t1.hours * t1.days AS totalHours, if(t2.deleted='0', t2.realname, t1.account) as realname")->from(TABLE_TEAM)->alias('t1') ->leftJoin(TABLE_USER)->alias('t2')->on('t1.account = t2.account') ->where('t1.project')->eq((int)$projectID) diff --git a/module/project/view/grouptask.html.php b/module/project/view/grouptask.html.php index 87a0945113..5faff67c96 100644 --- a/module/project/view/grouptask.html.php +++ b/module/project/view/grouptask.html.php @@ -13,11 +13,11 @@ project->groupFilter[$groupBy])):?> -project->groupFilter[$groupBy]);?> +project->groupFilter[$groupBy]) : $filter;?>
    @@ -25,7 +25,7 @@ - @@ -64,7 +64,10 @@ $groupLeft = 0.0; $groupName = $groupKey; - if($groupBy == 'story' and $groupName == 0) $groupName = $this->lang->task->noStory; + if($groupBy == 'story' and $groupName == 0) $groupName = $this->lang->task->noStory; + if($groupBy == 'assignedTo' and $groupName == '') $groupName = $this->lang->task->noAssigned; + if($groupBy == 'finishedBy' and $groupName == '') $groupName = $this->lang->task->noFinished; + if($groupBy == 'closedBy' and $groupName == '') $groupName = $this->lang->task->noClosed; if(!empty($groupByList[$groupKey])) $groupName .= '::' . $groupByList[$groupKey]; ?> @@ -72,12 +75,12 @@ story)) continue; - if($groupBy == 'pri' and $currentFilter == 'setted' and empty($task->pri)) continue; + if($groupBy == 'story' and $currentFilter == 'linked' and empty($task->story)) continue; + if($groupBy == 'pri' and $currentFilter == 'setted' and empty($task->pri)) continue; if($groupBy == 'assignedTo' and $currentFilter == 'undone' and $task->status != 'wait' and $task->status != 'doing') continue; - if($groupBy == 'finishedBy' and $currentFilter == 'done' and $task->status != 'done') continue; - if($groupBy == 'closedBy' and $currentFilter == 'closed' and $task->status != 'closed') continue; - if($groupBy == 'deadline' and $currentFilter == 'setted' and $task->deadline == '0000-00-00') continue; + if($groupBy == 'finishedBy' and $currentFilter == 'done' and $task->status != 'done') continue; + if($groupBy == 'closedBy' and $currentFilter == 'closed' and $task->status != 'closed') continue; + if($groupBy == 'deadline' and $currentFilter == 'setted' and $task->deadline == '0000-00-00') continue; } ?> assignedTo == $app->user->account ? "style='color:red'" : '';?> @@ -152,7 +155,12 @@ diff --git a/module/task/lang/zh-cn.php b/module/task/lang/zh-cn.php index d8978c2022..b056c34e5c 100644 --- a/module/task/lang/zh-cn.php +++ b/module/task/lang/zh-cn.php @@ -93,6 +93,9 @@ $lang->task->ditto = '同上'; $lang->task->dittoNotice = "该任务与上一任务不属于同一项目!"; $lang->task->selectAllUser = '全部'; $lang->task->noStory = '无需求'; +$lang->task->noAssigned = '未指派'; +$lang->task->noFinished = '未完成'; +$lang->task->noClosed = '未关闭'; $lang->task->statusList[''] = ''; $lang->task->statusList['wait'] = '未开始'; diff --git a/module/testcase/control.php b/module/testcase/control.php index 4d2e459fc8..292a59e2a9 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -106,7 +106,7 @@ class testcase extends control $this->testcase->buildSearchForm($productID, $this->products, $queryID, $actionURL); $this->loadModel('search')->mergeFeatureBar('testcase', 'browse'); - $showModule = !empty($this->config->datatable->testcasebrowse->showModule) ? $this->config->datatable->testcasebrowse->showModule : ''; + $showModule = !empty($this->config->datatable->testcaseBrowse->showModule) ? $this->config->datatable->testcaseBrowse->showModule : ''; $this->view->modulePairs = $showModule ? $this->tree->getModulePairs($productID, 'case', $showModule) : array(); /* Assign. */ diff --git a/module/todo/view/batchcreate.html.php b/module/todo/view/batchcreate.html.php index 12380cb303..477cd19b2e 100755 --- a/module/todo/view/batchcreate.html.php +++ b/module/todo/view/batchcreate.html.php @@ -12,29 +12,29 @@ ?> - -
    -
    - icons['todo']);?> - icons['batchCreate']);?> todo->batchCreate;?> -
    - todo->date;?> - - todo->periods['future'];?> -
    -
    - -
    +
    +
    + icons['todo']);?> + icons['batchCreate']);?> todo->batchCreate;?> +
    + todo->date;?> + + todo->periods['future'];?> +
    +
    +
    - +
    + +
    + text-left'> " . $lang->task->$groupBy, '', "class='expandAll' data-action='expand'")?> " . $lang->task->$groupBy, '', "class='collapseAll hidden' data-action='collapse'")?>
    diff --git a/module/tree/model.php b/module/tree/model.php index b871686106..efe2082a65 100644 --- a/module/tree/model.php +++ b/module/tree/model.php @@ -1498,7 +1498,7 @@ class treeModel extends model foreach($branches as $branchID => $branch) { $stmt = $this->dbh->query($this->buildMenuQuery($rootID, $viewType, $currentModuleID, $branchID)); - $branchTrees[] = array('branch' => $branchID, 'id' => 0, 'name' => $branch, 'root' => $rootID, 'actions' => array('add' => true, 'edit' => false, 'delete' => false, 'sort' => true), 'nodeType' => 'branch', 'type' => 'branch', 'children' => $this->getDataStructure($stmt, $viewType)); + $branchTrees[] = array('branch' => $branchID, 'id' => 0, 'name' => $branch, 'root' => $rootID, 'actions' => false, 'nodeType' => 'branch', 'type' => 'branch', 'children' => $this->getDataStructure($stmt, $viewType)); } $fullTrees[] = array('name' => $this->lang->product->branchName[$product->type], 'root' => $rootID, 'type' => 'branch', 'actions' => false, 'children' => $branchTrees); } diff --git a/module/tree/view/browse.html.php b/module/tree/view/browse.html.php index b15e75cb03..dfe2d9d204 100644 --- a/module/tree/view/browse.html.php +++ b/module/tree/view/browse.html.php @@ -16,7 +16,7 @@
    tree->common;?>
    -
    +
    @@ -26,7 +26,7 @@
    -
    +
    id}&viewType=$viewType");?>'>
    @@ -128,19 +128,19 @@ $(function() sort: { title: 'tree->dragAndSort ?>', - template: '' + template: '' }, edit: { linkTemplate: '', title: 'tree->edit ?>', - template: '' + template: 'edit?>' }, "delete": { linkTemplate: '', title: 'tree->delete ?>', - template: '' + template: 'delete?>' } }, action: function(event) diff --git a/module/tree/view/browsetask.html.php b/module/tree/view/browsetask.html.php index 7b4b78e862..0218d8eb79 100644 --- a/module/tree/view/browsetask.html.php +++ b/module/tree/view/browsetask.html.php @@ -15,7 +15,7 @@
    tree->common;?>
    -
    +
    @@ -23,7 +23,7 @@
    -
    +
    id}&viewType=task");?>'>
    @@ -114,20 +114,10 @@ $(function() var title = (item.type === 'product' ? ' ' : '') + item.name; - var link = item.id !== undefined ? ('' + title + '') : ('' + title + ''); + var link = item.id !== undefined ? ('' + title + '') : ('' + title + ''); var $toggle = $('' + link + ''); - if(item.short) - { - $toggle.append('  (' + item.short + ')'); - } - if(item.type === 'task') - { - $toggle.append('  [T]'); - } - if(item.type === 'story') - { - $li.addClass('story-item'); - } + if(item.type === 'task') $toggle.append('  [T]'); + if(item.type === 'story') $li.addClass('story-item'); $li.append($toggle); if(item.nodeType) $li.addClass('tree-item-' + item.nodeType); return true; @@ -137,26 +127,19 @@ $(function() sort: { title: 'tree->dragAndSort ?>', - template: '' + template: '' }, edit: { linkTemplate: '', title: 'tree->edit ?>', - template: '' - }, - add: - { - title: 'tree->manageChild ?>', - template: '', - linkTemplate: '', - templateInList: false + template: 'edit?>' }, "delete": { linkTemplate: '', title: 'tree->delete ?>', - template: '' + template: 'delete?>' } }, action: function(event) diff --git a/module/tutorial/model.php b/module/tutorial/model.php index 6d1832850f..af78c94bd1 100644 --- a/module/tutorial/model.php +++ b/module/tutorial/model.php @@ -191,4 +191,25 @@ class tutorialModel extends model $story = $stories[0]; return array($story->id => $story->title); } + + public function getTeamMembers() + { + $member = new stdclass(); + $member->project = 1; + $member->account = $this->app->user->account; + $member->role = $this->app->user->role; + $member->join = $this->app->user->join; + $member->days = 10; + $member->hours = 7.0; + $member->totalHours = 70.0; + $member->realname = $this->app->user->realname; + return array($member->account => $member); + } + + public function getUserPairs() + { + $users[$this->app->user->account] = $this->app->user->account; + $users['test'] = 'Test'; + return $users; + } } diff --git a/module/user/model.php b/module/user/model.php index ec35df4974..47b95ed34b 100644 --- a/module/user/model.php +++ b/module/user/model.php @@ -71,6 +71,7 @@ class userModel extends model */ public function getPairs($params = '', $usersToAppended = '') { + if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getUserPairs(); /* Set the query fields and orderBy condition. * * If there's xxfirst in the params, use INSTR function to get the position of role fields in a order string,