* Finish task #85038, #85039.

This commit is contained in:
liumengyi
2023-02-21 00:36:33 +00:00
parent df38f27ead
commit 00d7d83484
9 changed files with 173 additions and 87 deletions
+12
View File
@@ -8,3 +8,15 @@ REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`, `
UPDATE `zt_project` AS parent INNER JOIN (select `id`,`parent`,`attribute` from `zt_project` where `parent` != 0 and `type` = 'stage') AS child ON parent.`id` = child.`parent` SET parent.`attribute`='mix' where parent.`grade`=1 and parent.`type`='stage' and parent.`attribute` != child.`attribute`;
REPLACE INTO `zt_grouppriv` (SELECT `group`,`module`,'batchChangeStatus' FROM `zt_grouppriv` WHERE `module` = 'execution' AND `method` = 'batchEdit');
ALTER table `zt_stage` ADD `projectType` varchar(255) NOT NULL DEFAULT '' AFTER `type`;
UPDATE `zt_stage` SET `projectType` = 'waterfall' WHERE `projectType` = '';
REPLACE INTO `zt_stage` (`name`,`percent`,`type`, `projectType`, `createdBy`,`createdDate`,`editedBy`,`editedDate`,`deleted`) VALUES
('需求','10','request','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('设计','10','design','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('开发','50','dev','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('测试','15','qa','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('发布','10','release','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('总结评审','5','review','waterfallplus','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0');
+13 -7
View File
@@ -6391,13 +6391,19 @@ REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) V
('all','stage','typeList','review','总结评审','1'),
('all','stage','typeList','other','其他','1');
REPLACE INTO `zt_stage` (`name`,`percent`,`type`,`createdBy`,`createdDate`,`editedBy`,`editedDate`,`deleted`) VALUES
('需求','10','request','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('设计','10','design','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('开发','50','dev','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('测试','15','qa','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('发布','10','release','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('总结评审','5','review','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0');
REPLACE INTO `zt_stage` (`name`,`percent`,`type`,`projectType`,`createdBy`,`createdDate`,`editedBy`,`editedDate`,`deleted`) VALUES
('需求','10','request','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('设计','10','design','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('开发','50','dev','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('测试','15','qa','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('发布','10','release','waterfall','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('总结评审','5','review','waterfall','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0');
('需求','10','request','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('设计','10','design','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('开发','50','dev','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('测试','15','qa','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('发布','10','release','waterfallplus','admin','2020-02-08 21:08:30','admin','2020-02-12 13:50:27','0'),
('总结评审','5','review','waterfallplus','admin','2020-02-08 21:08:45','admin','2020-02-12 13:50:27','0');
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'hourPoint', '0');
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1');
+23 -15
View File
@@ -75,26 +75,34 @@ $lang->admin->menuList->switch['subMenu']['setmodule'] = array('link' => "{$lang
$lang->admin->menuList->switch['menuOrder']['5'] = 'setmodule';
$lang->admin->menuList->model['subMenu']['common'] = array('link' => "{$lang->globalSetting}|custom|required|module=project", 'subModule' => 'custom,subject,holiday');
$lang->admin->menuList->model['subMenu']['scrum'] = array('link' => "{$lang->scrumModel}|auditcl|scrumbrowse|", 'subModule' => 'auditcl');
$lang->admin->menuList->model['subMenu']['waterfall'] = array('link' => "{$lang->waterfallModel}|stage|settype|", 'subModule' => 'stage');
$lang->admin->menuList->model['subMenu']['common'] = array('link' => "{$lang->globalSetting}|custom|required|module=project", 'subModule' => 'custom,subject,holiday,stage', 'exclude' => 'stage-browse,stage-plusbrowse,stage-create,stage-edit,stage-batchcreate');
$lang->admin->menuList->model['subMenu']['scrum'] = array('link' => "{$lang->scrumModel}|auditcl|scrumbrowse|", 'subModule' => 'auditcl');
$lang->admin->menuList->model['subMenu']['waterfall'] = array('link' => "{$lang->waterfallModel}|stage|browse|", 'subModule' => 'stage', 'exclude' => 'stage-settype,stage-plusbrowse');
$lang->admin->menuList->model['subMenu']['agileplus'] = array('link' => "{$lang->agilePlusModel}|auditcl|agileplusbrowse|", 'subModule' => 'auditcl');
$lang->admin->menuList->model['subMenu']['waterfallplus'] = array('link' => "{$lang->waterfallPlusModel}|stage|plusbrowse|", 'subModule' => 'stage', 'exclude' => 'stage-settype,stage-browse');
$lang->admin->menuList->model['menuOrder']['5'] = 'common';
$lang->admin->menuList->model['menuOrder']['10'] = 'scrum';
$lang->admin->menuList->model['menuOrder']['15'] = 'waterfall';
$lang->admin->menuList->model['menuOrder']['20'] = 'agileplus';
$lang->admin->menuList->model['menuOrder']['25'] = 'waterfallplus';
$lang->admin->menuList->model['tabMenu']['common']['project'] = array('link' => "{$lang->project->common}|custom|required|module=project", 'alias' => 'set', 'exclude' => 'custom', 'links' => array('custom|set|'));
$lang->admin->menuList->model['tabMenu']['common']['build'] = array('link' => "{$lang->build->common}|custom|required|module=build", 'alias' => 'set', 'exclude' => 'custom');
$lang->admin->menuList->model['tabMenu']['common']['flow'] = array('link' => "{$lang->custom->flow}|custom|flow|", 'divider' => true);
$lang->admin->menuList->model['tabMenu']['common']['code'] = array('link' => "{$lang->code}|custom|code|");
$lang->admin->menuList->model['tabMenu']['common']['hours'] = array('link' => "{$lang->workingHour}|custom|hours|", 'subModule' => 'holiday', 'links' => array('holiday|browse|'));
$lang->admin->menuList->model['tabMenu']['waterfall']['stage'] = array('link' => "{$lang->stage->common}|stage|settype|", 'subModule' => 'stage', 'links' => array('stage|browse|'));
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['5'] = 'project';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['10'] = 'build';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['35'] = 'flow';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['40'] = 'code';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['45'] = 'hours';
$lang->admin->menuList->model['tabMenu']['menuOrder']['waterfall']['5'] = 'stage';
$lang->admin->menuList->model['tabMenu']['common']['project'] = array('link' => "{$lang->project->common}|custom|required|module=project", 'alias' => 'set', 'exclude' => 'custom', 'links' => array('custom|set|'));
$lang->admin->menuList->model['tabMenu']['common']['stage'] = array('link' => "{$lang->stage->common}|stage|settype|", 'subModule' => 'stage', 'links' => array('stage|browse|'));
$lang->admin->menuList->model['tabMenu']['common']['build'] = array('link' => "{$lang->build->common}|custom|required|module=build", 'alias' => 'set', 'exclude' => 'custom');
$lang->admin->menuList->model['tabMenu']['common']['flow'] = array('link' => "{$lang->custom->flow}|custom|flow|", 'divider' => true);
$lang->admin->menuList->model['tabMenu']['common']['code'] = array('link' => "{$lang->code}|custom|code|");
$lang->admin->menuList->model['tabMenu']['common']['hours'] = array('link' => "{$lang->workingHour}|custom|hours|", 'subModule' => 'holiday', 'links' => array('holiday|browse|'));
$lang->admin->menuList->model['tabMenu']['waterfall']['stage'] = array('link' => "{$lang->stage->common}|stage|browse|", 'subModule' => 'stage', 'exclude' => 'stage-plusbrowse');
$lang->admin->menuList->model['tabMenu']['waterfallplus']['stage'] = array('link' => "{$lang->stage->common}|stage|plusbrowse|", 'subModule' => 'stage', 'exclude' => 'stage-browse');
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['5'] = 'project';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['7'] = 'stage';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['10'] = 'build';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['35'] = 'flow';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['40'] = 'code';
$lang->admin->menuList->model['tabMenu']['menuOrder']['common']['45'] = 'hours';
$lang->admin->menuList->model['tabMenu']['menuOrder']['waterfall']['5'] = 'stage';
$lang->admin->menuList->model['tabMenu']['menuOrder']['waterfallplus']['5'] = 'stage';
$lang->admin->menuList->feature['subMenu']['my'] = array('link' => "{$lang->my->common}|custom|set|module=todo&field=priList", 'exclude' => 'set,required');
$lang->admin->menuList->feature['subMenu']['product'] = array('link' => "{$lang->productCommon}|custom|required|module=product", 'exclude' => 'set,required', 'alias' => 'browsestoryconcept,product');
+38 -37
View File
@@ -49,43 +49,44 @@ $lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar
$lang->agreement = "已阅读并同意。<span class='text-danger'>未经许可,不得去除、隐藏或遮掩禅道软件的任何标志及链接。</span>";
$lang->designedByAIUX = "<a href='https://api.zentao.net/goto.php?item=aiux' class='link-aiux' target='_blank'><i class='icon icon-aiux'></i> 艾体验设计</a>";
$lang->reset = '重填';
$lang->cancel = '取消';
$lang->refresh = '刷新';
$lang->refreshIcon = "<i title='$lang->refresh' class='icon icon-refresh'></i>";
$lang->create = '新建';
$lang->edit = '编辑';
$lang->delete = '删除';
$lang->activate = '激活';
$lang->close = '关闭';
$lang->unlink = '移除';
$lang->import = '导入';
$lang->export = '导出';
$lang->setFileName = '文件名:';
$lang->submitting = '稍候...';
$lang->save = '保存';
$lang->confirm = '确认';
$lang->preview = '查看';
$lang->goback = '返回';
$lang->goPC = 'PC版';
$lang->more = '更多';
$lang->moreLink = 'More';
$lang->day = '天';
$lang->customConfig = '自定义';
$lang->public = '公共';
$lang->trunk = '主干';
$lang->sort = '排序';
$lang->required = '必填';
$lang->noData = '暂无';
$lang->fullscreen = '全屏';
$lang->retrack = '收起';
$lang->whitelist = '访问白名单';
$lang->globalSetting = '通用';
$lang->waterfallModel = '瀑布模型';
$lang->scrumModel = '敏捷模型';
$lang->agilePlusModel = '融合敏捷模型';
$lang->all = '所有';
$lang->viewDetails = '查看详情';
$lang->reset = '重填';
$lang->cancel = '取消';
$lang->refresh = '刷新';
$lang->refreshIcon = "<i title='$lang->refresh' class='icon icon-refresh'></i>";
$lang->create = '新建';
$lang->edit = '编辑';
$lang->delete = '删除';
$lang->activate = '激活';
$lang->close = '关闭';
$lang->unlink = '移除';
$lang->import = '导入';
$lang->export = '导出';
$lang->setFileName = '文件名:';
$lang->submitting = '稍候...';
$lang->save = '保存';
$lang->confirm = '确认';
$lang->preview = '查看';
$lang->goback = '返回';
$lang->goPC = 'PC版';
$lang->more = '更多';
$lang->moreLink = 'More';
$lang->day = '天';
$lang->customConfig = '自定义';
$lang->public = '公共';
$lang->trunk = '主干';
$lang->sort = '排序';
$lang->required = '必填';
$lang->noData = '暂无';
$lang->fullscreen = '全屏';
$lang->retrack = '收起';
$lang->whitelist = '访问白名单';
$lang->globalSetting = '通用';
$lang->waterfallModel = '瀑布模型';
$lang->scrumModel = '敏捷模型';
$lang->agilePlusModel = '融合敏捷模型';
$lang->waterfallPlusModel = '融合瀑布模型';
$lang->all = '所有';
$lang->viewDetails = '查看详情';
$lang->actions = '操作';
$lang->restore = '恢复默认';
+1 -1
View File
@@ -211,7 +211,7 @@ class programplan extends control
$this->view->productList = $productList;
$this->view->project = $project;
$this->view->productID = $productID ? $productID : key($productList);
$this->view->stages = empty($planID) ? $this->loadModel('stage')->getStages('id_asc') : array();
$this->view->stages = empty($planID) ? $this->loadModel('stage')->getStages('id_asc', 0, $project->model) : array();
$this->view->programPlan = $programPlan;
$this->view->plans = empty($executions) ? $plans : $executions;
$this->view->planID = $planID;
+44 -10
View File
@@ -15,13 +15,19 @@ class stage extends control
* Browse stages.
*
* @param string $orderBy
* @param string $type
* @access public
* @return void
*/
public function browse($orderBy = "id_asc")
public function browse($orderBy = "id_asc", $type = 'waterfall')
{
$this->view->stages = $this->stage->getStages($orderBy);
if($type == 'waterfallplus') $this->locate($this->createLink('stage', 'plusBrowse', "orderBy=$orderBy&type=waterfallplus"));
$this->stage->setMenu($type);
$this->view->stages = $this->stage->getStages($orderBy, 0, $type);
$this->view->orderBy = $orderBy;
$this->view->type = $type;
$this->view->title = $this->lang->stage->common . $this->lang->colon . $this->lang->stage->browse;
$this->view->position[] = $this->lang->stage->common;
$this->view->position[] = $this->lang->stage->browse;
@@ -30,16 +36,41 @@ class stage extends control
}
/**
* Create a stage.
* Browse stages.
*
* @param string $orderBy
* @access public
* @return void
*/
public function create()
public function plusBrowse($orderBy = "id_asc", $type = 'waterfallplus')
{
if($type == 'waterfall') $this->locate($this->createLink('stage', 'browse', "orderBy=$orderBy&type=waterfall"));
$this->stage->setMenu($type);
$this->view->stages = $this->stage->getStages($orderBy, 0, $type);
$this->view->orderBy = $orderBy;
$this->view->type = $type;
$this->view->title = $this->lang->stage->common . $this->lang->colon . $this->lang->stage->browse;
$this->view->position[] = $this->lang->stage->common;
$this->view->position[] = $this->lang->stage->browse;
$this->display('stage', 'browse');
}
/**
* Create a stage.
*
* @param string $type
* @access public
* @return void
*/
public function create($type = 'waterfall')
{
$this->stage->setMenu($type);
if($_POST)
{
$stageID = $this->stage->create();
$stageID = $this->stage->create($type);
if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError()));
$response['result'] = 'success';
@@ -52,7 +83,7 @@ class stage extends control
}
$this->loadModel('action')->create('stage', $stageID, 'Opened');
$response['locate'] = inlink('browse');
$response['locate'] = inlink($type == 'waterfall' ? 'browse' : 'plusBrowse', "orderBy=id_asc&type=$type");
return $this->send($response);
}
@@ -66,14 +97,16 @@ class stage extends control
/**
* Batch create stages.
*
* @param string $type
* @access public
* @return void
*/
public function batchCreate()
public function batchCreate($type = 'waterfall')
{
$this->stage->setMenu($type);
if($_POST)
{
$this->stage->batchCreate();
$this->stage->batchCreate($type);
$response['result'] = 'success';
$response['message'] = $this->lang->saveSuccess;
@@ -84,7 +117,7 @@ class stage extends control
return $this->send($response);
}
$response['locate'] = inlink('browse');
$response['locate'] = inlink($type == 'waterfall' ? 'browse' : 'plusBrowse', "orderBy=id_asc&type=$type");
return $this->send($response);
}
@@ -105,6 +138,7 @@ class stage extends control
public function edit($stageID = 0)
{
$stage = $this->stage->getByID($stageID);
$this->stage->setMenu($stage->projectType);
if($_POST)
{
$changes = $this->stage->update($stageID);
@@ -120,7 +154,7 @@ class stage extends control
$actionID = $this->loadModel('action')->create('stage', $stageID, 'Edited');
if(!empty($changes)) $this->action->logHistory($actionID, $changes);
$response['locate'] = inlink('browse');
$response['locate'] = inlink($type == 'waterfall' ? 'browse' : 'plusBrowse', "orderBy=id_asc&type=$stage->projectType");
return $this->send($response);
}
+37 -10
View File
@@ -19,14 +19,15 @@ class stageModel extends model
* @access public
* @return int|bool
*/
public function create()
public function create($type = 'waterfall')
{
$stage = fixer::input('post')
->setDefault('projectType', $type)
->add('createdBy', $this->app->user->account)
->add('createdDate', helper::today())
->get();
$totalPercent = $this->getTotalPercent();
$totalPercent = $this->getTotalPercent($type);
if(!is_numeric($stage->percent)) return dao::$errors['message'][] = $this->lang->stage->error->notNum;
if(round($totalPercent + $stage->percent) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver;
@@ -48,11 +49,11 @@ class stageModel extends model
* @access public
* @return bool
*/
public function batchCreate()
public function batchCreate($type = 'waterfall')
{
$data = fixer::input('post')->get();
$totalPercent = $this->getTotalPercent();
$totalPercent = $this->getTotalPercent($type);
if(round($totalPercent + array_sum($data->percent)) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver;
@@ -98,7 +99,7 @@ class stageModel extends model
->add('editedDate', helper::today())
->get();
$totalPercent = $this->getTotalPercent();
$totalPercent = $this->getTotalPercent($oldStage->projectType);
if(round($totalPercent + $stage->percent - $oldStage->percent) > 100) return dao::$errors['message'][] = $this->lang->stage->error->percentOver;
@@ -118,10 +119,11 @@ class stageModel extends model
*
* @param string $orderBy
* @param int $projectID
* @param string $type
* @access public
* @return array
*/
public function getStages($orderBy = 'id_desc', $projectID = 0)
public function getStages($orderBy = 'id_desc', $projectID = 0, $type = '')
{
if($projectID)
{
@@ -137,7 +139,7 @@ class stageModel extends model
}
else
{
return $this->dao->select('*')->from(TABLE_STAGE)->where('deleted')->eq(0)->orderBy($orderBy)->fetchAll('id');
return $this->dao->select('*')->from(TABLE_STAGE)->where('deleted')->eq(0)->andWhere('projectType')->eq($type)->orderBy($orderBy)->fetchAll('id');
}
}
@@ -175,10 +177,35 @@ class stageModel extends model
/**
* Get stage total percent
*
* return string
* @param string $type
* @return string
*/
public function getTotalPercent()
public function getTotalPercent($type)
{
return $this->dao->select('sum(percent) as total')->from(TABLE_STAGE)->where('deleted')->eq('0')->fetch('total');
return $this->dao->select('sum(percent) as total')->from(TABLE_STAGE)->where('deleted')->eq('0')->andWhere('projectType')->eq($type)->fetch('total');
}
/**
* Set menu.
*
* @param string $type
* @access public
* @return void
*/
public function setMenu($type)
{
$this->app->loadLang('admin');
$moduleName = $this->app->rawModule;
$methodName = $this->app->rawMethod;
if(!isset($this->lang->admin->menuList->model['subMenu']['waterfall']['exclude'])) $this->lang->admin->menuList->model['subMenu']['waterfall']['exclude'] = '';
if(!isset($this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'])) $this->lang->admin->menuList->model['subMenu']['agileplus']['exclude'] = '';
if($type == 'waterfall')
{
$this->lang->admin->menuList->model['subMenu']['waterfallplus']['exclude'] .= ",{$moduleName}-{$methodName}";
}
if($type == 'waterfallplus')
{
$this->lang->admin->menuList->model['subMenu']['waterfall']['exclude'] .= ",{$moduleName}-{$methodName}";
}
}
}
+5 -6
View File
@@ -17,7 +17,7 @@
<p>
<span class="text-muted"><?php echo $lang->stage->noStage;?></span>
<?php if(common::hasPriv('stage', 'create')):?>
<?php echo html::a($this->createLink('stage', 'create'), "<i class='icon icon-plus'></i> " . $lang->stage->create, '', "class='btn btn-info'");?>
<?php echo html::a($this->createLink('stage', 'create', "type={$type}"), "<i class='icon icon-plus'></i> " . $lang->stage->create, '', "class='btn btn-info'");?>
<?php endif;?>
</p>
</div>
@@ -26,8 +26,7 @@
<div class='panel'>
<div class='panel-body'>
<div class="list-group">
<?php echo html::a(inlink('setType'), $lang->stage->setType);?>
<?php echo html::a(inlink('browse'), $lang->stage->browse, '', "class='selected'");?>
<?php echo html::a(inlink('browse', "orderBy=id_asc&type={$type}"), $lang->stage->browse, '', "class='selected'");?>
</div>
</div>
</div>
@@ -38,12 +37,12 @@
<strong><?php echo $lang->stage->browse;?></strong>
</div>
<div class="btn-toolbar pull-right">
<?php common::printLink('stage', 'batchCreate', "", "<i class='icon icon-plus'></i>" . $lang->stage->batchCreate, '', "class='btn btn-primary'");?>
<?php common::printLink('stage', 'create', "", "<i class='icon icon-plus'></i>" . $lang->stage->create, '', "class='btn btn-primary'");?>
<?php common::printLink('stage', 'batchCreate', "type={$type}", "<i class='icon icon-plus'></i>" . $lang->stage->batchCreate, '', "class='btn btn-primary'");?>
<?php common::printLink('stage', 'create', "type={$type}", "<i class='icon icon-plus'></i>" . $lang->stage->create, '', "class='btn btn-primary'");?>
</div>
</div>
<table class="table has-sort-head" id='stageList'>
<?php $vars = "orderBy=%s";?>
<?php $vars = "orderBy=%s&type={$type}";?>
<thead>
<tr>
<th class='text-left w-60px'><?php common::printOrderLink('id', $orderBy, $vars, $lang->stage->id);?></th>
-1
View File
@@ -34,7 +34,6 @@ EOT;
<div class='panel-body'>
<div class="list-group">
<?php echo html::a(inlink('setType'), $lang->stage->setType, '', "class='selected'");?>
<?php echo html::a(inlink('browse'), $lang->stage->browse);?>
</div>
</div>
</div>