diff --git a/module/block/control.php b/module/block/control.php index a8f6cb432b..db45cccc07 100644 --- a/module/block/control.php +++ b/module/block/control.php @@ -111,10 +111,10 @@ class block extends control $this->view->params = json_decode($params, true); } - $this->view->source = $source; - $this->view->type = $type; - $this->view->id = $id; - $this->view->block = ($block) ? $block : array(); + $this->view->source = $source; + $this->view->type = $type; + $this->view->id = $id; + $this->view->block = ($block) ? $block : array(); $this->display(); } @@ -621,7 +621,7 @@ class block extends control /** * Print releases block. - * + * * @access public * @return void */ @@ -642,7 +642,7 @@ class block extends control /** * Print Build block. - * + * * @access public * @return void */ @@ -687,6 +687,147 @@ class block extends control $this->view->productStats = $productStats; } + /** + * Print report block. + * + * @access public + * @return void + */ + public function printReportBlock() + { + if(!empty($this->params->type) and preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die(); + + $status = isset($this->params->type) ? $this->params->type : ''; + $orderBy = isset($this->params->type) ? $this->params->orderBy : 'id_asc'; + + /* Get products. */ + $products = $this->loadModel('product')->getList($status); + foreach($products as $productID => $product) + { + if(!$this->product->checkPriv($product)) unset($products[$productID]); + } + $productIDList = array_keys($products); + if(!$productIDList) + { + $this->view->products = $products; + return false; + } + $products = $this->dao->select('*')->from(TABLE_PRODUCT) + ->where('id')->in($productIDList) + ->orderBy($orderBy) + ->fetchAll('id'); + + /* Get stories. */ + $stories = $this->dao->select('product, stage, COUNT(status) AS count') + ->from(TABLE_STORY) + ->where('deleted')->eq(0) + ->andWhere('product')->in($productIDList) + ->groupBy('product, stage') + ->fetchGroup('product', 'stage'); + /* Padding the stories to sure all status have records. */ + foreach($stories as $product => $story) + { + foreach(array_keys($this->lang->story->stageList) as $stage) + { + $story[$stage] = isset($story[$stage]) ? $story[$stage]->count : 0; + } + $stories[$product] = $story; + } + + /* Get plans. */ + $plans = $this->dao->select('product, end')->from(TABLE_PRODUCTPLAN) + ->where('deleted')->eq(0) + ->andWhere('product')->in($productIDList) + ->fetchGroup('product'); + foreach($plans as $product => $productPlans) + { + $expired = 0; + $unexpired = 0; + + foreach($productPlans as $plan) + { + if($plan->end < helper::today()) $expired++; + if($plan->end >= helper::today()) $unexpired++; + } + + $plan = new stdclass; + $plan->expired = $expired; + $plan->unexpired = $unexpired; + + $plans[$product] = $plan; + } + + /* Get projects. */ + $projects = $this->dao->select('t1.product, t2.status, t2.end')->from(TABLE_PROJECTPRODUCT)->alias('t1') + ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id') + ->where('t1.product')->in($productIDList) + ->andWhere('t2.deleted')->eq(0) + ->fetchGroup('product'); + foreach($projects as $product => $productProjects) + { + $doing = 0; + $done = 0; + $delay = 0; + + foreach($productProjects as $project) + { + if($project->status == 'doing') $doing++; + if($project->status == 'done' or $project->status == 'closed') $done++; + if($project->status != 'done' && $project->status != 'closed' && $project->status != 'suspended' && $project->end < helper::today()) $delay++; + } + + $project = new stdclass(); + $project->doing = $doing; + $project->done = $done; + $project->delay = $delay; + + $projects[$product] = $project; + } + + /* Get releases. */ + $releases = $this->dao->select('product, COUNT(*) AS count') + ->from(TABLE_RELEASE) + ->where('deleted')->eq(0) + ->andWhere('product')->in($productIDList) + ->groupBy('product') + ->fetchPairs(); + + foreach($products as $productID => $product) + { + $product->stories = isset($stories[$productID]) ? $stories[$productID] : 0; + $product->plans = isset($plans[$productID]) ? $plans[$productID] : 0; + $product->projects = isset($projects[$productID]) ? $projects[$productID] : 0; + $product->releases = isset($releases[$productID]) ? $releases[$productID] : 0; + } + + $this->view->products = $products; + } + + /** + * Print overview block. + * + * @access public + * @return void + */ + public function printOverviewBlock() + { + $normal = 0; + $closed = 0; + + $products = $this->loadModel('product')->getList(); + foreach($products as $product) + { + if(!$this->product->checkPriv($product)) continue; + + if($product->status == 'normal') $normal++; + if($product->status == 'closed') $closed++; + } + + $this->view->total = $normal + $closed; + $this->view->normal = $normal; + $this->view->closed = $closed; + } + /** * Print project block. * diff --git a/module/block/lang/en.php b/module/block/lang/en.php index 5c890c4459..8493ae604f 100644 --- a/module/block/lang/en.php +++ b/module/block/lang/en.php @@ -16,13 +16,13 @@ $lang->block->style = 'Style'; $lang->block->grid = 'Grid'; $lang->block->color = 'Color'; -$lang->block->account = 'Account'; -$lang->block->module = 'Module'; -$lang->block->title = 'Title'; -$lang->block->source = 'Source module'; -$lang->block->block = 'Source block'; -$lang->block->order = 'Order'; -$lang->block->height = 'Height'; +$lang->block->account = 'Account'; +$lang->block->module = 'Module'; +$lang->block->title = 'Title'; +$lang->block->source = 'Source module'; +$lang->block->block = 'Source block'; +$lang->block->order = 'Order'; +$lang->block->height = 'Height'; $lang->block->lblModule = 'Module'; $lang->block->lblBlock = 'Block'; @@ -56,20 +56,31 @@ $lang->block->refresh = 'Refresh'; $lang->block->hidden = 'Hide'; $lang->block->dynamicInfo = "%s, %s %s %s %s"; -$lang->block->default['product']['1']['title'] = 'Open ' . $lang->productCommon . 's'; -$lang->block->default['product']['1']['block'] = 'list'; +$lang->block->default['product']['1']['title'] = $lang->productCommon . ' Report'; +$lang->block->default['product']['1']['block'] = 'report'; $lang->block->default['product']['1']['grid'] = 8; -$lang->block->default['product']['1']['params']['num'] = 15; -$lang->block->default['product']['1']['params']['type'] = 'noclosed'; +$lang->block->default['product']['1']['params']['orderBy'] = 'id_desc'; +$lang->block->default['product']['1']['params']['type'] = 'noclosed'; -$lang->block->default['product']['2']['title'] = 'My Stories'; -$lang->block->default['product']['2']['block'] = 'story'; +$lang->block->default['product']['2']['title'] = $lang->productCommon . ' Overview'; +$lang->block->default['product']['2']['block'] = 'overview'; $lang->block->default['product']['2']['grid'] = 4; -$lang->block->default['product']['2']['params']['num'] = 15; -$lang->block->default['product']['2']['params']['orderBy'] = 'id_desc'; -$lang->block->default['product']['2']['params']['type'] = 'assignedTo'; +$lang->block->default['product']['3']['title'] = 'Open ' . $lang->productCommon . 's'; +$lang->block->default['product']['3']['block'] = 'list'; +$lang->block->default['product']['3']['grid'] = 8; + +$lang->block->default['product']['3']['params']['num'] = 15; +$lang->block->default['product']['3']['params']['type'] = 'noclosed'; + +$lang->block->default['product']['4']['title'] = 'My Stories'; +$lang->block->default['product']['4']['block'] = 'story'; +$lang->block->default['product']['4']['grid'] = 4; + +$lang->block->default['product']['4']['params']['num'] = 15; +$lang->block->default['product']['4']['params']['orderBy'] = 'id_desc'; +$lang->block->default['product']['4']['params']['type'] = 'assignedTo'; $lang->block->default['project']['1']['title'] = 'Active ' . $lang->projectCommon . 's'; $lang->block->default['project']['1']['block'] = 'list'; @@ -187,9 +198,9 @@ $lang->block->default['onlyTask']['my']['4'] = $lang->block->default['project'][ $lang->block->default['onlyTask']['my']['4']['source'] = 'project'; $lang->block->default['onlyTask']['my']['4']['grid'] = 6; -$lang->block->num = 'Number'; -$lang->block->type = 'Type'; -$lang->block->orderBy = 'Order by'; +$lang->block->num = 'Number'; +$lang->block->type = 'Type'; +$lang->block->orderBy = 'Order by'; $lang->block->availableBlocks = new stdclass(); @@ -212,16 +223,18 @@ $lang->block->moduleList['todo'] = 'Todo'; $lang->block->modules['product'] = new stdclass(); $lang->block->modules['product']->availableBlocks = new stdclass(); -$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . 'List'; -$lang->block->modules['product']->availableBlocks->story = 'Stories'; -$lang->block->modules['product']->availableBlocks->plan = 'Plans'; -$lang->block->modules['product']->availableBlocks->release = 'Releases'; +$lang->block->modules['product']->availableBlocks->report = $lang->productCommon . ' Report'; +$lang->block->modules['product']->availableBlocks->overview = $lang->productCommon . ' Overview'; +$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . 'List'; +$lang->block->modules['product']->availableBlocks->story = 'Stories'; +$lang->block->modules['product']->availableBlocks->plan = 'Plans'; +$lang->block->modules['product']->availableBlocks->release = 'Releases'; $lang->block->modules['project'] = new stdclass(); $lang->block->modules['project']->availableBlocks = new stdclass(); $lang->block->modules['project']->availableBlocks->list = $lang->projectCommon . 'List'; $lang->block->modules['project']->availableBlocks->task = 'Tasks'; $lang->block->modules['project']->availableBlocks->build = 'Builds'; -$lang->block->modules['qa'] = new stdclass(); +$lang->block->modules['qa'] = new stdclass(); $lang->block->modules['qa']->availableBlocks = new stdclass(); $lang->block->modules['qa']->availableBlocks->bug = 'Bugs'; $lang->block->modules['qa']->availableBlocks->case = 'Cases'; @@ -232,6 +245,12 @@ $lang->block->modules['todo']->availableBlocks->list = 'Todo'; $lang->block->orderByList = new stdclass(); +$lang->block->orderByList->product = array(); +$lang->block->orderByList->product['id_asc'] = 'ID Ascending'; +$lang->block->orderByList->product['id_desc'] = 'ID Descending'; +$lang->block->orderByList->product['status_asc'] = 'Status Ascending'; +$lang->block->orderByList->product['status_desc'] = 'Status Descending'; + $lang->block->orderByList->task = array(); $lang->block->orderByList->task['id_asc'] = 'ID Ascending'; $lang->block->orderByList->task['id_desc'] = 'ID Descending'; @@ -253,20 +272,20 @@ $lang->block->orderByList->bug['severity_asc'] = 'Severity Ascending'; $lang->block->orderByList->bug['severity_desc'] = 'Severity Descending'; $lang->block->orderByList->case = array(); -$lang->block->orderByList->case['id_asc'] = 'ID Ascending'; -$lang->block->orderByList->case['id_desc'] = 'ID Descending'; -$lang->block->orderByList->case['pri_asc'] = 'Priority Ascending'; -$lang->block->orderByList->case['pri_desc'] = 'Priority Descending'; +$lang->block->orderByList->case['id_asc'] = 'ID Ascending'; +$lang->block->orderByList->case['id_desc'] = 'ID Descending'; +$lang->block->orderByList->case['pri_asc'] = 'Priority Ascending'; +$lang->block->orderByList->case['pri_desc'] = 'Priority Descending'; $lang->block->orderByList->story = array(); -$lang->block->orderByList->story['id_asc'] = 'ID Ascending'; -$lang->block->orderByList->story['id_desc'] = 'ID Descending'; -$lang->block->orderByList->story['pri_asc'] = 'Priority Ascending'; -$lang->block->orderByList->story['pri_desc'] = 'Priority Descending'; -$lang->block->orderByList->story['status_asc'] = 'Status Ascending'; -$lang->block->orderByList->story['status_desc'] = 'Status Descending'; -$lang->block->orderByList->story['stage_asc'] = 'Stage Ascending'; -$lang->block->orderByList->story['stage_desc'] = 'Stage Descending'; +$lang->block->orderByList->story['id_asc'] = 'ID Ascending'; +$lang->block->orderByList->story['id_desc'] = 'ID Descending'; +$lang->block->orderByList->story['pri_asc'] = 'Priority Ascending'; +$lang->block->orderByList->story['pri_desc'] = 'Priority Descending'; +$lang->block->orderByList->story['status_asc'] = 'Status Ascending'; +$lang->block->orderByList->story['status_desc'] = 'Status Descending'; +$lang->block->orderByList->story['stage_asc'] = 'Stage Ascending'; +$lang->block->orderByList->story['stage_desc'] = 'Stage Descending'; $lang->block->todoNum = 'Todo Number'; $lang->block->taskNum = 'Task Number'; @@ -310,8 +329,8 @@ $lang->block->typeList->testtask['done'] = 'Done'; $lang->block->typeList->testtask['all'] = 'All'; $lang->block->modules['product']->moreLinkList = new stdclass(); -$lang->block->modules['product']->moreLinkList->list = 'product|all|product=&status=%s'; -$lang->block->modules['product']->moreLinkList->story = 'my|story|type=%s'; +$lang->block->modules['product']->moreLinkList->list = 'product|all|product=&status=%s'; +$lang->block->modules['product']->moreLinkList->story = 'my|story|type=%s'; $lang->block->modules['project']->moreLinkList = new stdclass(); $lang->block->modules['project']->moreLinkList->list = 'project|all|status=%s&project='; $lang->block->modules['project']->moreLinkList->task = 'my|task|type=%s'; @@ -334,7 +353,7 @@ $lang->block->gridOptions[8] = 'Left'; $lang->block->gridOptions[4] = 'Right'; $lang->block->flowchart = array(); -$lang->block->flowchart[] = array('Administration', 'Manage a Company', 'Add Users', 'Maintain Privileges'); +$lang->block->flowchart[] = array('Administration', 'Manage a Company', 'Add Users', 'Maintain Privileges'); $lang->block->flowchart[] = array($lang->productCommon . ' Manager', 'Add ' . $lang->productCommon, 'Maintain Modules', 'Maintain Plans', 'Maintain Stories', 'Create Release'); $lang->block->flowchart[] = array($lang->projectCommon . ' Manager', 'Add ' . $lang->projectCommon, 'Maintain Teams', 'Link ' . $lang->productCommon . 's', 'Link Stories', 'Decompose Tasks'); $lang->block->flowchart[] = array('DEV Team', 'Claim Tasks/Bugs', 'Update Status', 'Finish Tasks/Bugs'); diff --git a/module/block/lang/zh-cn.php b/module/block/lang/zh-cn.php index 0b6466a6a2..19864c430d 100644 --- a/module/block/lang/zh-cn.php +++ b/module/block/lang/zh-cn.php @@ -16,13 +16,13 @@ $lang->block->style = '外观'; $lang->block->grid = '位置'; $lang->block->color = '颜色'; -$lang->block->account = '所属用户'; -$lang->block->module = '所属模块'; -$lang->block->title = '区块名称'; -$lang->block->source = '来源模块'; -$lang->block->block = '来源区块'; -$lang->block->order = '排序'; -$lang->block->height = '高度'; +$lang->block->account = '所属用户'; +$lang->block->module = '所属模块'; +$lang->block->title = '区块名称'; +$lang->block->source = '来源模块'; +$lang->block->block = '来源区块'; +$lang->block->order = '排序'; +$lang->block->height = '高度'; $lang->block->lblModule = '模块'; $lang->block->lblBlock = '区块'; @@ -56,20 +56,31 @@ $lang->block->refresh = '刷新'; $lang->block->hidden = '隐藏'; $lang->block->dynamicInfo = "%s, %s %s %s %s"; -$lang->block->default['product']['1']['title'] = '未关闭的' . $lang->productCommon; -$lang->block->default['product']['1']['block'] = 'list'; +$lang->block->default['product']['1']['title'] = $lang->productCommon . '统计'; +$lang->block->default['product']['1']['block'] = 'report'; $lang->block->default['product']['1']['grid'] = 8; -$lang->block->default['product']['1']['params']['num'] = 15; -$lang->block->default['product']['1']['params']['type'] = 'noclosed'; +$lang->block->default['product']['1']['params']['orderBy'] = 'id_desc'; +$lang->block->default['product']['1']['params']['type'] = 'noclosed'; -$lang->block->default['product']['2']['title'] = '指派给我的需求'; -$lang->block->default['product']['2']['block'] = 'story'; +$lang->block->default['product']['2']['title'] = $lang->productCommon . '总览'; +$lang->block->default['product']['2']['block'] = 'overview'; $lang->block->default['product']['2']['grid'] = 4; -$lang->block->default['product']['2']['params']['num'] = 15; -$lang->block->default['product']['2']['params']['orderBy'] = 'id_desc'; -$lang->block->default['product']['2']['params']['type'] = 'assignedTo'; +$lang->block->default['product']['3']['title'] = '未关闭的' . $lang->productCommon; +$lang->block->default['product']['3']['block'] = 'list'; +$lang->block->default['product']['3']['grid'] = 8; + +$lang->block->default['product']['3']['params']['num'] = 15; +$lang->block->default['product']['3']['params']['type'] = 'noclosed'; + +$lang->block->default['product']['4']['title'] = '指派给我的需求'; +$lang->block->default['product']['4']['block'] = 'story'; +$lang->block->default['product']['4']['grid'] = 4; + +$lang->block->default['product']['4']['params']['num'] = 15; +$lang->block->default['product']['4']['params']['orderBy'] = 'id_desc'; +$lang->block->default['product']['4']['params']['type'] = 'assignedTo'; $lang->block->default['project']['1']['title'] = '进行中的' . $lang->projectCommon; $lang->block->default['project']['1']['block'] = 'list'; @@ -187,9 +198,9 @@ $lang->block->default['onlyTask']['my']['4'] = $lang->block->default['project'][ $lang->block->default['onlyTask']['my']['4']['source'] = 'project'; $lang->block->default['onlyTask']['my']['4']['grid'] = 6; -$lang->block->num = '数量'; -$lang->block->type = '类型'; -$lang->block->orderBy = '排序'; +$lang->block->num = '数量'; +$lang->block->type = '类型'; +$lang->block->orderBy = '排序'; $lang->block->availableBlocks = new stdclass(); @@ -212,16 +223,18 @@ $lang->block->moduleList['todo'] = '待办'; $lang->block->modules['product'] = new stdclass(); $lang->block->modules['product']->availableBlocks = new stdclass(); -$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . '列表'; -$lang->block->modules['product']->availableBlocks->story = '需求列表'; -$lang->block->modules['product']->availableBlocks->plan = '计划列表'; -$lang->block->modules['product']->availableBlocks->release = '发布列表'; +$lang->block->modules['product']->availableBlocks->report = $lang->productCommon . '统计'; +$lang->block->modules['product']->availableBlocks->overview = $lang->productCommon . '总览'; +$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . '列表'; +$lang->block->modules['product']->availableBlocks->story = '需求列表'; +$lang->block->modules['product']->availableBlocks->plan = '计划列表'; +$lang->block->modules['product']->availableBlocks->release = '发布列表'; $lang->block->modules['project'] = new stdclass(); $lang->block->modules['project']->availableBlocks = new stdclass(); $lang->block->modules['project']->availableBlocks->list = $lang->projectCommon . '列表'; $lang->block->modules['project']->availableBlocks->task = '任务列表'; $lang->block->modules['project']->availableBlocks->build = '版本列表'; -$lang->block->modules['qa'] = new stdclass(); +$lang->block->modules['qa'] = new stdclass(); $lang->block->modules['qa']->availableBlocks = new stdclass(); $lang->block->modules['qa']->availableBlocks->bug = 'Bug列表'; $lang->block->modules['qa']->availableBlocks->case = '用例列表'; @@ -232,6 +245,12 @@ $lang->block->modules['todo']->availableBlocks->list = '待办列表'; $lang->block->orderByList = new stdclass(); +$lang->block->orderByList->product = array(); +$lang->block->orderByList->product['id_asc'] = 'ID 递增'; +$lang->block->orderByList->product['id_desc'] = 'ID 递减'; +$lang->block->orderByList->product['status_asc'] = '状态正序'; +$lang->block->orderByList->product['status_desc'] = '状态倒序'; + $lang->block->orderByList->task = array(); $lang->block->orderByList->task['id_asc'] = 'ID 递增'; $lang->block->orderByList->task['id_desc'] = 'ID 递减'; @@ -253,20 +272,20 @@ $lang->block->orderByList->bug['severity_asc'] = '级别递增'; $lang->block->orderByList->bug['severity_desc'] = '级别递减'; $lang->block->orderByList->case = array(); -$lang->block->orderByList->case['id_asc'] = 'ID 递增'; -$lang->block->orderByList->case['id_desc'] = 'ID 递减'; -$lang->block->orderByList->case['pri_asc'] = '优先级递增'; -$lang->block->orderByList->case['pri_desc'] = '优先级递减'; +$lang->block->orderByList->case['id_asc'] = 'ID 递增'; +$lang->block->orderByList->case['id_desc'] = 'ID 递减'; +$lang->block->orderByList->case['pri_asc'] = '优先级递增'; +$lang->block->orderByList->case['pri_desc'] = '优先级递减'; $lang->block->orderByList->story = array(); -$lang->block->orderByList->story['id_asc'] = 'ID 递增'; -$lang->block->orderByList->story['id_desc'] = 'ID 递减'; -$lang->block->orderByList->story['pri_asc'] = '优先级递增'; -$lang->block->orderByList->story['pri_desc'] = '优先级递减'; -$lang->block->orderByList->story['status_asc'] = '状态正序'; -$lang->block->orderByList->story['status_desc'] = '状态倒序'; -$lang->block->orderByList->story['stage_asc'] = '阶段正序'; -$lang->block->orderByList->story['stage_desc'] = '阶段倒序'; +$lang->block->orderByList->story['id_asc'] = 'ID 递增'; +$lang->block->orderByList->story['id_desc'] = 'ID 递减'; +$lang->block->orderByList->story['pri_asc'] = '优先级递增'; +$lang->block->orderByList->story['pri_desc'] = '优先级递减'; +$lang->block->orderByList->story['status_asc'] = '状态正序'; +$lang->block->orderByList->story['status_desc'] = '状态倒序'; +$lang->block->orderByList->story['stage_asc'] = '阶段正序'; +$lang->block->orderByList->story['stage_desc'] = '阶段倒序'; $lang->block->todoNum = '待办数'; $lang->block->taskNum = '任务数'; @@ -310,11 +329,11 @@ $lang->block->typeList->testtask['done'] = '已测版本'; $lang->block->typeList->testtask['all'] = '全部'; $lang->block->modules['product']->moreLinkList = new stdclass(); -$lang->block->modules['product']->moreLinkList->list = 'product|all|product=&status=%s'; -$lang->block->modules['product']->moreLinkList->story = 'my|story|type=%s'; +$lang->block->modules['product']->moreLinkList->list = 'product|all|product=&status=%s'; +$lang->block->modules['product']->moreLinkList->story = 'my|story|type=%s'; $lang->block->modules['project']->moreLinkList = new stdclass(); -$lang->block->modules['project']->moreLinkList->list = 'project|all|status=%s&project='; -$lang->block->modules['project']->moreLinkList->task = 'my|task|type=%s'; +$lang->block->modules['project']->moreLinkList->list = 'project|all|status=%s&project='; +$lang->block->modules['project']->moreLinkList->task = 'my|task|type=%s'; $lang->block->modules['qa']->moreLinkList = new stdclass(); $lang->block->modules['qa']->moreLinkList->bug = 'my|bug|type=%s'; $lang->block->modules['qa']->moreLinkList->case = 'my|testcase|type=%s'; @@ -334,7 +353,7 @@ $lang->block->gridOptions[8] = '左侧'; $lang->block->gridOptions[4] = '右侧'; $lang->block->flowchart = array(); -$lang->block->flowchart[] = array('管理员', '维护公司', '添加用户', '维护权限'); +$lang->block->flowchart[] = array('管理员', '维护公司', '添加用户', '维护权限'); $lang->block->flowchart[] = array($lang->productCommon . '经理', '创建' . $lang->productCommon, '维护模块', '维护计划', '维护需求', '创建发布'); $lang->block->flowchart[] = array($lang->projectCommon . '经理', '创建' . $lang->projectCommon, '维护团队', '关联' . $lang->productCommon, '关联需求', '分解任务'); $lang->block->flowchart[] = array('研发人员', '领取任务和Bug', '更新状态', '完成任务和Bug'); diff --git a/module/block/lang/zh-tw.php b/module/block/lang/zh-tw.php index c675271ed0..f0d3f7f8d2 100644 --- a/module/block/lang/zh-tw.php +++ b/module/block/lang/zh-tw.php @@ -16,13 +16,13 @@ $lang->block->style = '外觀'; $lang->block->grid = '位置'; $lang->block->color = '顏色'; -$lang->block->account = '所屬用戶'; -$lang->block->module = '所屬模組'; -$lang->block->title = '區塊名稱'; -$lang->block->source = '來源模組'; -$lang->block->block = '來源區塊'; -$lang->block->order = '排序'; -$lang->block->height = '高度'; +$lang->block->account = '所屬用戶'; +$lang->block->module = '所屬模組'; +$lang->block->title = '區塊名稱'; +$lang->block->source = '來源模組'; +$lang->block->block = '來源區塊'; +$lang->block->order = '排序'; +$lang->block->height = '高度'; $lang->block->lblModule = '模組'; $lang->block->lblBlock = '區塊'; @@ -56,20 +56,31 @@ $lang->block->refresh = '刷新'; $lang->block->hidden = '隱藏'; $lang->block->dynamicInfo = "%s, %s %s %s %s"; -$lang->block->default['product']['1']['title'] = '未關閉的' . $lang->productCommon; -$lang->block->default['product']['1']['block'] = 'list'; +$lang->block->default['product']['1']['title'] = $lang->productCommon . '統計'; +$lang->block->default['product']['1']['block'] = 'report'; $lang->block->default['product']['1']['grid'] = 8; -$lang->block->default['product']['1']['params']['num'] = 15; -$lang->block->default['product']['1']['params']['type'] = 'noclosed'; +$lang->block->default['product']['1']['params']['orderBy'] = 'id_desc'; +$lang->block->default['product']['1']['params']['type'] = 'noclosed'; -$lang->block->default['product']['2']['title'] = '指派給我的需求'; -$lang->block->default['product']['2']['block'] = 'story'; +$lang->block->default['product']['2']['title'] = $lang->productCommon . '總覽'; +$lang->block->default['product']['2']['block'] = 'overview'; $lang->block->default['product']['2']['grid'] = 4; -$lang->block->default['product']['2']['params']['num'] = 15; -$lang->block->default['product']['2']['params']['orderBy'] = 'id_desc'; -$lang->block->default['product']['2']['params']['type'] = 'assignedTo'; +$lang->block->default['product']['3']['title'] = '未關閉的' . $lang->productCommon; +$lang->block->default['product']['3']['block'] = 'list'; +$lang->block->default['product']['3']['grid'] = 8; + +$lang->block->default['product']['3']['params']['num'] = 15; +$lang->block->default['product']['3']['params']['type'] = 'noclosed'; + +$lang->block->default['product']['4']['title'] = '指派給我的需求'; +$lang->block->default['product']['4']['block'] = 'story'; +$lang->block->default['product']['4']['grid'] = 4; + +$lang->block->default['product']['4']['params']['num'] = 15; +$lang->block->default['product']['4']['params']['orderBy'] = 'id_desc'; +$lang->block->default['product']['4']['params']['type'] = 'assignedTo'; $lang->block->default['project']['1']['title'] = '進行中的' . $lang->projectCommon; $lang->block->default['project']['1']['block'] = 'list'; @@ -187,9 +198,9 @@ $lang->block->default['onlyTask']['my']['4'] = $lang->block->default['project'][ $lang->block->default['onlyTask']['my']['4']['source'] = 'project'; $lang->block->default['onlyTask']['my']['4']['grid'] = 6; -$lang->block->num = '數量'; -$lang->block->type = '類型'; -$lang->block->orderBy = '排序'; +$lang->block->num = '數量'; +$lang->block->type = '類型'; +$lang->block->orderBy = '排序'; $lang->block->availableBlocks = new stdclass(); @@ -212,16 +223,18 @@ $lang->block->moduleList['todo'] = '待辦'; $lang->block->modules['product'] = new stdclass(); $lang->block->modules['product']->availableBlocks = new stdclass(); -$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . '列表'; -$lang->block->modules['product']->availableBlocks->story = '需求列表'; -$lang->block->modules['product']->availableBlocks->plan = '計劃列表'; -$lang->block->modules['product']->availableBlocks->release = '發佈列表'; +$lang->block->modules['product']->availableBlocks->report = $lang->productCommon . '統計'; +$lang->block->modules['product']->availableBlocks->overview = $lang->productCommon . '總覽'; +$lang->block->modules['product']->availableBlocks->list = $lang->productCommon . '列表'; +$lang->block->modules['product']->availableBlocks->story = '需求列表'; +$lang->block->modules['product']->availableBlocks->plan = '計劃列表'; +$lang->block->modules['product']->availableBlocks->release = '發佈列表'; $lang->block->modules['project'] = new stdclass(); $lang->block->modules['project']->availableBlocks = new stdclass(); $lang->block->modules['project']->availableBlocks->list = $lang->projectCommon . '列表'; $lang->block->modules['project']->availableBlocks->task = '任務列表'; $lang->block->modules['project']->availableBlocks->build = '版本列表'; -$lang->block->modules['qa'] = new stdclass(); +$lang->block->modules['qa'] = new stdclass(); $lang->block->modules['qa']->availableBlocks = new stdclass(); $lang->block->modules['qa']->availableBlocks->bug = 'Bug列表'; $lang->block->modules['qa']->availableBlocks->case = '用例列表'; @@ -232,6 +245,12 @@ $lang->block->modules['todo']->availableBlocks->list = '待辦列表'; $lang->block->orderByList = new stdclass(); +$lang->block->orderByList->product = array(); +$lang->block->orderByList->product['id_asc'] = 'ID 遞增'; +$lang->block->orderByList->product['id_desc'] = 'ID 遞減'; +$lang->block->orderByList->product['status_asc'] = '狀態正序'; +$lang->block->orderByList->product['status_desc'] = '狀態倒序'; + $lang->block->orderByList->task = array(); $lang->block->orderByList->task['id_asc'] = 'ID 遞增'; $lang->block->orderByList->task['id_desc'] = 'ID 遞減'; @@ -253,20 +272,20 @@ $lang->block->orderByList->bug['severity_asc'] = '級別遞增'; $lang->block->orderByList->bug['severity_desc'] = '級別遞減'; $lang->block->orderByList->case = array(); -$lang->block->orderByList->case['id_asc'] = 'ID 遞增'; -$lang->block->orderByList->case['id_desc'] = 'ID 遞減'; -$lang->block->orderByList->case['pri_asc'] = '優先順序遞增'; -$lang->block->orderByList->case['pri_desc'] = '優先順序遞減'; +$lang->block->orderByList->case['id_asc'] = 'ID 遞增'; +$lang->block->orderByList->case['id_desc'] = 'ID 遞減'; +$lang->block->orderByList->case['pri_asc'] = '優先順序遞增'; +$lang->block->orderByList->case['pri_desc'] = '優先順序遞減'; $lang->block->orderByList->story = array(); -$lang->block->orderByList->story['id_asc'] = 'ID 遞增'; -$lang->block->orderByList->story['id_desc'] = 'ID 遞減'; -$lang->block->orderByList->story['pri_asc'] = '優先順序遞增'; -$lang->block->orderByList->story['pri_desc'] = '優先順序遞減'; -$lang->block->orderByList->story['status_asc'] = '狀態正序'; -$lang->block->orderByList->story['status_desc'] = '狀態倒序'; -$lang->block->orderByList->story['stage_asc'] = '階段正序'; -$lang->block->orderByList->story['stage_desc'] = '階段倒序'; +$lang->block->orderByList->story['id_asc'] = 'ID 遞增'; +$lang->block->orderByList->story['id_desc'] = 'ID 遞減'; +$lang->block->orderByList->story['pri_asc'] = '優先順序遞增'; +$lang->block->orderByList->story['pri_desc'] = '優先順序遞減'; +$lang->block->orderByList->story['status_asc'] = '狀態正序'; +$lang->block->orderByList->story['status_desc'] = '狀態倒序'; +$lang->block->orderByList->story['stage_asc'] = '階段正序'; +$lang->block->orderByList->story['stage_desc'] = '階段倒序'; $lang->block->todoNum = '待辦數'; $lang->block->taskNum = '任務數'; @@ -310,11 +329,11 @@ $lang->block->typeList->testtask['done'] = '已測版本'; $lang->block->typeList->testtask['all'] = '全部'; $lang->block->modules['product']->moreLinkList = new stdclass(); -$lang->block->modules['product']->moreLinkList->list = 'product|all|product=&status=%s'; -$lang->block->modules['product']->moreLinkList->story = 'my|story|type=%s'; +$lang->block->modules['product']->moreLinkList->list = 'product|all|product=&status=%s'; +$lang->block->modules['product']->moreLinkList->story = 'my|story|type=%s'; $lang->block->modules['project']->moreLinkList = new stdclass(); -$lang->block->modules['project']->moreLinkList->list = 'project|all|status=%s&project='; -$lang->block->modules['project']->moreLinkList->task = 'my|task|type=%s'; +$lang->block->modules['project']->moreLinkList->list = 'project|all|status=%s&project='; +$lang->block->modules['project']->moreLinkList->task = 'my|task|type=%s'; $lang->block->modules['qa']->moreLinkList = new stdclass(); $lang->block->modules['qa']->moreLinkList->bug = 'my|bug|type=%s'; $lang->block->modules['qa']->moreLinkList->case = 'my|testcase|type=%s'; @@ -334,7 +353,7 @@ $lang->block->gridOptions[8] = '左側'; $lang->block->gridOptions[4] = '右側'; $lang->block->flowchart = array(); -$lang->block->flowchart[] = array('管理員', '維護公司', '添加用戶', '維護權限'); +$lang->block->flowchart[] = array('管理員', '維護公司', '添加用戶', '維護權限'); $lang->block->flowchart[] = array($lang->productCommon . '經理', '創建' . $lang->productCommon, '維護模組', '維護計劃', '維護需求', '創建發佈'); $lang->block->flowchart[] = array($lang->projectCommon . '經理', '創建' . $lang->projectCommon, '維護團隊', '關聯' . $lang->productCommon, '關聯需求', '分解任務'); $lang->block->flowchart[] = array('研發人員', '領取任務和Bug', '更新狀態', '完成任務和Bug'); diff --git a/module/block/model.php b/module/block/model.php index 20054b403a..223713e21a 100644 --- a/module/block/model.php +++ b/module/block/model.php @@ -198,7 +198,7 @@ class blockModel extends model * * @param string $module * @access public - * @return void + * @return string */ public function getListParams($module = '') { @@ -206,7 +206,7 @@ class blockModel extends model if($module == 'project') return $this->getProjectParams($module); $params = new stdclass(); - $params = $this->onlyNumParams($module, $params); + $params = $this->onlyNumParams($params); return json_encode($params); } @@ -348,9 +348,9 @@ class blockModel extends model * @access public * @return json */ - public function getPlanParams($module = '') + public function getPlanParams() { - $params = $this->onlyNumParams($module); + $params = $this->onlyNumParams(); return json_encode($params); } @@ -360,9 +360,9 @@ class blockModel extends model * @access public * @return json */ - public function getReleaseParams($module = '') + public function getReleaseParams() { - $params = $this->onlyNumParams($module); + $params = $this->onlyNumParams(); return json_encode($params); } @@ -372,9 +372,9 @@ class blockModel extends model * @access public * @return json */ - public function getBuildParams($module = '') + public function getBuildParams() { - $params = $this->onlyNumParams($module); + $params = $this->onlyNumParams(); return json_encode($params); } @@ -384,13 +384,45 @@ class blockModel extends model * @access public * @return json */ - public function getProductParams($module = '') + public function getProductParams() { $params->type['name'] = $this->lang->block->type; $params->type['options'] = $this->lang->block->typeList->product; $params->type['control'] = 'select'; - return json_encode($this->onlyNumParams($module, $params)); + return json_encode($this->onlyNumParams($params)); + } + + /** + * Get product report params. + * + * @access public + * @return string + */ + public function getReportParams() + { + $params = new stdclass(); + $params->type['name'] = $this->lang->block->type; + $params->type['options'] = $this->lang->block->typeList->product; + $params->type['control'] = 'select'; + + $params->orderBy['name'] = $this->lang->block->orderBy; + $params->orderBy['default'] = 'id_desc'; + $params->orderBy['options'] = $this->lang->block->orderByList->product; + $params->orderBy['control'] = 'select'; + + return json_encode($params); + } + + /** + * Get product overview pararms. + * + * @access public + * @return string + */ + public function getOverviewParams() + { + return false; } /** @@ -399,13 +431,13 @@ class blockModel extends model * @access public * @return json */ - public function getProjectParams($module = '') + public function getProjectParams() { $params->type['name'] = $this->lang->block->type; $params->type['options'] = $this->lang->block->typeList->project; $params->type['control'] = 'select'; - return json_encode($this->onlyNumParams($module, $params)); + return json_encode($this->onlyNumParams($params)); } public function getAssignToMeParams() @@ -461,12 +493,11 @@ class blockModel extends model /** * Build number params. * - * @param string $module * @param object $params * @access public * @return object */ - public function onlyNumParams($module = '', $params = '') + public function onlyNumParams($params = '') { if(empty($params)) $params = new stdclass(); $params->num['name'] = $this->lang->block->num; diff --git a/module/block/view/overviewblock.html.php b/module/block/view/overviewblock.html.php new file mode 100644 index 0000000000..024c4cd10b --- /dev/null +++ b/module/block/view/overviewblock.html.php @@ -0,0 +1,17 @@ + + * @package block + * @version $Id$ + * @link http://www.zentao.net + */ +?> +