diff --git a/db/update20.0.sql b/db/update20.0.sql index 34f3049c5c..41cc05cf04 100644 --- a/db/update20.0.sql +++ b/db/update20.0.sql @@ -290,3 +290,6 @@ ALTER TABLE `zt_project` ADD `path` varchar(255) NOT NULL AFTER `parent`; ALTER TABLE `zt_project` ADD `grade` tinyint unsigned NOT NULL AFTER `path`; INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system','custom','','URAndSR','1'),('system','custom','','URSRName','{\"urCommon\":{\"zh-cn\":\"\\u7528\\u6237\\u9700\\u6c42\"},\"srCommon\":{\"zh-cn\":\"\\u8f6f\\u4ef6\\u9700\\u6c42\"}}'),('system','custom','','storyPoint','1'); + +ALTER TABLE `zt_block` ADD `type` char(30) NOT NULL AFTER `module`; +ALTER TABLE `zt_block` ADD UNIQUE `account_module_type_order` (`account`, `module`, `type`, `order`), DROP INDEX `account_module_order_type`; diff --git a/module/block/config.php b/module/block/config.php index a446c201ca..acd44f32ba 100644 --- a/module/block/config.php +++ b/module/block/config.php @@ -15,15 +15,25 @@ $config->block->editor = new stdclass(); $config->block->editor->set = array('id' => 'html', 'tools' => 'simple'); $config->block->longBlock = array(); -$config->block->longBlock['']['flowchart'] = 'flowchart'; -$config->block->longBlock['']['welcome'] = 'welcome'; -$config->block->longBlock['product']['statistic'] = 'statistic'; -$config->block->longBlock['project']['statistic'] = 'statistic'; -$config->block->longBlock['qa']['statistic'] = 'statistic'; +$config->block->longBlock['']['flowchart'] = 'flowchart'; +$config->block->longBlock['']['welcome'] = 'welcome'; +$config->block->longBlock['product']['statistic'] = 'statistic'; +$config->block->longBlock['project']['statistic'] = 'statistic'; +$config->block->longBlock['qa']['statistic'] = 'statistic'; +$config->block->longBlock['program']['cmmireport'] = 'cmmireport'; +$config->block->longBlock['program']['cmmiissue'] = 'cmmiissue'; +$config->block->longBlock['program']['cmmirisk'] = 'cmmirisk'; $config->block->shortBlock = array(); -$config->block->shortBlock['product']['overview'] = 'overview'; -$config->block->shortBlock['project']['overview'] = 'overview'; +$config->block->shortBlock['product']['overview'] = 'overview'; +$config->block->shortBlock['project']['overview'] = 'overview'; +$config->block->shortBlock['program']['cmmiestimate'] = 'cmmiestimate'; +$config->block->shortBlock['program']['cmmiprogress'] = 'cmmiprogress'; +$config->block->shortBlock['']['contribute'] = 'contribute'; + +$config->block->showAction['overview'] = array('block' => 'qa', 'module' => 'testcase', 'method' => 'create', 'vars' => ''); +$config->block->showAction['scrumlist'] = array('block' => 'program', 'module' => 'project', 'method' => 'create', 'vars' => ''); +$config->block->showAction['scrumproduct'] = array('block' => 'program', 'module' => 'product', 'method' => 'create', 'vars' => ''); $config->statistic = new stdclass(); $config->statistic->storyStages = array('wait', 'planned', 'developing', 'testing', 'released'); diff --git a/module/block/control.php b/module/block/control.php index a9a962dfe7..824dd7677f 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -59,6 +59,7 @@ class block extends control if(strpos(",$closedBlock,", ",|flowchart,") === false and $this->config->global->flow == 'full') $modules['flowchart'] = $this->lang->block->lblFlowchart; if(strpos(",$closedBlock,", ",|welcome,") === false and $this->config->global->flow == 'full') $modules['welcome'] = $this->lang->block->welcome; if(strpos(",$closedBlock,", ",|html,") === false) $modules['html'] = 'HTML'; + if(strpos(",$closedBlock,", ",|contribute,") === false) $modules['contribute'] = $this->lang->block->contribute; $modules = array('' => '') + $modules; $hiddenBlocks = $this->block->getHiddenBlocks(); @@ -207,11 +208,11 @@ class block extends control public function dashboard($module, $type = '') { if($this->loadModel('user')->isLogon()) $this->session->set('blockModule', $module); - $blocks = $this->block->getBlockList($module); + $blocks = $this->block->getBlockList($module, $type); $inited = empty($this->config->$module->common->blockInited) ? '' : $this->config->$module->common->blockInited; /* Init block when vist index first. */ - if(empty($blocks) and !$inited and !defined('TUTORIAL')) + if((empty($blocks) and !$inited and !defined('TUTORIAL')) || (empty($blocks) and $module == 'program')) { if($this->block->initBlock($module, $type)) die(js::reload()); } @@ -246,13 +247,15 @@ class block extends control $block->moreLink = $this->createLink('company', 'dynamic'); } + $block->actionLink = ''; - if($block->block == 'overview') + if(isset($this->config->block->showAction[$block->block])) { - if($module == 'qa' && common::hasPriv('testcase', 'create')) + $action = $this->config->block->showAction[$block->block]; + if(common::hasPriv($action['module'], $action['method'])) { - $this->app->loadLang('testcase'); - $block->actionLink = html::a($this->createLink('testcase', 'create', 'productID='), " " . $this->lang->testcase->create, '', "class='btn btn-primary'"); + $this->app->loadLang($action['module']); + $block->actionLink = html::a($this->createLink($action['module'], $action['method'], $action['vars']), " " . $this->lang->$action['module']->create, '', "class='btn btn-mini'"); } } @@ -322,6 +325,19 @@ class block extends control $this->display(); } + /** + * Print contribute block. + * + * @access public + * @return void + */ + public function contribute() + { + $this->view->data = $this->block->getContributeBlockData(); + $this->display(); + } + + /** * Print block. * @@ -374,6 +390,10 @@ class block extends control { $html = $this->fetch('block', 'welcome'); } + elseif($block->block == 'contribute') + { + $html = $this->fetch('block', 'contribute'); + } echo $html; } @@ -1062,6 +1082,7 @@ class block extends control */ public function printCmmiReportBlock() { + $this->loadModel('program'); $program = $this->loadModel('project')->getByID($this->session->program); $today = date('Y-m-d', strtotime(helper::today())); $date = date('Ymd', strtotime($this->loadModel('weekly')->getThisMonday($today))); @@ -1455,17 +1476,6 @@ class block extends control $this->display(); } - /** - * Print contribute block. - * - * @access public - * @return void - */ - public function printContributeBlock() - { - $this->view->data = $this->block->getContributeBlockData(); - } - /** * Print recent program block. * @@ -1479,7 +1489,12 @@ class block extends control public function printProgramteamBlock() { - + $this->loadModel('project'); + + $num = isset($this->params->num) ? (int)$this->params->num : 15; + + /* Get projects. */ + $this->view->programs = $this->loadModel('program')->getUserPrograms('all', 'id_desc', $num); } /** @@ -1559,19 +1574,19 @@ class block extends control } /** - * Print srcum progress block. + * Print srcum project list block. * * @access public * @return void */ - public function printScrumprogressBlock() + public function printScrumlistBlock() { $this->app->loadClass('pager', $static = true); if(!empty($this->params->type) and preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die(); $num = isset($this->params->num) ? (int)$this->params->num : 0; $type = isset($this->params->type) ? $this->params->type : 'all'; $pager = pager::init(0, $num, 1); - $this->view->projectStats = $this->loadModel('project')->getProjectStats($type, $productID = 0, $branch = 0, $itemCounts = 30, $orderBy = 'order_desc', $this->viewType != 'json' ? $pager : ''); + $this->view->projectStats = $this->loadModel('project')->getProjectStats($type, $productID = 0, $branch = 0, $itemCounts = 30, $orderBy = 'order_desc', $this->viewType != 'json' ? $pager : '', $this->session->program); } /** diff --git a/module/block/js/admin.js b/module/block/js/admin.js index fb13ae3afb..1b3de1c96c 100644 --- a/module/block/js/admin.js +++ b/module/block/js/admin.js @@ -92,7 +92,7 @@ $(function() return true; } - if(moduleID == 'html' || moduleID == 'dynamic' || moduleID == 'flowchart' || moduleID == 'assigntome' || moduleID == 'welcome') + if(moduleID == 'html' || moduleID == 'dynamic' || moduleID == 'flowchart' || moduleID == 'assigntome' || moduleID == 'welcome' || moduleID == 'contribute') { getNotSourceParams(moduleID, blockID, onFinish); return true; diff --git a/module/block/js/dashboard.js b/module/block/js/dashboard.js index d2baca0ef0..4be23863ba 100644 --- a/module/block/js/dashboard.js +++ b/module/block/js/dashboard.js @@ -79,6 +79,7 @@ function refreshBlock($panel, afterRefresh) } $panel.find('.tablesorter').sortTable(); initTableHeader($panel); + $(".sparkline").sparkline(); }).fail(function() { $panel.addClass('panel-error'); diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index 6f0a159344..d59b2d4c88 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -36,6 +36,7 @@ $lang->block->done = '已完成'; $lang->block->lblFlowchart = '流程图'; $lang->block->welcome = '欢迎总览'; $lang->block->lblTesttask = '查看测试详情'; +$lang->block->contribute = '个人贡献'; $lang->block->leftToday = '今天剩余工作总计'; $lang->block->myTask = '我的任务'; @@ -75,31 +76,34 @@ $lang->block->nbsp = ''; $lang->block->hidden = '隐藏'; $lang->block->dynamicInfo = "%s %s %s %s %s"; - $lang->block->productName = $lang->productCommon . '名称'; $lang->block->totalStory = '总' . $lang->storyCommon; $lang->block->totalBug = '总Bug'; $lang->block->totalRelease = '发布次数'; -$lang->block->default['cmmi']['program']['1']['title'] = '项目周报'; -$lang->block->default['cmmi']['program']['1']['block'] = 'cmmireport'; -$lang->block->default['cmmi']['program']['1']['grid'] = 8; +$lang->block->default['cmmi']['program']['1']['title'] = '项目周报'; +$lang->block->default['cmmi']['program']['1']['block'] = 'cmmireport'; +$lang->block->default['cmmi']['program']['1']['source'] = 'program'; +$lang->block->default['cmmi']['program']['1']['grid'] = 8; -$lang->block->default['cmmi']['program']['2']['title'] = '估算'; -$lang->block->default['cmmi']['program']['2']['block'] = 'cmmiestimate'; -$lang->block->default['cmmi']['program']['2']['grid'] = 4; +$lang->block->default['cmmi']['program']['2']['title'] = '估算'; +$lang->block->default['cmmi']['program']['2']['block'] = 'cmmiestimate'; +$lang->block->default['cmmi']['program']['2']['source'] = 'program'; +$lang->block->default['cmmi']['program']['2']['grid'] = 4; -$lang->block->default['cmmi']['program']['3']['title'] = '计划甘特图'; -$lang->block->default['cmmi']['program']['3']['block'] = 'cmmigantt'; -$lang->block->default['cmmi']['program']['3']['grid'] = 8; +$lang->block->default['cmmi']['program']['3']['title'] = '计划甘特图'; +$lang->block->default['cmmi']['program']['3']['block'] = 'cmmigantt'; +$lang->block->default['cmmi']['program']['3']['source'] = 'program'; +$lang->block->default['cmmi']['program']['3']['grid'] = 8; -$lang->block->default['cmmi']['program']['4']['title'] = '到目前为止项目进展趋势图'; -$lang->block->default['cmmi']['program']['4']['block'] = 'cmmiprogress'; -$lang->block->default['cmmi']['program']['4']['grid'] = 4; +$lang->block->default['cmmi']['program']['4']['title'] = '到目前为止项目进展趋势图'; +$lang->block->default['cmmi']['program']['4']['block'] = 'cmmiprogress'; +$lang->block->default['cmmi']['program']['4']['grid'] = 4; -$lang->block->default['cmmi']['program']['5']['title'] = '项目问题'; -$lang->block->default['cmmi']['program']['5']['block'] = 'cmmiissue'; -$lang->block->default['cmmi']['program']['5']['grid'] = 8; +$lang->block->default['cmmi']['program']['5']['title'] = '项目问题'; +$lang->block->default['cmmi']['program']['5']['block'] = 'cmmiissue'; +$lang->block->default['cmmi']['program']['5']['source'] = 'program'; +$lang->block->default['cmmi']['program']['5']['grid'] = 8; $lang->block->default['cmmi']['program']['5']['params']['type'] = 'all'; $lang->block->default['cmmi']['program']['5']['params']['num'] = '15'; @@ -110,9 +114,10 @@ $lang->block->default['cmmi']['program']['6']['block'] = 'dynamic'; $lang->block->default['cmmi']['program']['6']['grid'] = 4; $lang->block->default['cmmi']['program']['6']['source'] = ''; -$lang->block->default['cmmi']['program']['7']['title'] = '项目风险'; -$lang->block->default['cmmi']['program']['7']['block'] = 'cmmirisk'; -$lang->block->default['cmmi']['program']['7']['grid'] = 8; +$lang->block->default['cmmi']['program']['7']['title'] = '项目风险'; +$lang->block->default['cmmi']['program']['7']['block'] = 'cmmirisk'; +$lang->block->default['cmmi']['program']['7']['source'] = 'program'; +$lang->block->default['cmmi']['program']['7']['grid'] = 8; $lang->block->default['cmmi']['program']['7']['params']['type'] = 'all'; $lang->block->default['cmmi']['program']['7']['params']['num'] = '15'; @@ -122,8 +127,8 @@ $lang->block->default['scrum']['program']['1']['title'] = '项目整体情况'; $lang->block->default['scrum']['program']['1']['block'] = 'scrumoverall'; $lang->block->default['scrum']['program']['1']['grid'] = 8; -$lang->block->default['scrum']['program']['2']['title'] = '进行中的' . $lang->projectCommon; -$lang->block->default['scrum']['program']['2']['block'] = 'scrumprogress'; +$lang->block->default['scrum']['program']['2']['title'] = $lang->projectCommon . '列表'; +$lang->block->default['scrum']['program']['2']['block'] = 'scrumlist'; $lang->block->default['scrum']['program']['2']['grid'] = 8; $lang->block->default['scrum']['program']['3']['title'] = $lang->productCommon . '路线图'; @@ -261,6 +266,7 @@ $lang->block->default['full']['my']['4']['grid'] = 8; $lang->block->default['full']['my']['5']['title'] = '个人贡献'; $lang->block->default['full']['my']['5']['block'] = 'contribute'; +$lang->block->default['full']['my']['5']['source'] = ''; $lang->block->default['full']['my']['5']['grid'] = 4; $lang->block->default['full']['my']['6']['title'] = '我的近期项目'; @@ -280,9 +286,10 @@ $lang->block->default['full']['my']['8']['title'] = '项目人力投入'; $lang->block->default['full']['my']['8']['block'] = 'programteam'; $lang->block->default['full']['my']['8']['grid'] = 8; -$lang->block->default['full']['my']['9']['title'] = '项目列表'; -$lang->block->default['full']['my']['9']['block'] = 'program'; -$lang->block->default['full']['my']['9']['grid'] = 8; +$lang->block->default['full']['my']['9']['title'] = '项目列表'; +$lang->block->default['full']['my']['9']['block'] = 'program'; +$lang->block->default['full']['my']['9']['source'] = 'program'; +$lang->block->default['full']['my']['9']['grid'] = 8; $lang->block->default['full']['my']['9']['params']['orderBy'] = 'id_desc'; $lang->block->default['full']['my']['9']['params']['num'] = '15'; @@ -314,16 +321,18 @@ $lang->block->moduleList['todo'] = '待办'; $lang->block->modules['program'] = new stdclass(); $lang->block->modules['program']->availableBlocks = new stdclass(); -$lang->block->modules['program']->availableBlocks->list = '项目列表'; +$lang->block->modules['program']->availableBlocks->program = '项目列表'; +$lang->block->modules['program']->availableBlocks->recentprogram = '近期项目'; +$lang->block->modules['program']->availableBlocks->statistic = '项目统计'; $lang->block->modules['scrum']['index'] = new stdclass(); $lang->block->modules['scrum']['index']->availableBlocks = new stdclass(); $lang->block->modules['scrum']['index']->availableBlocks->scrumoverall = '项目整体情况'; -$lang->block->modules['scrum']['index']->availableBlocks->scrumprogress = '进行中的' . $lang->projectCommon; -$lang->block->modules['scrum']['index']->availableBlocks->scrumproject = $lang->projectCommon . '总览'; -$lang->block->modules['scrum']['index']->availableBlocks->scrumproduct = $lang->productCommon . '总览'; +$lang->block->modules['scrum']['index']->availableBlocks->scrumlist = $lang->projectCommon . '列表'; +$lang->block->modules['scrum']['index']->availableBlocks->scrumproject = $lang->projectCommon . '总览'; +$lang->block->modules['scrum']['index']->availableBlocks->scrumproduct = $lang->productCommon . '总览'; $lang->block->modules['scrum']['index']->availableBlocks->scrumtest = '待测版本'; -$lang->block->modules['scrum']['index']->availableBlocks->scrumroadmap = $lang->productCommon . '路线图'; +$lang->block->modules['scrum']['index']->availableBlocks->scrumroadmap = $lang->productCommon . '路线图'; $lang->block->modules['cmmi']['index'] = new stdclass(); $lang->block->modules['cmmi']['index']->availableBlocks = new stdclass(); @@ -446,6 +455,11 @@ $lang->block->typeList->project['doing'] = '进行中'; $lang->block->typeList->project['all'] = '全部'; $lang->block->typeList->project['involved'] = '我参与的'; +$lang->block->typeList->scrum['undone'] = '未完成'; +$lang->block->typeList->scrum['doing'] = '进行中'; +$lang->block->typeList->scrum['all'] = '全部'; +$lang->block->typeList->scrum['involved'] = '我参与的'; + $lang->block->typeList->testtask['wait'] = '待测版本'; $lang->block->typeList->testtask['doing'] = '测试中版本'; $lang->block->typeList->testtask['blocked'] = '阻塞版本'; @@ -454,6 +468,18 @@ $lang->block->typeList->testtask['all'] = '全部'; $lang->block->modules['program']->moreLinkList = new stdclass(); $lang->block->modules['program']->moreLinkList->recentprogram = 'program|browse|'; +$lang->block->modules['program']->moreLinkList->statistic = 'program|browse|'; +$lang->block->modules['program']->moreLinkList->program = 'program|browse|'; +$lang->block->modules['program']->moreLinkList->cmmireport = 'weekly|index|'; +$lang->block->modules['program']->moreLinkList->cmmiestimate = 'workestimation|index|'; +$lang->block->modules['program']->moreLinkList->cmmiissue = 'issue|browse|'; +$lang->block->modules['program']->moreLinkList->cmmirisk = 'risk|browse|'; +$lang->block->modules['program']->moreLinkList->scrumlist = 'project|all|'; +$lang->block->modules['program']->moreLinkList->scrumroadmap = 'product|all|'; +$lang->block->modules['program']->moreLinkList->scrumtest = 'testtask|browse|'; +$lang->block->modules['program']->moreLinkList->scrumproduct = 'product|all|'; +$lang->block->modules['program']->moreLinkList->scrumproject = 'project|all|'; +$lang->block->modules['program']->moreLinkList->scrumdynamic = 'company|dynamic|'; $lang->block->modules['product']->moreLinkList = new stdclass(); $lang->block->modules['product']->moreLinkList->list = 'product|all|product=&line=0&status=%s'; diff --git a/module/block/model.php b/module/block/model.php index 17081018a1..726fa276af 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -59,6 +59,8 @@ class blockModel extends model unset($_SESSION['album'][$uid]); } + if(strpos($data->block, 'cmmi') !== false) $data->type = 'cmmi'; + if(strpos($data->block, 'scrum') !== false) $data->type = 'scrum'; $data->params = helper::jsonEncode($data->params); $this->dao->replace(TABLE_BLOCK)->data($data)->exec(); if(!dao::isError()) $this->loadModel('score')->create('block', 'set'); @@ -129,11 +131,12 @@ class blockModel extends model * @access public * @return void */ - public function getBlockList($module = 'my') + public function getBlockList($module = 'my', $type = '') { $blocks = $this->dao->select('*')->from(TABLE_BLOCK)->where('account')->eq($this->app->user->account) ->andWhere('module')->eq($module) ->andWhere('hidden')->eq(0) + ->beginIF($type)->andWhere('type')->eq($type)->fi() ->beginIF($this->config->global->flow == 'onlyStory')->andWhere('source')->notin('project,qa')->fi() ->beginIF($this->config->global->flow == 'onlyTask')->andWhere('source')->notin('product,qa')->fi() ->beginIF($this->config->global->flow == 'onlyTest')->andWhere('source')->notin('product,project')->fi() @@ -233,6 +236,7 @@ class blockModel extends model { $block['order'] = $index; $block['module'] = $module; + $block['type'] = $type; $block['account'] = $account; $block['params'] = isset($block['params']) ? helper::jsonEncode($block['params']) : ''; if(!isset($block['source'])) $block['source'] = $module; @@ -446,6 +450,26 @@ class blockModel extends model return json_encode($params); } + /** + * Get program params. + * + * @access public + * @return json + */ + public function getProgramParams() + { + $this->app->loadLang('program'); + $params->type['name'] = $this->lang->block->type; + $params->type['options'] = $this->lang->program->featureBar; + $params->type['control'] = 'select'; + + $params->orderBy['name'] = $this->lang->block->orderBy; + $params->orderBy['options'] = $this->lang->block->orderByList->product; + $params->orderBy['control'] = 'select'; + + return json_encode($this->onlyNumParams($params)); + } + /** * Get Build params. * @@ -547,6 +571,17 @@ class blockModel extends model return json_encode($params); } + /** + * Get recent program pararms. + * + * @access public + * @return string + */ + public function getRecentprogramParams() + { + return false; + } + /** * Get product overview pararms. * @@ -558,6 +593,102 @@ class blockModel extends model return false; } + /** + * Get cmmi program report pararms. + * + * @access public + * @return string + */ + public function getCmmireportParams() + { + return false; + } + + /** + * Get program estimate pararms. + * + * @access public + * @return string + */ + public function getCmmiestimateParams() + { + return false; + } + + /** + * Get program gantt pararms. + * + * @access public + * @return string + */ + public function getCmmiganttParams() + { + return false; + } + + /** + * Get program progress pararms. + * + * @access public + * @return string + */ + public function getCmmiprogressParams() + { + return false; + } + + /** + * Get cmmi issue params. + * + * @param string $module + * @access public + * @return void + */ + public function getCmmiissueParams($module = '') + { + $this->app->loadLang('issue'); + $params = new stdclass(); + $params->type['name'] = $this->lang->block->type; + $params->type['options'] = $this->lang->issue->labelList; + $params->type['control'] = 'select'; + + $params->num['name'] = $this->lang->block->num; + $params->num['default'] = 20; + $params->num['control'] = 'input'; + + $params->orderBy['name'] = $this->lang->block->orderBy; + $params->orderBy['options'] = $this->lang->block->orderByList->product; + $params->orderBy['control'] = 'select'; + + return json_encode($params); + } + + /** + * Get cmmi risk params. + * + * @param string $module▫ + * @access public + * @return void + */ + public function getCmmiriskParams($module = '') + { + $this->app->loadLang('risk'); + $params = new stdclass(); + $params->type['name'] = $this->lang->block->type; + $params->type['options'] = $this->lang->risk->featureBar['browse']; + $params->type['control'] = 'select'; + + $params->num['name'] = $this->lang->block->num; + $params->num['default'] = 20; + $params->num['control'] = 'input'; + + $params->orderBy['name'] = $this->lang->block->orderBy; + $params->orderBy['options'] = $this->lang->block->orderByList->product; + $params->orderBy['control'] = 'select'; + + return json_encode($params); + } + /** * Get project params. * @@ -713,40 +844,14 @@ class blockModel extends model return $key == $hash; } - /** - * Get cmmi issue params. - * - * @param string $module▫ - * @access public - * @return void - */ - public function getCmmiissueParams($module = '') - { - $this->app->loadLang('issue'); - $params = new stdclass(); - $params->type['name'] = $this->lang->block->type; - $params->type['options'] = $this->lang->issue->labelList; - $params->type['control'] = 'select'; - - $params->num['name'] = $this->lang->block->num; - $params->num['default'] = 20; - $params->num['control'] = 'input'; - - $params->orderBy['name'] = $this->lang->block->orderBy; - $params->orderBy['options'] = $this->lang->block->orderByList->product; - $params->orderBy['control'] = 'select'; - - return json_encode($params); - } - /** * Get testtask params. *▫ - * @param string $module▫ + * @param string $module * @access public * @return void */ - public function getScrumtestParams($module = '') + public function getScrumtestParams($module = '') { $params = new stdclass(); $params->type['name'] = $this->lang->block->type; @@ -760,4 +865,24 @@ class blockModel extends model return json_encode($params); } + /** + * Get scrum project list params. + *▫ + * @param string $module + * @access public + * @return void + */ + public function getScrumListParams($module = '') + { + $params = new stdclass(); + $params->type['name'] = $this->lang->block->type; + $params->type['options'] = $this->lang->block->typeList->scrum; + $params->type['control'] = 'select'; + + $params->num['name'] = $this->lang->block->num; + $params->num['default'] = 20; + $params->num['control'] = 'input'; + + return json_encode($params); + } } diff --git a/module/block/view/cmmiprogressblock.html.php b/module/block/view/cmmiprogressblock.html.php index 5524e45947..7bd7117587 100644 --- a/module/block/view/cmmiprogressblock.html.php +++ b/module/block/view/cmmiprogressblock.html.php @@ -1,10 +1,7 @@ +
+
diff --git a/module/block/view/contributeblock.html.php b/module/block/view/contribute.html.php similarity index 100% rename from module/block/view/contributeblock.html.php rename to module/block/view/contribute.html.php diff --git a/module/block/view/programteamblock.html.php b/module/block/view/programteamblock.html.php index e69de29bb2..3d863a5698 100644 --- a/module/block/view/programteamblock.html.php +++ b/module/block/view/programteamblock.html.php @@ -0,0 +1,24 @@ + +
block->emptyTip;?>
+ +
+ + + + + + + + + + + + + + + + + +
program->teamCount;?>task->consumed;?>
name;?>teamCount;?>consumed;?>
+
+ diff --git a/module/block/view/scrumprogressblock.html.php b/module/block/view/scrumlistblock.html.php similarity index 94% rename from module/block/view/scrumprogressblock.html.php rename to module/block/view/scrumlistblock.html.php index 639a763302..15da1f159d 100644 --- a/module/block/view/scrumprogressblock.html.php +++ b/module/block/view/scrumlistblock.html.php @@ -11,7 +11,7 @@ */ ?> -
" . $lang->project->create, '', "class='btn btn-primary' data-toggle='modal' data-type='ajax'")?>
+
" . $lang->project->create, '', "class='btn btn-primary'")?>
diff --git a/module/block/view/scrumproductblock.html.php b/module/block/view/scrumproductblock.html.php index 7f5ca07b58..f563a228a2 100644 --- a/module/block/view/scrumproductblock.html.php +++ b/module/block/view/scrumproductblock.html.php @@ -11,7 +11,7 @@ */ ?> -
" . $lang->project->create, '', "class='btn btn-primary' data-toggle='modal' data-type='ajax'")?>
+
" . $lang->product->create, '', "class='btn btn-primary'")?>
@@ -31,7 +31,7 @@ $viewLink = $this->createLink('product', 'browse', 'productID=' . $id); ?> > - + diff --git a/module/block/view/scrumtestblock.html.php b/module/block/view/scrumtestblock.html.php index 5cb099cef5..6b86a25809 100644 --- a/module/block/view/scrumtestblock.html.php +++ b/module/block/view/scrumtestblock.html.php @@ -35,14 +35,14 @@ $viewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}"); ?> > - + - + - + - + diff --git a/module/common/lang/menuOrder.php b/module/common/lang/menuOrder.php index 072136ce5b..45168c9199 100644 --- a/module/common/lang/menuOrder.php +++ b/module/common/lang/menuOrder.php @@ -33,7 +33,8 @@ $lang->my->menuOrder[75] = 'score'; $lang->todo->menuOrder = $lang->my->menuOrder; /* product menu order. */ -$lang->product->menuOrder[0] = 'plan'; +$lang->product->menuOrder[0] = 'plan'; +$lang->product->menuOrder[1] = 'requirement'; $lang->product->menuOrder[5] = 'story'; $lang->product->menuOrder[15] = 'release'; $lang->product->menuOrder[20] = 'roadmap'; diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php index 306de7d789..afcca0b570 100755 --- a/module/common/lang/zh-cn.php +++ b/module/common/lang/zh-cn.php @@ -1179,9 +1179,8 @@ $lang->cmmiproduct->menu->requirement = '用户需求|product|browse|product={PR $lang->cmmiproduct->menu->story = '软件需求|product|browse|product={PRODUCT}&branch=&browseType=unclosed&queryID=0&storyType=story'; $lang->cmmiproduct->menu->track = '跟踪矩阵|story|track|product={PRODUCT}'; -$lang->story->menu = $lang->cmmiproduct->menu; -$lang->milestone->menu = $lang->weekly->menu; -$lang->nc->menu = $lang->auditplan->menu; +$lang->milestone->menu = $lang->weekly->menu; +$lang->nc->menu = $lang->auditplan->menu; $lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'holiday', 'custom', 'auditcl', 'subject', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search'); $lang->haveMenuMethod = array('custom'); diff --git a/module/common/model.php b/module/common/model.php index f454284d65..6242fa2e32 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -2213,6 +2213,7 @@ EOD; { $lang->product->menu = $lang->cmmiproduct->menu; $lang->productplan->menu = $lang->cmmiproduct->menu; + $lang->story->menu = $lang->cmmiproduct->menu; $lang->$moduleName->menu = self::processMenuVars($lang->$moduleName->menu); } } diff --git a/module/design/config.php b/module/design/config.php index 7ce74a9c84..554a2866bd 100644 --- a/module/design/config.php +++ b/module/design/config.php @@ -9,22 +9,22 @@ $config->design->affectedFixedNum = 7; global $lang; $config->design->search['module'] = 'design'; $config->design->search['fields']['id'] = $lang->design->id; -$config->design->search['fields']['name'] = $lang->design->name; $config->design->search['fields']['type'] = $lang->design->type; +$config->design->search['fields']['name'] = $lang->design->name; $config->design->search['fields']['commit'] = $lang->design->submission; -$config->design->search['fields']['commitBy'] = $lang->design->commitBy; -$config->design->search['fields']['commitDate'] = $lang->design->commitDate; $config->design->search['fields']['createdBy'] = $lang->design->createdBy; $config->design->search['fields']['createdDate'] = $lang->design->createdDate; $config->design->search['fields']['assignedTo'] = $lang->design->assignedTo; +$config->design->search['fields']['commitBy'] = $lang->design->commitBy; +$config->design->search['fields']['commitDate'] = $lang->design->commitDate; $config->design->search['fields']['story'] = $lang->design->story; -$config->design->search['params']['name'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); $config->design->search['params']['type'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->design->typeList); +$config->design->search['params']['name'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); $config->design->search['params']['commit'] = array('operator' => 'include', 'control' => 'input', 'values' => ''); -$config->design->search['params']['commitBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); -$config->design->search['params']['commitDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->design->search['params']['createdBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); $config->design->search['params']['createdDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->design->search['params']['assignedTo'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); +$config->design->search['params']['commitBy'] = array('operator' => '=', 'control' => 'select', 'values' => 'users'); +$config->design->search['params']['commitDate'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date'); $config->design->search['params']['story'] = array('operator' => '=', 'control' => 'select', 'values' => ''); diff --git a/module/design/control.php b/module/design/control.php index 8b95ae0bd8..2dc9931925 100644 --- a/module/design/control.php +++ b/module/design/control.php @@ -220,7 +220,7 @@ class design extends control * @access public * @return void */ - public function commit($designID, $begin = '', $end = '', $recTotal = 0, $recPerPage = 50, $pageID = 1) + public function commit($designID, $repoID = 0, $begin = '', $end = '', $recTotal = 0, $recPerPage = 50, $pageID = 1) { $this->app->loadClass('pager', $static = true); $pager = new pager($recTotal, $recPerPage, $pageID); @@ -229,8 +229,10 @@ class design extends control $begin = $begin ? date('Y-m-d', strtotime($begin)) : $program->begin; $end = $end ? date('Y-m-d', strtotime($end)) : helper::today(); - $repoID = $this->session->repoID; + $repos = $this->loadModel('repo')->getRepoPairs(); + $repoID = $repoID ? $repoID : key($repos); $repo = $this->loadModel('repo')->getRepoByID($repoID); + $revisions = $this->repo->getCommits($repo, '', 'HEAD', '', $pager, $begin, $end); if($_POST) @@ -250,6 +252,7 @@ class design extends control $this->view->title = $this->lang->design->commit; $this->view->position[] = $this->lang->design->commit; + $this->view->repos = $repos; $this->view->repoID = $repoID; $this->view->repo = $repo; $this->view->revisions = $revisions; diff --git a/module/design/js/commit.js b/module/design/js/commit.js index 3d87736b51..53a1c9eb66 100644 --- a/module/design/js/commit.js +++ b/module/design/js/commit.js @@ -1,7 +1,8 @@ -$('#begin, #end').change(function() +$('#begin, #end, #repo').change(function() { var begin = $('#begin').val(); var end = $('#end').val(); + var repo = $('#repo').val(); if(begin.indexOf('-') != -1) { @@ -16,5 +17,5 @@ $('#begin, #end').change(function() for(i = 0 ; i < endarray.length ; i++) end = end + endarray[i]; } - location.href = createLink('design', 'commit', "designID=" + designID + '&begin=' + begin + '&end=' + end); + location.href = createLink('design', 'commit', "designID=" + designID + '&repoID=' + repo + '&begin=' + begin + '&end=' + end); }) diff --git a/module/design/view/browse.html.php b/module/design/view/browse.html.php index 3caa136bca..08c2796dc8 100644 --- a/module/design/view/browse.html.php +++ b/module/design/view/browse.html.php @@ -17,6 +17,7 @@ design->featureBar as $key => $label) { + if(empty($key)) continue; $active = $key == $type ? 'btn-active-text' : ''; $recTotalLabel = $key == $type ? " {$pager->recTotal}" : ''; echo html::a(inlink('browse', "productID={$productID}&type=$key"), "$label" . $recTotalLabel, '', "class='btn btn-link $active'"); diff --git a/module/design/view/commit.html.php b/module/design/view/commit.html.php index 1ee3f9c087..c194f9c363 100644 --- a/module/design/view/commit.html.php +++ b/module/design/view/commit.html.php @@ -20,10 +20,18 @@
name?>name?> productName?>productName?> projectName?>projectName?> buildName?>buildName?> testtask->statusList, $testtask->status)?>
+ + + + + +

repo->maintain . ': ';?>

+

design->commitDate . ':';?>

+ + ~ + +
method='post'> diff --git a/module/milestone/view/chart.html.php b/module/milestone/view/chart.html.php index 2b723de18f..6e20c5c912 100644 --- a/module/milestone/view/chart.html.php +++ b/module/milestone/view/chart.html.php @@ -1,35 +1,47 @@ -
-
-

milestone->chart->title;?>

-
+
+
+
+ +
-
project->workHour})";?>
-
-
PV
-
EV
-
AC
+
project->workHour})";?>
+
+ PV + EV + AC
+ diff --git a/module/milestone/view/index.html.php b/module/milestone/view/index.html.php index 3b1d4b87ab..b2fd81d9a7 100644 --- a/module/milestone/view/index.html.php +++ b/module/milestone/view/index.html.php @@ -11,7 +11,7 @@ table .btn.addItem, table .btn.delItem{padding: 3px 8px; font-size: 12px; line-h
- +
diff --git a/module/my/view/program.html.php b/module/my/view/program.html.php index a4a2e52c92..6f1cee7213 100644 --- a/module/my/view/program.html.php +++ b/module/my/view/program.html.php @@ -43,7 +43,7 @@
- + diff --git a/module/repo/view/revision.html.php b/module/repo/view/revision.html.php index f0080d1c7a..2482d0e98b 100644 --- a/module/repo/view/revision.html.php +++ b/module/repo/view/revision.html.php @@ -19,7 +19,7 @@ $typeInfo = $type == 'file' ? '&type=file' : ''; + + @@ -99,6 +101,20 @@ + + + + + diff --git a/module/weekly/control.php b/module/weekly/control.php index cd392a4b39..605ccc07ed 100644 --- a/module/weekly/control.php +++ b/module/weekly/control.php @@ -17,8 +17,9 @@ class weekly extends control $this->view->users = $this->loadModel('user')->getPairs('noletter'); } - public function index($program, $date = '') + public function index($program = 0, $date = '') { + $program = $program ? $program : $this->session->program; if(!$date) $date = helper::today(); $date = date('Y-m-d', strtotime($date)); diff --git a/module/weekly/model.php b/module/weekly/model.php index 5366dcfd2e..7e0937f656 100644 --- a/module/weekly/model.php +++ b/module/weekly/model.php @@ -110,7 +110,7 @@ class weeklyModel extends model if(!$date) $date = date('Y-m-d'); $monday = $this->getThisMonday($date); $sunday = $this->getThisSunday($date); - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program); $projectIdList = array_keys($projects); return $this->dao->select('count(distinct t1.account) as count') @@ -128,7 +128,7 @@ class weeklyModel extends model $monday = $this->getThisMonday($date); $sunday = $this->getThisSunday($date); - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program); $projectIdList = array_keys($projects); $tasks = $this->dao->select('*') @@ -148,7 +148,7 @@ class weeklyModel extends model $sunday = $this->getThisSunday($date); $nextMonday = date('Y-m-d', strtotime("$sunday +1 days")); - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program); $projectIdList = array_keys($projects); $unFinished = $this->dao->select('*') ->from(TABLE_TASK) @@ -177,7 +177,7 @@ class weeklyModel extends model $nextMonday = date('Y-m-d', strtotime("$sunday +1 days")); $sencondMondy = date('Y-m-d', strtotime("$sunday +8 days")); - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program); $projectIdList = array_keys($projects); $tasks = $this->dao->select('*') @@ -197,7 +197,7 @@ class weeklyModel extends model $nextMonday = date('Y-m-d', strtotime("$sunday +1 days")); $sencondMondy = date('Y-m-d', strtotime("$sunday +8 days")); - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program); $projectIdList = array_keys($projects); return $this->dao->select('type, sum(cast(estimate as decimal(10,2))) as workload') @@ -213,7 +213,7 @@ class weeklyModel extends model $monday = $this->getThisMonday($date); $nextMonday = date('Y-m-d', strtotime("$monday +7 days")); - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program); $projectIdList = array_keys($projects); return $this->dao->select('*') @@ -237,7 +237,7 @@ class weeklyModel extends model $nextMonday = date('Y-m-d', strtotime("$sunday +1 days")); $workdays = $this->loadModel('holiday')->getActualWorkingDays($monday, $sunday); - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program->id); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program->id); $projectIdList = array_keys($projects); $tasks = $this->dao->select('*')->from(TABLE_TASK) @@ -269,7 +269,7 @@ class weeklyModel extends model $report = $this->getFromDB($program, $date); if(!empty($report)) return $report->ev; - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program); $projectIdList = array_keys($projects); if(!$date) $date = date('Y-m-d'); @@ -310,7 +310,7 @@ class weeklyModel extends model $monday = $this->getThisMonday($date); $nextMonday = date('Y-m-d', strtotime("$monday +7 days")); - $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $type = 'project', $program); + $projects = $this->loadModel('project')->getList($status = 'all', $limit = 0, $productID = 0, $branch = 0, $program); $projectIdList = array_keys($projects); $AC = $this->dao->select('sum(t1.consumed) as consumed') diff --git a/module/workestimation/control.php b/module/workestimation/control.php index c1b8fcb02f..f5151fd211 100644 --- a/module/workestimation/control.php +++ b/module/workestimation/control.php @@ -11,8 +11,9 @@ */ class workestimation extends control { - public function index($program) + public function index($program = 0) { + $program = $program ? $program : $this->session->program; if($_POST) { $result = $this->workestimation->save($program);
id;?> code;?>createLink('program', 'index', "programID=$program->id"), $program->name);?>createLink('program', 'index', "programID=$program->id", '', '', $program->id), $program->name);?> begin;?> end;?> diff --git a/module/product/js/browse.js b/module/product/js/browse.js index 095bd1e2a0..40326da473 100644 --- a/module/product/js/browse.js +++ b/module/product/js/browse.js @@ -1,5 +1,8 @@ $(function() { + $('#subNavbar .nav li').removeClass('active'); + $("#subNavbar .nav li[data-id=" + storyType + ']').addClass('active'); + if($('#storyList thead th.c-title').width() < 150) $('#storyList thead th.c-title').width(150); $('#storyList td.has-child .story-toggle').each(function() { diff --git a/module/product/view/browse.html.php b/module/product/view/browse.html.php index 6d52f38860..f5aa3b4af6 100644 --- a/module/product/view/browse.html.php +++ b/module/product/view/browse.html.php @@ -23,6 +23,8 @@ $config->product->browse->unfoldID = zget($config->product->browse->unfoldID, $p js::set('unfoldID', $config->product->browse->unfoldID); js::set('unfoldAll', $lang->project->treeLevel['all']); js::set('foldAll', $lang->project->treeLevel['root']); +js::set('storyType', $storyType); +$lang->story->create = $storyType == 'story' ? $lang->story->createStory : $lang->story->createRequirement; ?> diff --git a/module/program/control.php b/module/program/control.php index 8d1324b6e9..f1ae020a78 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -697,7 +697,7 @@ class program extends control public function ajaxGetDropMenu($programID, $module, $method, $extra) { $this->loadModel('project'); - $this->view->link = $this->createLink('program', 'index', "programID=$programID"); + $this->view->link = $this->createLink('program', 'index', "programID=$programID", '', '', $programID); $this->view->programID = $programID; $this->view->module = $module; $this->view->method = $method; diff --git a/module/program/view/browsebygrid.html.php b/module/program/view/browsebygrid.html.php index 0e82d8ce78..5934b4a48d 100644 --- a/module/program/view/browsebygrid.html.php +++ b/module/program/view/browsebygrid.html.php @@ -2,7 +2,7 @@
$program):?>
-
id");?>'> +
id", '', '', $program->id);?>'>
name;?> template === 'cmmi'): ?> diff --git a/module/program/view/browsebylist.html.php b/module/program/view/browsebylist.html.php index 7d7c5a6e40..07c63c163d 100644 --- a/module/program/view/browsebylist.html.php +++ b/module/program/view/browsebylist.html.php @@ -28,7 +28,7 @@
code;?> - id"), $program->name);?> + createLink('program', 'index', "programID=$program->id", '', '', $program->id), $program->name);?> project->statusList, $program->status, '');?> begin;?>
story->planAB;?> @@ -88,6 +89,7 @@
story->reviewedBy;?> PO : '', "class='form-control chosen'");?> +
+
+
story->source;?>
+ story->sourceList, $source, "class='form-control chosen'");?> + story->sourceNote;?> + +
+
+
story->title;?>