From 797f353864924ded85d3cc8eb2dede889eff27a1 Mon Sep 17 00:00:00 2001 From: hufangzhou <746775970@qq.com> Date: Tue, 12 Jan 2021 14:50:21 +0800 Subject: [PATCH] * Finish task#8958, task#8960. --- db/update20.0.beta3.sql | 12 +++ db/zentao.sql | 11 +++ module/common/lang/de.php | 9 +- module/common/lang/en.php | 9 +- module/common/lang/fr.php | 9 +- module/common/lang/menuOrder.php | 20 ++-- module/common/lang/vi.php | 9 +- module/common/lang/zh-cn.php | 9 +- module/common/lang/zh-tw.php | 9 +- module/group/lang/resource.php | 38 ++++---- module/product/control.php | 44 ++++++++- module/product/css/dashboard.css | 4 + module/product/css/view.css | 7 +- module/product/lang/de.php | 1 + module/product/lang/en.php | 1 + module/product/lang/fr.php | 1 + module/product/lang/vi.php | 1 + module/product/lang/zh-cn.php | 1 + module/product/lang/zh-tw.php | 1 + module/product/view/dashboard.html.php | 81 +++++++++++++++++ module/product/view/view.html.php | 121 ++++++------------------- 21 files changed, 247 insertions(+), 151 deletions(-) create mode 100644 db/update20.0.beta3.sql create mode 100644 module/product/css/dashboard.css create mode 100644 module/product/view/dashboard.html.php diff --git a/db/update20.0.beta3.sql b/db/update20.0.beta3.sql new file mode 100644 index 0000000000..1f8a5809ae --- /dev/null +++ b/db/update20.0.beta3.sql @@ -0,0 +1,12 @@ +INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES +(1, 'product', 'dashboard'), +(2, 'product', 'dashboard'), +(3, 'product', 'dashboard'), +(4, 'product', 'dashboard'), +(5, 'product', 'dashboard'), +(6, 'product', 'dashboard'), +(7, 'product', 'dashboard'), +(8, 'product', 'dashboard'), +(9, 'product', 'dashboard'), +(10, 'product', 'dashboard'), +(11, 'product', 'dashboard'); diff --git a/db/zentao.sql b/db/zentao.sql index d07e831237..66c1bec633 100644 --- a/db/zentao.sql +++ b/db/zentao.sql @@ -1655,6 +1655,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (1, 'product', 'project'), (1, 'product', 'roadmap'), (1, 'product', 'view'), +(1, 'product', 'dashboard'), (1, 'product', 'build'), (1, 'product', 'updateOrder'), (1, 'branch', 'manage'), @@ -2010,6 +2011,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (2, 'product', 'project'), (2, 'product', 'roadmap'), (2, 'product', 'view'), +(2, 'product', 'dashboard'), (2, 'product', 'build'), (2, 'productplan', 'browse'), (2, 'productplan', 'view'), @@ -2205,6 +2207,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (3, 'product', 'project'), (3, 'product', 'roadmap'), (3, 'product', 'view'), +(3, 'product', 'dashboard'), (3, 'product', 'build'), (3, 'productplan', 'browse'), (3, 'productplan', 'view'), @@ -2459,6 +2462,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (4, 'product', 'project'), (4, 'product', 'roadmap'), (4, 'product', 'view'), +(4, 'product', 'dashboard'), (4, 'product', 'build'), (4, 'productplan', 'browse'), (4, 'productplan', 'view'), @@ -2719,6 +2723,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (5, 'product', 'project'), (5, 'product', 'roadmap'), (5, 'product', 'view'), +(5, 'product', 'dashboard'), (5, 'product', 'build'), (5, 'product', 'updateOrder'), (5, 'branch', 'manage'), @@ -3012,6 +3017,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (6, 'product', 'project'), (6, 'product', 'roadmap'), (6, 'product', 'view'), +(6, 'product', 'dashboard'), (6, 'product', 'build'), (6, 'productplan', 'browse'), (6, 'productplan', 'view'), @@ -3254,6 +3260,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (7, 'product', 'project'), (7, 'product', 'roadmap'), (7, 'product', 'view'), +(7, 'product', 'dashboard'), (7, 'product', 'build'), (7, 'product', 'updateOrder'), (7, 'branch', 'manage'), @@ -3510,6 +3517,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (8, 'product', 'project'), (8, 'product', 'roadmap'), (8, 'product', 'view'), +(8, 'product', 'dashboard'), (8, 'product', 'build'), (8, 'productplan', 'browse'), (8, 'productplan', 'view'), @@ -3760,6 +3768,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (9, 'product', 'project'), (9, 'product', 'roadmap'), (9, 'product', 'view'), +(9, 'product', 'dashboard'), (9, 'product', 'build'), (9, 'productplan', 'browse'), (9, 'productplan', 'view'), @@ -3912,6 +3921,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (10, 'product', 'all'), (10, 'product', 'roadmap'), (10, 'product', 'view'), +(10, 'product', 'dashboard'), (10, 'product', 'build'), (10, 'productplan', 'browse'), (10, 'productplan', 'view'), @@ -4019,6 +4029,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES (11, 'product', 'all'), (11, 'product', 'roadmap'), (11, 'product', 'view'), +(11, 'product', 'dashboard'), (11, 'product', 'build'), (11, 'productplan', 'browse'), (11, 'productplan', 'view'), diff --git a/module/common/lang/de.php b/module/common/lang/de.php index bda6329084..d472abe6bf 100644 --- a/module/common/lang/de.php +++ b/module/common/lang/de.php @@ -173,19 +173,20 @@ $lang->product->menu->home = 'Home|product|index|'; $lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit'); $lang->product->viewMenu = new stdclass(); -$lang->product->viewMenu->view = array('link' => 'Index|product|view|productID=%s', 'alias' => 'edit'); $lang->product->viewMenu->requirement = array('link' => "$lang->productURCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->productSRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; -$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s"; $lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->set = array('link' => 'Setting|tree|browse|productID=%s&view=story', 'subModule' => 'branch'); +$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; +$lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s'); +$lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch'); $lang->product->setMenu = new stdclass(); +$lang->product->setMenu->view = array('link' => 'View|product|view|productID={PRODUCT}', 'alias' => 'edit'); $lang->product->setMenu->module = array('link' => 'Module|tree|browse|product={PRODUCT}&view=story', 'subModule' => 'tree'); $lang->product->setMenu->branch = array('link' => '@branch@|branch|manage|product={PRODUCT}', 'subModule' => 'branch'); $lang->product->setMenu->whitelist = array('link' => 'Whitelist|product|whitelist|product={PRODUCT}', 'subModule' => 'personnel'); @@ -325,7 +326,7 @@ $lang->scrumproduct->menu->view = array('link' => 'Übersicht|product|view|p $lang->scrumproduct->menu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "Story|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',project,doc,'; +$lang->product->dividerMenu = ',plan,project,'; $lang->story = new stdclass(); diff --git a/module/common/lang/en.php b/module/common/lang/en.php index 18d01ca190..69b1beb148 100644 --- a/module/common/lang/en.php +++ b/module/common/lang/en.php @@ -173,19 +173,20 @@ $lang->product->menu->home = 'Home|product|index|'; $lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit'); $lang->product->viewMenu = new stdclass(); -$lang->product->viewMenu->view = array('link' => 'Index|product|view|productID=%s', 'alias' => 'edit'); $lang->product->viewMenu->requirement = array('link' => "$lang->productURCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->productSRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; -$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s"; $lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->set = array('link' => 'Setting|tree|browse|productID=%s&view=story', 'subModule' => 'branch'); +$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; +$lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s'); +$lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch'); $lang->product->setMenu = new stdclass(); +$lang->product->setMenu->view = array('link' => 'View|product|view|productID={PRODUCT}', 'alias' => 'edit'); $lang->product->setMenu->module = array('link' => 'Module|tree|browse|product={PRODUCT}&view=story', 'subModule' => 'tree'); $lang->product->setMenu->branch = array('link' => '@branch@|branch|manage|product={PRODUCT}', 'subModule' => 'branch'); $lang->product->setMenu->whitelist = array('link' => 'Whitelist|product|whitelist|product={PRODUCT}', 'subModule' => 'personnel'); @@ -325,7 +326,7 @@ $lang->scrumproduct->menu->view = array('link' => 'Overview|product|view|pro $lang->scrumproduct->menu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "Story|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',project,doc,'; +$lang->product->dividerMenu = ',plan,project,'; $lang->story = new stdclass(); diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php index c63b75af0a..b2de2f0ae6 100644 --- a/module/common/lang/fr.php +++ b/module/common/lang/fr.php @@ -173,19 +173,20 @@ $lang->product->menu->home = 'Home|product|index|'; $lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit'); $lang->product->viewMenu = new stdclass(); -$lang->product->viewMenu->view = array('link' => 'Index|product|view|productID=%s', 'alias' => 'edit'); $lang->product->viewMenu->requirement = array('link' => "$lang->productURCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->productSRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; -$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s"; $lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->set = array('link' => 'Setting|tree|browse|productID=%s&view=story', 'subModule' => 'branch'); +$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; +$lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s'); +$lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch'); $lang->product->setMenu = new stdclass(); +$lang->product->setMenu->view = array('link' => 'View|product|view|productID={PRODUCT}', 'alias' => 'edit'); $lang->product->setMenu->module = array('link' => 'Module|tree|browse|product={PRODUCT}&view=story', 'subModule' => 'tree'); $lang->product->setMenu->branch = array('link' => '@branch@|branch|manage|product={PRODUCT}', 'subModule' => 'branch'); $lang->product->setMenu->whitelist = array('link' => 'Whitelist|product|whitelist|product={PRODUCT}', 'subModule' => 'personnel'); @@ -325,7 +326,7 @@ $lang->scrumproduct->menu->view = array('link' => 'Overview|product|view|pro $lang->scrumproduct->menu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "Story|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',project,doc,'; +$lang->product->dividerMenu = ',plan,project,'; $lang->story = new stdclass(); diff --git a/module/common/lang/menuOrder.php b/module/common/lang/menuOrder.php index 67c92f041e..a4443a8fdc 100644 --- a/module/common/lang/menuOrder.php +++ b/module/common/lang/menuOrder.php @@ -52,16 +52,16 @@ $lang->my->menuOrder[50] = 'contacts'; $lang->todo->menuOrder = $lang->my->menuOrder; /* product menu order. */ -$lang->product->menuOrder[5] = 'view'; -$lang->product->menuOrder[10] = 'requirement'; -$lang->product->menuOrder[15] = 'story'; -$lang->product->menuOrder[20] = 'track'; -$lang->product->menuOrder[25] = 'plan'; -$lang->product->menuOrder[30] = 'release'; -$lang->product->menuOrder[35] = 'roadmap'; -$lang->product->menuOrder[40] = 'project'; -$lang->product->menuOrder[45] = 'doc'; -$lang->product->menuOrder[50] = 'dynamic'; +$lang->product->menuOrder[5] = 'requirement'; +$lang->product->menuOrder[10] = 'story'; +$lang->product->menuOrder[15] = 'track'; +$lang->product->menuOrder[20] = 'plan'; +$lang->product->menuOrder[25] = 'release'; +$lang->product->menuOrder[30] = 'roadmap'; +$lang->product->menuOrder[35] = 'project'; +$lang->product->menuOrder[40] = 'doc'; +$lang->product->menuOrder[45] = 'dynamic'; +$lang->product->menuOrder[50] = 'dashboard'; $lang->product->menuOrder[55] = 'setting'; $lang->product->menuOrder[60] = 'create'; $lang->product->menuOrder[65] = 'all'; diff --git a/module/common/lang/vi.php b/module/common/lang/vi.php index 01f0cd9544..bb6e7a0c15 100644 --- a/module/common/lang/vi.php +++ b/module/common/lang/vi.php @@ -173,19 +173,20 @@ $lang->product->menu->home = 'Home|product|index|'; $lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit'); $lang->product->viewMenu = new stdclass(); -$lang->product->viewMenu->view = array('link' => 'Index|product|view|productID=%s', 'alias' => 'edit'); $lang->product->viewMenu->requirement = array('link' => "$lang->productURCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->productSRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release'); $lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s'; -$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; $lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s"; $lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->set = array('link' => 'Setting|tree|browse|productID=%s&view=story', 'subModule' => 'branch'); +$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s'; +$lang->product->viewMenu->dashboard = array('link' => 'Dashboard|product|dashboard|productID=%s'); +$lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch'); $lang->product->setMenu = new stdclass(); +$lang->product->setMenu->view = array('link' => 'View|product|view|productID={PRODUCT}', 'alias' => 'edit'); $lang->product->setMenu->module = array('link' => 'Module|tree|browse|product={PRODUCT}&view=story', 'subModule' => 'tree'); $lang->product->setMenu->branch = array('link' => '@branch@|branch|manage|product={PRODUCT}', 'subModule' => 'branch'); $lang->product->setMenu->whitelist = array('link' => 'Whitelist|product|whitelist|product={PRODUCT}', 'subModule' => 'personnel'); @@ -325,7 +326,7 @@ $lang->scrumproduct->menu->view = array('link' => 'Overview|product|view|pro $lang->scrumproduct->menu->requirement = array('link' => "Requirement|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "Story|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',project,doc,'; +$lang->product->dividerMenu = ',plan,project,'; $lang->story = new stdclass(); diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 79ee26da00..8d06076b4d 100644 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -173,19 +173,20 @@ $lang->product->menu->home = '主页|product|index|'; $lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit'); $lang->product->viewMenu = new stdclass(); -$lang->product->viewMenu->view = array('link' => '仪表盘|product|view|productID=%s', 'alias' => 'edit'); $lang->product->viewMenu->requirement = array('link' => "$lang->productURCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->productSRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->track = array('link' => "跟踪矩阵|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "计划|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => '发布|release|browse|productID=%s', 'subModule' => 'release'); $lang->product->viewMenu->roadmap = '路线图|product|roadmap|productID=%s'; -$lang->product->viewMenu->dynamic = '动态|product|dynamic|productID=%s'; $lang->product->viewMenu->project = "项目|product|project|status=all&productID=%s"; $lang->product->viewMenu->doc = array('link' => '文档|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->set = array('link' => '设置|tree|browse|productID=%s&view=story', 'subModule' => 'branch'); +$lang->product->viewMenu->dynamic = '动态|product|dynamic|productID=%s'; +$lang->product->viewMenu->dashboard = array('link' => '仪表盘|product|dashboard|productID=%s'); +$lang->product->viewMenu->set = array('link' => '设置|product|view|productID=%s', 'subModule' => 'tree,branch'); $lang->product->setMenu = new stdclass(); +$lang->product->setMenu->view = array('link' => '概况|product|view|productID={PRODUCT}', 'alias' => 'edit'); $lang->product->setMenu->module = array('link' => '模块|tree|browse|product={PRODUCT}&view=story', 'subModule' => 'tree'); $lang->product->setMenu->branch = array('link' => '@branch@|branch|manage|product={PRODUCT}', 'subModule' => 'branch'); $lang->product->setMenu->whitelist = array('link' => '白名单|product|whitelist|product={PRODUCT}', 'subModule' => 'personnel'); @@ -325,7 +326,7 @@ $lang->scrumproduct->menu->view = array('link' => '概况|product|view|produc $lang->scrumproduct->menu->requirement = array('link' => "{$lang->projectURCommon}|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "{$lang->projectSRCommon}|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',requirement,plan,project,'; +$lang->product->dividerMenu = ',plan,project,'; $lang->story = new stdclass(); diff --git a/module/common/lang/zh-tw.php b/module/common/lang/zh-tw.php index 10cf35001b..136085ab78 100644 --- a/module/common/lang/zh-tw.php +++ b/module/common/lang/zh-tw.php @@ -166,19 +166,20 @@ $lang->product->menu->home = '主頁|product|index|'; $lang->product->menu->list = array('link' => $lang->productCommon . '|product|all|', 'alias' => 'create,batchedit'); $lang->product->viewMenu = new stdclass(); -$lang->product->viewMenu->view = array('link' => '儀表盤|product|view|productID=%s', 'alias' => 'edit'); $lang->product->viewMenu->requirement = array('link' => "$lang->productURCommon|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->story = array('link' => "$lang->productSRCommon|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->product->viewMenu->track = array('link' => "跟蹤矩陣|story|track|productID=%s"); $lang->product->viewMenu->plan = array('link' => "計劃|productplan|browse|productID=%s", 'subModule' => 'productplan'); $lang->product->viewMenu->release = array('link' => '發佈|release|browse|productID=%s', 'subModule' => 'release'); $lang->product->viewMenu->roadmap = '路線圖|product|roadmap|productID=%s'; -$lang->product->viewMenu->dynamic = '動態|product|dynamic|productID=%s'; $lang->product->viewMenu->project = "項目|product|project|status=all&productID=%s"; $lang->product->viewMenu->doc = array('link' => '文檔|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc'); -$lang->product->viewMenu->set = array('link' => '設置|tree|browse|productID=%s&view=story', 'subModule' => 'branch'); +$lang->product->viewMenu->dynamic = '動態|product|dynamic|productID=%s'; +$lang->product->viewMenu->dashboard = array('link' => '儀表盤|product|dashboard|productID=%s'); +$lang->product->viewMenu->set = array('link' => '設置|product|view|productID=%s', 'subModule' => 'tree,branch'); $lang->product->setMenu = new stdclass(); +$lang->product->setMenu->view = array('link' => '概況|product|view|productID={PRODUCT}', 'alias' => 'edit'); $lang->product->setMenu->module = array('link' => '模組|tree|browse|product={PRODUCT}&view=story', 'subModule' => 'tree'); $lang->product->setMenu->branch = array('link' => '@branch@|branch|manage|product={PRODUCT}', 'subModule' => 'branch'); $lang->product->setMenu->whitelist = array('link' => '白名單|product|whitelist|product={PRODUCT}', 'subModule' => 'personnel'); @@ -318,7 +319,7 @@ $lang->scrumproduct->menu->view = array('link' => '概況|product|view|produc $lang->scrumproduct->menu->requirement = array('link' => "{$lang->projectURCommon}|product|browse|productID=%s&branch=&browseType=unclosed¶m=0&storyType=requirement", 'alias' => 'batchedit', 'subModule' => 'story'); $lang->scrumproduct->menu->story = array('link' => "{$lang->projectSRCommon}|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story'); -$lang->product->dividerMenu = ',requirement,plan,project,'; +$lang->product->dividerMenu = ',plan,project,'; $lang->story = new stdclass(); diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index c4689167d7..0b0b275644 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -317,6 +317,7 @@ $lang->resource->product->roadmap = 'roadmap'; $lang->resource->product->doc = 'doc'; $lang->resource->product->dynamic = 'dynamic'; $lang->resource->product->project = 'project'; +$lang->resource->product->dashboard = 'dashboard'; $lang->resource->product->close = 'closeAction'; $lang->resource->product->updateOrder = 'orderAction'; $lang->resource->product->all = 'all'; @@ -326,25 +327,26 @@ $lang->resource->product->whitelist = 'whitelist'; $lang->resource->product->addWhitelist = 'addWhitelist'; $lang->resource->product->unbindWhielist = 'unbindWhielist'; -$lang->product->methodOrder[0] = 'index'; -$lang->product->methodOrder[5] = 'browse'; -$lang->product->methodOrder[10] = 'create'; -$lang->product->methodOrder[15] = 'view'; -$lang->product->methodOrder[20] = 'edit'; -$lang->product->methodOrder[25] = 'batchEdit'; -$lang->product->methodOrder[35] = 'delete'; -$lang->product->methodOrder[40] = 'roadmap'; +$lang->product->methodOrder[0] = 'index'; +$lang->product->methodOrder[5] = 'browse'; +$lang->product->methodOrder[10] = 'create'; +$lang->product->methodOrder[15] = 'view'; +$lang->product->methodOrder[20] = 'edit'; +$lang->product->methodOrder[25] = 'batchEdit'; +$lang->product->methodOrder[35] = 'delete'; +$lang->product->methodOrder[40] = 'roadmap'; //$lang->product->methodOrder[45] = 'doc'; -$lang->product->methodOrder[50] = 'dynamic'; -$lang->product->methodOrder[55] = 'project'; -$lang->product->methodOrder[60] = 'close'; -$lang->product->methodOrder[65] = 'updateOrder'; -$lang->product->methodOrder[70] = 'all'; -$lang->product->methodOrder[75] = 'build'; -$lang->product->methodOrder[80] = 'export'; -$lang->product->methodOrder[85] = 'whitelist'; -$lang->product->methodOrder[90] = 'addWhitelist'; -$lang->product->methodOrder[95] = 'unbindWhielist'; +$lang->product->methodOrder[50] = 'dynamic'; +$lang->product->methodOrder[55] = 'project'; +$lang->product->methodOrder[60] = 'dashboard'; +$lang->product->methodOrder[65] = 'close'; +$lang->product->methodOrder[70] = 'updateOrder'; +$lang->product->methodOrder[75] = 'all'; +$lang->product->methodOrder[80] = 'build'; +$lang->product->methodOrder[85] = 'export'; +$lang->product->methodOrder[90] = 'whitelist'; +$lang->product->methodOrder[95] = 'addWhitelist'; +$lang->product->methodOrder[100] = 'unbindWhielist'; /* Branch. */ $lang->resource->branch = new stdclass(); diff --git a/module/product/control.php b/module/product/control.php index a77463f0a0..96edbabd7e 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -524,6 +524,8 @@ class product extends control $product = $this->product->getStatByID($productID); if(!$product) die(js::error($this->lang->notFound) . js::locate('back')); + $moduleIndex = array_search('product', $this->lang->noMenuModule); + unset($this->lang->noMenuModule[$moduleIndex]); $this->lang->product->menu = $this->lang->product->viewMenu; $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID); $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); @@ -545,10 +547,7 @@ class product extends control $this->view->actions = $this->loadModel('action')->getList('product', $productID); $this->view->users = $this->user->getPairs('noletter'); $this->view->groups = $this->loadModel('group')->getPairs(); - $this->view->lines = array('') + $this->loadModel('tree')->getLinePairs(); $this->view->branches = $this->loadModel('branch')->getPairs($productID); - $this->view->dynamics = $this->loadModel('action')->getDynamic('all', 'all', 'date_desc', $pager, $productID); - $this->view->roadmaps = $this->product->getRoadmap($productID, 0, 6); $this->display(); } @@ -679,6 +678,45 @@ class product extends control $this->display(); } + /** + * Product dashboard. + * + * @param int $productID + * @access public + * @return void + */ + public function dashboard($productID) + { + $product = $this->product->getStatByID($productID); + if(!$product) die(js::error($this->lang->notFound) . js::locate('back')); + + $this->lang->product->menu = $this->lang->product->viewMenu; + $this->lang->product->switcherMenu = $this->loadModel('product')->getSwitcher($productID); + $this->lang->product->mainMenuAction = $this->product->getProductMainAction(); + + $product->desc = $this->loadModel('file')->setImgSize($product->desc); + $this->product->setMenu($this->products, $productID); + + /* Load pager. */ + $this->app->loadClass('pager', $static = true); + $pager = new pager(0, 30, 1); + + $this->executeHooks($productID); + + $this->view->title = $product->name . $this->lang->colon . $this->lang->product->view; + $this->view->position[] = html::a($this->createLink($this->moduleName, 'browse'), $product->name); + $this->view->position[] = $this->lang->product->view; + + $this->view->product = $product; + $this->view->actions = $this->loadModel('action')->getList('product', $productID); + $this->view->users = $this->user->getPairs('noletter'); + $this->view->lines = array('') + $this->loadModel('tree')->getLinePairs(); + $this->view->dynamics = $this->loadModel('action')->getDynamic('all', 'all', 'date_desc', $pager, $productID); + $this->view->roadmaps = $this->product->getRoadmap($productID, 0, 6); + + $this->display(); + } + /** * AJAX: get projects of a product in html select. * diff --git a/module/product/css/dashboard.css b/module/product/css/dashboard.css new file mode 100644 index 0000000000..dea77eb446 --- /dev/null +++ b/module/product/css/dashboard.css @@ -0,0 +1,4 @@ +.block-release .panel-body, .block-dynamic .panel-body {height: 240px; overflow-x: hidden; overflow-y: auto; position: relative;} +.block-release .panel-body {padding-bottom: 50px;} +.block-release .panel-body > .btn.pull-right {position: absolute; right: 20px; bottom: 20px;} +.release-line li .title{overflow: hidden; text-overflow: ellipsis; white-space: nowrap} diff --git a/module/product/css/view.css b/module/product/css/view.css index 30152dea42..170e1050d8 100644 --- a/module/product/css/view.css +++ b/module/product/css/view.css @@ -1,8 +1,5 @@ .branch-list {padding-left: 0; margin: 0;} .branch-list > li {float: left; list-style: none; width: 50%; margin: 5px 0;} .data-basic.table-data tbody > tr > th {width: 100px;} -.block-release .panel-body, .block-dynamic .panel-body {height: 240px; overflow-x: hidden; overflow-y: auto; position: relative;} -.block-release .panel-body {padding-bottom: 50px;} -.block-release .panel-body > .btn.pull-right {position: absolute; right: 20px; bottom: 20px;} -.col-4 .cell table td{word-wrap: break-word; word-break: normal;} -.release-line li .title{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap} +.col-12 .cell table td{word-wrap: break-word; word-break: normal;} +.row > .col-sm-12:first-child {padding-bottom: 20px;} diff --git a/module/product/lang/de.php b/module/product/lang/de.php index 805948bfe1..c53862aaf4 100644 --- a/module/product/lang/de.php +++ b/module/product/lang/de.php @@ -30,6 +30,7 @@ $lang->product->orderAction = "Rank {$lang->productCommon}"; $lang->product->all = "Alle {$lang->productCommon}"; $lang->product->export = 'Exportiere Daten'; $lang->product->exportAction = "Export {$lang->productCommon}"; +$lang->product->dashboard = 'Dashboard'; $lang->product->basicInfo = 'Basis Info'; $lang->product->otherInfo = 'Andere Info'; diff --git a/module/product/lang/en.php b/module/product/lang/en.php index b695d14ffb..b0ff9e5b8b 100644 --- a/module/product/lang/en.php +++ b/module/product/lang/en.php @@ -30,6 +30,7 @@ $lang->product->orderAction = "Rank {$lang->productCommon}"; $lang->product->all = "All {$lang->productCommon}s"; $lang->product->export = 'Export'; $lang->product->exportAction = "Export {$lang->productCommon}"; +$lang->product->dashboard = "Dashboard"; $lang->product->basicInfo = 'Basic Info'; $lang->product->otherInfo = 'Other Info'; diff --git a/module/product/lang/fr.php b/module/product/lang/fr.php index cd2710fc4d..2903a0911c 100644 --- a/module/product/lang/fr.php +++ b/module/product/lang/fr.php @@ -30,6 +30,7 @@ $lang->product->orderAction = "Rang {$lang->productCommon}"; $lang->product->all = "Tous les {$lang->productCommon}s"; $lang->product->export = 'Export'; $lang->product->exportAction = "Export {$lang->productCommon}"; +$lang->product->dashboard = "Dashboard"; $lang->product->basicInfo = 'Infos de Base'; $lang->product->otherInfo = 'Autres Infos'; diff --git a/module/product/lang/vi.php b/module/product/lang/vi.php index 3faae25083..96fb2d128c 100644 --- a/module/product/lang/vi.php +++ b/module/product/lang/vi.php @@ -30,6 +30,7 @@ $lang->product->orderAction = "Đánh giá {$lang->productCommon}"; $lang->product->all = "Tất cả {$lang->productCommon}"; $lang->product->export = 'Xuất'; $lang->product->exportAction = "Xuất {$lang->productCommon}"; +$lang->product->dashboard = "Dashboard"; $lang->product->basicInfo = 'Thông tin cơ bản'; $lang->product->otherInfo = 'Thông tin khác'; diff --git a/module/product/lang/zh-cn.php b/module/product/lang/zh-cn.php index 8ed545322f..ae13981f31 100644 --- a/module/product/lang/zh-cn.php +++ b/module/product/lang/zh-cn.php @@ -30,6 +30,7 @@ $lang->product->orderAction = "{$lang->productCommon}排序"; $lang->product->all = "所有{$lang->productCommon}"; $lang->product->export = '导出数据'; $lang->product->exportAction = "导出{$lang->productCommon}"; +$lang->product->dashboard = "{$lang->productCommon}仪表盘"; $lang->product->basicInfo = '基本信息'; $lang->product->otherInfo = '其他信息'; diff --git a/module/product/lang/zh-tw.php b/module/product/lang/zh-tw.php index 79b63d89e4..9c6a9ca803 100644 --- a/module/product/lang/zh-tw.php +++ b/module/product/lang/zh-tw.php @@ -30,6 +30,7 @@ $lang->product->orderAction = "{$lang->productCommon}排序"; $lang->product->all = "所有{$lang->productCommon}"; $lang->product->export = '導出數據'; $lang->product->exportAction = "導出{$lang->productCommon}"; +$lang->product->dashboard = "{$lang->productCommon}儀錶盤"; $lang->product->basicInfo = '基本信息'; $lang->product->otherInfo = '其他信息'; diff --git a/module/product/view/dashboard.html.php b/module/product/view/dashboard.html.php new file mode 100644 index 0000000000..7b814901ff --- /dev/null +++ b/module/product/view/dashboard.html.php @@ -0,0 +1,81 @@ + + * @package product + * @version $Id: view.html.php 4129 2013-01-18 01:58:14Z wwccss $ + * @link http://www.zentao.net + */ +?> + + +
+
+
+ + +
+
+
+
product->roadmap;?>
+
+
+
+ +
+ createLink('product', 'roadmap', "productID={$product->id}"), $lang->product->iterationView . "", '', "class='btn btn-primary btn-circle btn-icon-right btn-sm pull-right'");?> +
+
+
+ +
+
+
+
product->latestDynamic;?>
+ +
+
+
    + +
  • major) echo "class='active'";?>> +
    + date;?> + actor) . ' ' . "{$action->actionLabel}" . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName);?> +
    +
  • + +
+
+
+
+ printExtendFields($product, 'div', "position=left&inForm=0");?> +
+
+
+
+ +
+ diff --git a/module/product/view/view.html.php b/module/product/view/view.html.php index 2e767419cc..e7876bc02f 100644 --- a/module/product/view/view.html.php +++ b/module/product/view/view.html.php @@ -13,97 +13,7 @@
-
-
- - -
-
-
-
product->roadmap;?>
-
-
-
- -
- createLink('product', 'roadmap', "productID={$product->id}"), $lang->product->iterationView . "", '', "class='btn btn-primary btn-circle btn-icon-right btn-sm pull-right'");?> -
-
-
- -
-
-
-
product->latestDynamic;?>
- -
-
-
    - -
  • major) echo "class='active'";?>> -
    - date;?> - actor) . ' ' . "{$action->actionLabel}" . $action->objectLabel . ' ' . html::a($action->objectLink, $action->objectName);?> -
    -
  • - -
-
-
-
- printExtendFields($product, 'div', "position=left&inForm=0");?> -
- - createLink('action', 'comment', "objectType=product&objectID=$product->id");?> - -
-
-
-
- id"; - $browseLink = $this->session->productList ? $this->session->productList : inlink('browse', "productID=$product->id"); - common::printBack($browseLink); - if(!$product->deleted) - { - echo $this->buildOperateMenu($product, 'view'); - - echo "
"; - - if($product->status != 'closed') - { - common::printIcon('product', 'close', $params, $product, 'button', '', '', 'iframe', true); - echo "
"; - } - - common::printIcon('product', 'edit', $params, $product); - common::printIcon('product', 'delete', $params, $product, 'button', 'trash', 'hiddenwin'); - } - ?> -
-
-
-
+
@@ -231,6 +141,35 @@ printExtendFields($product, 'div', "position=right&inForm=0&inCell=1");?>
+
+ + createLink('action', 'comment', "objectType=product&objectID=$product->id");?> + +
+
+
+
+ id"; + $browseLink = $this->session->productList ? $this->session->productList : inlink('browse', "productID=$product->id"); + common::printBack($browseLink); + if(!$product->deleted) + { + echo $this->buildOperateMenu($product, 'view'); + + echo "
"; + + if($product->status != 'closed') + { + common::printIcon('product', 'close', $params, $product, 'button', '', '', 'iframe', true); + echo "
"; + } + + common::printIcon('product', 'edit', $params, $product); + common::printIcon('product', 'delete', $params, $product, 'button', 'trash', 'hiddenwin'); + } + ?> +