This commit is contained in:
Yagami
2020-05-12 17:29:57 +08:00
21 changed files with 343 additions and 80 deletions
@@ -190,7 +190,7 @@ $(function()
</div>
<?php else:?>
<div class="actions">
<?php common::printLink('project', 'create', '', "<i class='icon icon-plus'></i>" . $lang->project->create, '', "class='btn btn-info'");?>
<?php common::printLink('program', 'createguide', '', "<i class='icon icon-plus'></i>" . $lang->project->create, '', "class='btn btn-info' data-toggle='modal' data-type='ajax'");?>
</div>
<?php endif;?>
<div class="type-info">
+1 -1
View File
@@ -11,7 +11,7 @@
*/
?>
<?php if(empty($projectStats)): ?>
<div class='empty-tip'><?php common::printLink('project', 'create', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary'")?></div>
<div class='empty-tip'><?php common::printLink('program', 'createguide', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary' data-toggle='modal' data-type='ajax'")?></div>
<?php else:?>
<div class="panel-body has-table scrollbar-hover">
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-projects tablesorter'>
+33 -8
View File
@@ -118,17 +118,23 @@ $lang->common = new stdclass();
$lang->common->common = 'Common Module';
/* Main menu. */
$lang->menu = new stdclass();
$lang->menu->my = '<i class="icon icon-menu-my"></i> Dashboard|my|index';
$lang->menu->product = '<i class="icon icon-menu-project"></i> Project|product|index|locate=no';
$lang->menu->doc = '<i class="icon icon-menu-doc"></i> Doc|doc|index';
$lang->menu->report = '<i class="icon icon-menu-report"></i> Report|report|index';
$lang->menu->company = '<i class="icon icon-menu-users"></i> Company|company|index';
$lang->menu->admin = '<i class="icon icon-menu-backend"></i> Admin|admin|index';
$lang->menu->recent = '<i class="icon icon-menu-recent"></i> Recent|recent|index';
$lang->mainNav = new stdclass();
$lang->mainNav->my = '<i class="icon icon-menu-my"></i> Dashboard|my|index|';
$lang->mainNav->program = '<i class="icon icon-menu-project"></i> Project|program|index|';
$lang->mainNav->doc = '<i class="icon icon-menu-doc"></i> Doc|doc|index|';
$lang->mainNav->report = '<i class="icon icon-menu-report"></i> Report|report|index|';
$lang->mainNav->company = '<i class="icon icon-menu-users"></i> Company|company|index|';
$lang->mainNav->admin = '<i class="icon icon-menu-backend"></i> Admin|admin|index|';
$lang->mainNav->recent = '<i class="icon icon-menu-recent"></i> Recent|recent|index|';
$lang->dividerMenu = ',admin,';
$lang->menu = new stdclass();
$lang->menu->program = 'Home|program|index';
$lang->menu->product = $lang->productCommon . '|product|index|locate=no';
$lang->menu->project = $lang->projectCommon . '|project|index|locate=no';
$lang->menu->qa = 'QA|qa|index';
/* Object list in search form. */
$lang->searchObjects['bug'] = 'Bug';
$lang->searchObjects['story'] = 'Story';
@@ -501,6 +507,25 @@ $lang->menugroup->jenkins = 'ci';
$lang->menugroup->compile = 'ci';
$lang->menugroup->job = 'ci';
$lang->navGroup = array();
$lang->navGroup['product'] = 'program';
$lang->navGroup['story'] = 'program';
$lang->navGroup['productplan'] = 'program';
$lang->navGroup['release'] = 'program';
$lang->navGroup['tree'] = 'program';
$lang->navGroup['project'] = 'program';
$lang->navGroup['task'] = 'program';
$lang->navGroup['qa'] = 'program';
$lang->navGroup['bug'] = 'program';
$lang->navGroup['testcase'] = 'program';
$lang->navGroup['testtask'] = 'program';
$lang->navGroup['testreport'] = 'program';
$lang->navGroup['testsuite'] = 'program';
$lang->navGroup['caselib'] = 'program';
$lang->navGroup['feedback'] = 'program';
$lang->navGroup['group'] = 'company';
/* Error info. */
$lang->error = new stdclass();
$lang->error->companyNotFound = "The domain %s cannot be found!";
+128 -13
View File
@@ -129,23 +129,135 @@ $lang->mainNav->recent = '<i class="icon icon-menu-recent"></i> 近期|recent|i
$lang->dividerMenu = ',admin,';
/* Scrum menu. */
$lang->menu = new stdclass();
$lang->menu->program = '主页|program|index';
$lang->menu->product = $lang->productCommon . '|product|index|locate=no';
$lang->menu->project = $lang->projectCommon . '|project|index|locate=no';
$lang->menu->qa = '测试|qa|index';
/* Cmmi menu. */
$lang->menu->cmmi = new stdclass();
$lang->menu->cmmi->workestimation = '估算|workestimation|index|program={PROGRAM}';
$lang->menu->cmmi->programplan = '计划|programplan|browse|program={PROGRAM}';
$lang->menu->cmmi->project = array('link' => $lang->projectCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',task,');
$lang->menu->cmmi->review = array('link' => '评审|review|browse|program={PROGRAM}', 'subModule' => ',reviewissue,');
$lang->menu->cmmi->weekly = array('link' => '报告|weekly|index|program={PROGRAM}', 'subModule' => ',milestone,');
$lang->menu->cmmi->doc = '文档|doc|index|program={PROGRAM}';
$lang->menu->cmmi->product = array('link' => '需求|product|browse|product={PRODUCT}&branch=&browseType=unclosed&queryID=0&storyType=requirement', 'subModule' => ',story,');
$lang->menu->cmmi->design = '设计|design|browse|product={PRODUCT}';
$lang->menu->cmmi->ci = '集成|repo|browse|';
$lang->menu->cmmi->qa = array('link' => '测试|bug|browse|product={PRODUCT}', 'subModule' => ',testcase,testtask,testsuite,testreport,caselib,');
$lang->menu->cmmi->release = array('link' => '发布|release|browse|product={PRODUCT}');
$lang->menu->cmmi->issue = '问题|issue|browse|';
$lang->menu->cmmi->risk = '风险|risk|browse|';
$lang->menu->cmmi->report = '度量|report|programsummary|program={PROGRAM}';
$lang->menu->cmmi->auditplan = array('link' => 'QA|auditplan|browse|', 'subModule' => ',nc,');
$lang->menu->cmmi->cm = '配置|cm|browse|program={PROGRAM}';
$lang->menu->cmmi->pssp = '过程|pssp|browse|program={PROGRAM}';
$lang->programplan = new stdclass();
$lang->programplan->menu = new stdclass();
$lang->programplan->menu->gantt = '甘特图|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=gantt';
$lang->programplan->menu->lists = '阶段列表|programplan|browse|programID={PROGRAM}&productID={PRODUCT}&type=lists';
$lang->review = new stdclass();
$lang->review->menu = new stdclass();
$lang->review->menu->browse = '基线评审列表|review|browse|program={PROGRAM}';
$lang->review->menu->issue = '问题列表|reviewissue|issue|program={PROGRAM}';
$lang->reviewsetting = new stdclass();
$lang->reviewsetting->menu = $lang->review->menu;
$lang->weekly = new stdclass();
$lang->weekly->menu = new stdclass();
$lang->weekly->menu->browse = '周报|weekly|index|program={PROGRAM}';
$lang->weekly->menu->issue = '里程碑报告|milestone|index|program={PROGRAM}';
$lang->milestone = new stdclass();
$lang->milestone->menu = $lang->weekly->menu;
$lang->product = new stdclass();
$lang->product->cmmi = new stdclass();
$lang->product->cmmi->menu = new stdclass();
$lang->product->cmmi->menu->requirement = '用户需求|product|browse|product={PRODUCT}&branch=&browseType=unclosed&queryID=0&storyType=requirement';
$lang->product->cmmi->menu->story = '软件需求|product|browse|product={PRODUCT}&branch=&browseType=unclosed&queryID=0&storyType=story';
$lang->product->cmmi->menu->track = '跟踪矩阵|story|track|product={PRODUCT}';
$lang->story = new stdclass();
$lang->story->cmmi = new stdclass();
$lang->story->cmmi->menu = $lang->product->cmmi->menu;
$lang->ci = new stdclass();
$lang->ci->cmmi = new stdclass();
$lang->ci->cmmi->menu = $lang->product->cmmi->menu;
$lang->auditplan = new stdclass();
$lang->auditplan->menu = new stdclass();
$lang->auditplan->menu->browse = '质量保证计划|auditplan|browse|';
$lang->auditplan->menu->nc = '不符合项|nc|browse|program={PROGRAM}';
$lang->nc = new stdclass();
$lang->nc->menu = $lang->auditplan->menu;
$lang->cm = new stdclass();
$lang->cm->menu = new stdclass();
$lang->cm->menu->browse = '基线|cm|browse|program={PROGRAM}';
$lang->cm->menu->report = '基线状态报告|cm|report|program={PROGRAM}';
/* System menu. */
$lang->system = new stdclass();
$lang->system->menu = new stdclass();
$lang->system->menu->estimate = array('link' => '估算|custom|estimate|');
$lang->system->menu->stage = array('link' => '阶段|stage|browse|');
$lang->system->menu->settips = array('link' => '度量|measurement|settips|', 'subModule' => ',sqlbuilder,measurement,', 'alias' => ',template,browse,');
$lang->system->menu->auditcl = array('link' => 'QA|auditcl|browse|');
$lang->system->menu->cmcl = array('link' => '配置|cmcl|browse|', 'subModule' => ',cmcl,baseline,');
$lang->system->menu->process = array('link' => '过程|process|browse|', 'subModule' => ',activity,output,classify,');
$lang->system->menu->review = array('link' => '评审|reviewcl|browse|category=PP|', 'subModule' => ',reviewsetting,');
$lang->system->menu->subject = array('link' => '科目|subject|browse|');
$lang->system->menu->estimate = array('link' => '估算|custom|estimate|');
$lang->system->menu->stage = array('link' => '阶段|stage|browse|');
$lang->system->menu->measurement = array('link' => '度量|measurement|settips|', 'subModule' => 'sqlbuilder,measurement', 'alias' => ',template,browse,');
$lang->system->menu->auditcl = array('link' => 'QA|auditcl|browse|');
$lang->system->menu->cmcl = array('link' => '配置|cmcl|browse|', 'subModule' => ',cmcl,baseline,');
$lang->system->menu->process = array('link' => '过程|process|browse|', 'subModule' => ',activity,output,classify,');
$lang->system->menu->reviewcl = array('link' => '评审|reviewcl|browse|category=PP|', 'subModule' => ',reviewsetting,');
$lang->system->menu->subject = array('link' => '科目|subject|browse|');
$lang->measurement = new stdclass();
$lang->measurement->menu = new stdclass();
$lang->measurement->menu->settips = '区间提示|measurement|settips|';
$lang->measurement->menu->define = '度量定义|measurement|browse|type=basic';
$lang->measurement->menu->data = array('link' => '度量数据|sqlbuilder|browsesqlview|', 'subModule' => 'sqlbuilder');
$lang->measurement->menu->template = '报表模板|measurement|template|';
$lang->sqlbuilder = new stdclass();
$lang->sqlbuilder->menu = $lang->measurement->menu;
$lang->cmcl = new stdclass();
$lang->cmcl->menu = new stdclass();
$lang->cmcl->menu->browse = array('link' => '审计清单|cmcl|browse|', 'subModule' => 'cmcl');
$lang->cmcl->menu->catalog = '文档目录|baseline|catalog|';
$lang->cmcl->menu->template = array('link' => '文档模板|baseline|template|', 'alias' => 'createtemplate,edittemplate,view,editbook,managebook');
$lang->baseline = new stdclass();
$lang->baseline->menu = $lang->cmcl->menu;
$lang->process = new stdclass();
$lang->process->menu = new stdclass();
$lang->process->menu->browse = array('link' => '标准过程|process|browse|', 'subModule' => 'process');
$lang->process->menu->activity = array('link' => '活动|activity|browse|', 'subModule' => 'activity');
$lang->process->menu->output = array('link' => '文档|output|browse|', 'subModule' => 'output');
$lang->process->menu->classify = array('link' => '分类项|classify|browse|', 'subModule' => 'classify');
$lang->activity = new stdclass();
$lang->output = new stdclass();
$lang->classify = new stdclass();
$lang->activity->menu = $lang->process->menu;
$lang->output->menu = $lang->process->menu;
$lang->classify->menu = $lang->process->menu;
$lang->reviewcl = new stdclass();
$lang->reviewcl->menu = new stdclass();
$lang->reviewcl->menu->browse = array('link' => '检查清单|reviewcl|browse|category=PP', 'subModule' => 'reviewcl');
$lang->reviewcl->menu->version = array('link' => '版本号|reviewsetting|version|');
$lang->reviewcl->menu->reviewer = array('link' => '评审人|reviewsetting|reviewer|');
$lang->reviewsetting = new stdclass();
$lang->reviewsetting->menu = $lang->reviewcl->menu;
/* 查询条中可以选择的对象列表。*/
$lang->searchObjects['bug'] = 'Bug';
@@ -223,7 +335,6 @@ $lang->score = new stdclass();
$lang->score->menu = $lang->my->menu;
/* 产品视图设置。*/
$lang->product = new stdclass();
$lang->product->menu = new stdclass();
$lang->product->menu->story = array('link' => "{$lang->storyCommon}|product|browse|productID=%s", 'alias' => 'batchedit', 'subModule' => 'story');
@@ -239,7 +350,6 @@ $lang->product->menu->view = array('link' => '概况|product|view|productID=%
$lang->product->dividerMenu = ',plan,project,doc,';
$lang->story = new stdclass();
$lang->productplan = new stdclass();
$lang->release = new stdclass();
$lang->branch = new stdclass();
@@ -359,7 +469,6 @@ $lang->caselib->menu->testsuite = array('link' => '套件|testsuite|browse|');
$lang->caselib->menu->report = array('link' => '报告|testreport|browse|');
$lang->caselib->menu->caselib = array('link' => '用例库|caselib|browse|libID=%s', 'alias' => 'create,createcase,view,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase');
$lang->ci = new stdclass();
$lang->ci->menu = new stdclass();
$lang->ci->menu->code = array('link' => '代码|repo|browse|repoID=%s', 'alias' => 'diff,view,revision,log,blame,showsynccomment');
$lang->ci->menu->build = array('link' => '构建|job|browse', 'subModule' => 'compile,job');
@@ -500,7 +609,7 @@ $lang->menugroup->testsuite = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testreport = 'qa';
$lang->menugroup->doclib = 'doc';
$lang->menugroup->people = 'company';
$lang->menugroup->people = 'admin';
$lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
$lang->menugroup->score = 'my';
@@ -520,6 +629,13 @@ $lang->menugroup->jenkins = 'ci';
$lang->menugroup->compile = 'ci';
$lang->menugroup->job = 'ci';
$lang->menugroup->sqlbuilder = 'measurement';
$lang->menugroup->baseline = 'cmcl';
$lang->menugroup->activity = 'process';
$lang->menugroup->output = 'process';
$lang->menugroup->classify = 'process';
$lang->menugroup->reviewsetting = 'reviewcl';
/* Nav group.*/
$lang->navGroup = new stdclass();
$lang->navGroup->todo = 'my';
@@ -568,7 +684,6 @@ $lang->navGroup->process = 'system';
$lang->navGroup->activity = 'system';
$lang->navGroup->output = 'system';
$lang->navGroup->classify = 'system';
$lang->navGroup->reviewcl = 'system';
$lang->navGroup->subject = 'system';
$lang->navGroup->baseline = 'system';
$lang->navGroup->reviewcl = 'system';
+73 -2
View File
@@ -486,7 +486,7 @@ class commonModel extends model
/* Set main menu by group. */
$group = isset($lang->navGroup->$moduleName) ? $lang->navGroup->$moduleName : '';
if($group == 'system' || $group == 'admin') $lang->menu = $lang->$group->menu;
if($group == 'program');
if($group == 'program') $lang->menu = self::getProgramMainMenu();
/* Print all main menus. */
$menu = customModel::getMainMenu();
@@ -571,12 +571,16 @@ class commonModel extends model
{
global $config, $lang, $app;
$moduleName = $app->rawModule;
if(!isset($lang->$moduleName->menu))
{
echo "<ul></ul>";
return;
}
$group = isset($lang->navGroup->$moduleName) ? $lang->navGroup->$moduleName : '';
if($group == 'program') $lang->$moduleName->menu = self::getProgramModuleMenu($moduleName);
/* get current module and method. */
$isTutorialMode = commonModel::isTutorialMode();
$currentModule = $app->getModuleName();
@@ -585,7 +589,7 @@ class commonModel extends model
$isMobile = $app->viewType === 'mhtml';
/* If this is not workflow then use rawModule and rawMethod to judge highlight. */
if(!$app->isFlow)
if($app->isFlow)
{
$currentModule = $app->rawModule;
$currentMethod = $app->rawMethod;
@@ -1901,6 +1905,73 @@ EOD;
return $response;
}
public static function processMenus($menus)
{
global $app, $lang;
foreach($menus as $name => $setting)
{
$link = is_array($setting) ? $setting['link'] : $setting;
if(strpos($link, "{PRODUCT}") !== false) $link = str_replace('{PRODUCT}', $app->session->product, $link);
if(strpos($link, "{PROJECT}") !== false) $link = str_replace('{PROJECT}', $app->session->project, $link);
if(strpos($link, "{PROGRAM}") !== false) $link = str_replace('{PROGRAM}', $app->session->program, $link);
if(is_array($setting))
{
$setting['link'] = $link;
}
else
{
$setting = $link;
}
$menus->$name = $setting;
}
return $menus;
}
public static function getProgramMainMenu()
{
global $app, $lang;
$dao = new dao();
$program = $dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($app->session->program)->fetch();
if(!$program->template) return;
if($program->template == 'scrum') return $lang->menu;
if($program->template == 'cmmi')
{
$menus = $lang->menu->cmmi;
$lang->dividerMenu = ',story,issue,';
$lang->menuOrder = $lang->cmmi->menuOrder;
$lang->menugroup->release = 'release';
unset($lang->release->menu);
return self::processMenus($lang->menu->cmmi);
}
}
public static function getProgramModuleMenu($moduleName)
{
global $app, $lang;
$dao = new dao();
$program = $dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($app->session->program)->fetch();
if(!$program->template) return;
if($program->template == 'scrum') return $lang->$moduleName->menu;
if($program->template == 'cmmi')
{
return isset($lang->$moduleName->cmmi->menu) ? self::processMenus($lang->$moduleName->cmmi->menu) : $lang->$moduleName->menu;
}
}
public function getRelations($AType = '', $AID = 0, $BType = '', $BID = 0)
{
return $this->dao->select('*')->from(TABLE_RELATION)
->where('AType')->eq($AType)
->andWhere('AID')->eq($AID)
->andWhere('BType')->eq($BType)
->beginIF($BID)->andWhere('BID')->eq($BID)->fi()
->fetchAll();
}
}
class common extends commonModel
+7 -6
View File
@@ -14,15 +14,16 @@ if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile;
<?php if(empty($_GET['onlybody']) or $_GET['onlybody'] != 'yes'):?>
<?php $this->app->loadConfig('sso');?>
<?php if(!empty($config->sso->redirect)) js::set('ssoRedirect', $config->sso->redirect);?>
<?php $isProgram = (isset($lang->navGroup->{$this->moduleName}) && $lang->navGroup->{$this->moduleName} == 'program');?>
<?php $isSystem = (isset($lang->navGroup->{$this->moduleName}) && $lang->navGroup->{$this->moduleName} == 'system');?>
<?php $isAdmin = ($this->moduleName == 'company' || $this->moduleName == 'group' || $this->moduleName == 'dept' || $this->moduleName == 'user');?>
<?php $moduleName = $app->rawModule;?>
<?php $isProgram = (isset($lang->navGroup->{$moduleName}) && $lang->navGroup->{$moduleName} == 'program');?>
<?php $isSystem = (isset($lang->navGroup->{$moduleName}) && $lang->navGroup->{$moduleName} == 'system');?>
<?php $isAdmin = ($moduleName == 'company' || $moduleName == 'group' || $moduleName == 'dept' || $moduleName == 'user');?>
<div id='menu'>
<div id='menuHeader'>
<?php $heading = $app->company->name;?>
<h1 id='companyName' title='<?php echo $heading;?>'<?php if(strlen($heading) > 36) echo " class='long-name'" ?>><?php echo html::a(helper::createLink('index'), $heading);?></h1>
</div>
<nav id='menuNav'><?php commonModel::printMainNav($this->moduleName);?></nav>
<nav id='menuNav'><?php commonModel::printMainNav($moduleName);?></nav>
<div id='menuFooter'>
<button type='button' id='menuToggle'><i class='icon icon-sm icon-menu-collapse'></i></button>
</div>
@@ -33,7 +34,7 @@ if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile;
<div id='heading'>
<?php if($isProgram && isset($lang->programSwapper)) echo $lang->programSwapper;?>
</div>
<nav id='navbar'><?php ($isProgram || $isSystem || $isAdmin) ? commonModel::printMainmenu($this->moduleName) : common::printModuleMenu($this->moduleName);?></nav>
<nav id='navbar'><?php ($isProgram || $isSystem || $isAdmin) ? commonModel::printMainmenu($moduleName) : common::printModuleMenu($moduleName);?></nav>
<div id='toolbar'>
<div id="userMenu">
<?php common::printSearchBox();?>
@@ -44,7 +45,7 @@ if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile;
</div>
</div>
</div>
<?php if($isProgram || $isSystem || $isAdmin):?>
<?php if($isProgram || $isSystem || $isAdmin && $lang->{$moduleName}->menu):?>
<div id='subHeader'>
<div class='container'>
<div id="pageNav" class='btn-toolbar'><?php if(isset($lang->modulePageNav)) echo $lang->modulePageNav;?></div>
+3 -3
View File
@@ -16,7 +16,7 @@
<span class='btn btn-link btn-active-text'><span class='text'><?php echo $lang->my->myProject;?></span></span>
</div>
<div class="btn-toolbar pull-right">
<?php if(common::hasPriv('project', 'create')) echo html::a(helper::createLink('project', 'create'), "<i class='icon-plus'></i> " . $lang->my->home->createProject, '', "class='btn btn-primary'") ?>
<?php if(common::hasPriv('program', 'createguide')) echo html::a(helper::createLink('program', 'createguide'), "<i class='icon-plus'></i> " . $lang->my->home->createProject, '', "class='btn btn-primary' data-toggle='modal' data-type='ajax'") ?>
</div>
</div>
<div id="mainContent" class='main-table'>
@@ -24,8 +24,8 @@
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $lang->project->noProject;?></span>
<?php if(common::hasPriv('project', 'create')):?>
<?php echo html::a($this->createLink('project', 'create'), "<i class='icon icon-plus'></i> " . $lang->my->home->createProject, '', "class='btn btn-info'");?>
<?php if(common::hasPriv('program', 'createguide')):?>
<?php echo html::a($this->createLink('program', 'createguide'), "<i class='icon icon-plus'></i> " . $lang->my->home->createProject, '', "class='btn btn-info' data-toggle='modal' data-type='ajax'");?>
<?php endif;?>
</p>
</div>
+2 -2
View File
@@ -23,8 +23,8 @@
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $lang->project->noProject;?></span>
<?php if(common::hasPriv('project', 'create')):?>
<?php echo html::a($this->createLink('project', 'create'), "<i class='icon icon-plus'></i> " . $lang->project->create, '', "class='btn btn-info'");?>
<?php if(common::hasPriv('program', 'createguide')):?>
<?php echo html::a($this->createLink('program', 'createguide'), "<i class='icon icon-plus'></i> " . $lang->project->create, '', "class='btn btn-info' data-toggle='modal' data-type='ajax'");?>
<?php endif;?>
</p>
</div>
+1 -1
View File
@@ -117,7 +117,7 @@
</td>
<td class='c-actions'>
<?php
if(common::hasPriv('project', 'create')) echo html::a(helper::createLink('project', 'create', "projectID=&copyProjectID=&planID=$plan->id"), '<i class="icon-plus"></i>', '', "class='btn' title='{$lang->project->create}'");
if(common::hasPriv('program', 'createguide')) echo html::a(helper::createLink('program', 'createguide', "projectID=&copyProjectID=&planID=$plan->id"), '<i class="icon-plus"></i>', '', "class='btn' title='{$lang->project->create}' data-toggle='modal' data-type='ajax'");
if(common::hasPriv('productplan', 'linkStory')) echo html::a(inlink('view', "planID=$plan->id&type=story&orderBy=id_desc&link=true"), '<i class="icon-link"></i>', '', "class='btn' title='{$lang->productplan->linkStory}'");
if(common::hasPriv('productplan', 'linkBug') and $config->global->flow != 'onlyStory') echo html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=id_desc&link=true"), '<i class="icon-bug"></i>', '', "class='btn' title='{$lang->productplan->linkBug}'");
common::printIcon('productplan', 'edit', "planID=$plan->id", $plan, 'list');
+1 -1
View File
@@ -39,7 +39,7 @@ class program extends control
$projectList = $this->project->getProjectStats($status == 'byproduct' ? 'all' : $status, 0, 0, 30, $orderBy, $pager);
foreach($projectList as $projectID => $project)
{
$project->teamCount = count($this->project->getTeamMembers($projectID));
$project->teamCount = count($this->project->getTeamMembers($project->id));
}
}
else
+4 -4
View File
@@ -4,17 +4,17 @@
#mainMenu .pull-right > .btn-group > .btn-icon:hover {background: #fff;}
#cards {margin: 0 10px;}
#cards > .col {width: 25%;}
#cards > .col {width: 20%;}
#cards .panel {margin: 10px 0; border: 1px solid #DCDCDC; border-radius: 2px; box-shadow: none; height: 146px; cursor: pointer;}
#cards .panel:hover {border-color: #006AF1; box-shadow: 0 0 10px 0 rgba(0,0,100,.25);}
#cards .panel-heading {padding: 12px 40px 10px 16px;}
#cards .panel-heading {padding: 12px 24px 10px 16px;}
#cards .panel-body {padding: 0 16px 16px;}
#cards .panel-actions {padding: 7px 0;}
#cards .panel-actions .dropdown-menu > li > a {padding-left: 5px; text-align: left;}
#cards .panel-actions .dropdown-menu > li > a > i {opacity: .5; display: inline-block; margin-right: 4px; width: 18px; text-align: center;}
#cards .panel-actions .dropdown-menu > li > a:hover > i {opacity: 1;}
#cards .project-type-label {padding: 1px 2px; position: relative; top: -2px}
#cards .project-name {font-size: 16px; font-weight: normal;}
#cards .project-type-label {padding: 1px 2px;}
#cards .project-name {font-size: 16px; font-weight: normal; display: inline-block; max-width: 80%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle;}
#cards .project-infos {font-size: 12px;}
#cards .project-infos > span {display: inline-block; line-height: 12px;}
#cards .project-infos > span > .icon {font-size: 12px; display: inline-block; position: relative; top: -1px}
+2 -3
View File
@@ -18,7 +18,6 @@ $(function()
{
bestColsSize++;
}
console.log('bestColsSize', bestColsSize);
$cards.children('.col').css('width', (100 / bestColsSize) + '%');
};
resizeCards();
@@ -34,8 +33,8 @@ $(function()
})
$('#programTableList').on('sort.sortable', function(e, data)
{
var list = '';
{
var list = '';
for(i = 0; i < data.list.length; i++) list += $(data.list[i].item).attr('data-id') + ',';
$.post(createLink('project', 'updateOrder'), {'projects' : list, 'orderBy' : orderBy});
});
+62
View File
@@ -0,0 +1,62 @@
<?php
$lang->program->index = 'Project';
$lang->program->common = 'Project';
$lang->program->stage = 'Stage';
$lang->program->name = 'Name';
$lang->program->type = 'Type';
$lang->program->category = 'Category';
$lang->program->desc = 'Description';
$lang->program->code = 'Code';
$lang->program->begin = 'Begin';
$lang->program->end = 'End';
$lang->program->status = 'Status';
$lang->program->PM = 'Project Manager';
$lang->program->create = 'Create';
$lang->program->edit = 'Edit';
$lang->program->all = 'All';
$lang->program->start = 'Start';
$lang->program->finish = 'Finish';
$lang->program->suspend = 'Suspend';
$lang->program->delete = 'Delete';
$lang->program->close = 'Close';
$lang->program->activate = 'Activate';
$lang->program->budget = 'Budget';
$lang->program->dateRange = 'Date Range';
$lang->program->to = ' to ';
$lang->program->realFinished = 'Real finished';
$lang->program->realStarted = 'Real started';
$lang->program->bygrid = 'Grid';
$lang->program->bylist = 'List';
$lang->program->mine = 'Participated';
$lang->program->durationEstimation = 'Workload estimate';
$lang->program->noProgram = 'No projects';
$lang->program->unitList[''] = '';
$lang->program->unitList['yuan'] = '元';
$lang->program->unitList['dollar'] = 'Dollars';
$lang->program->typeList['scrum'] = "Scrum";
$lang->program->typeList['cmmi'] = "CMMI";
$lang->program->categoryList['single'] = "Single product";
$lang->program->categoryList['multiple'] = "Multiple products";
$lang->program->featureBar['all'] = 'All';
$lang->program->featureBar['doing'] = 'Going';
$lang->program->featureBar['wait'] = 'Waiting';
$lang->program->featureBar['suspended'] = 'Suspended';
$lang->program->featureBar['closed'] = 'Closed';
$lang->program->chooseProgramType = 'Choose management type';
$lang->program->nextStep = 'Next step';
$lang->program->hoursUnit = '%s hours';
$lang->program->membersUnit = '%s members';
$lang->program->lastIteration = 'Latest iterations';
$lang->program->ongoingStage = 'Ongoing stage';
$lang->program->scrum = 'Scrum';
$lang->program->scrumTitle = 'Scrum development full process project management';
$lang->program->scrumDesc = '<strong>Introduction: </strong>Iterate in small steps, release quickly<br><strong>Contains function points: </strong>Project overview, iterations, plans, stories, etc.';
$lang->program->cmmi = 'CMMI';
$lang->program->cmmiTitle = 'CMMI management';
$lang->program->cmmiDesc = '<strong>Introduction: </strong>Standardized management by stages<br><strong>Contains function points: </strong>Estimate, plan, stage, report, etc.';
+1 -1
View File
@@ -45,7 +45,7 @@ class project extends control
if($this->app->viewType != 'mhtml') unset($this->lang->project->menu->index);
$this->commonAction($projectID);
if(common::hasPriv('project', 'create')) $this->lang->modulePageActions = html::a($this->createLink('project', 'createguide'), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->project->create, '', "class='btn btn-primary'");
if(common::hasPriv('program', 'createguide')) $this->lang->modulePageActions = html::a($this->createLink('project', 'createguide'), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->project->create, '', "class='btn btn-primary' data-toggle='modal' data-type='ajax'");
$this->view->title = $this->lang->project->index;
$this->view->position[] = $this->lang->project->index;
+2 -2
View File
@@ -114,7 +114,7 @@ class projectModel extends model
}
else
{
if(common::hasPriv('project', 'create')) $projectIndex .= '<li>' . html::a(helper::createLink('project', 'create'), '<i class="icon icon-plus"></i> ' . $this->lang->project->create) . '</li>';
if(common::hasPriv('program', 'createguide')) $projectIndex .= '<li>' . html::a(helper::createLink('program', 'createguide'), '<i class="icon icon-plus"></i> ' . $this->lang->project->create, '', " data-toggle='modal' data-type='ajax'") . '</li>';
}
$projectIndex .= '</ul></div></div>';
@@ -364,7 +364,7 @@ class projectModel extends model
}
}
if(!dao::isError()) $this->loadModel('score')->create('project', 'create', $projectID);
if(!dao::isError()) $this->loadModel('score')->create('program', 'createguide', $projectID);
return $projectID;
}
}
+6 -2
View File
@@ -49,8 +49,12 @@ foreach($projects as $project)
?>
</div>
<div class="col-footer">
<?php echo html::a(helper::createLink('program', 'all'), '<i class="icon icon-cards-view muted"></i> ' . $lang->project->all, '', 'class="not-list-item"'); ?>
<a class='pull-right toggle-right-col not-list-item'><?php echo $lang->project->doneProjects?><i class='icon icon-angle-right'></i></a>
<?php echo html::a(helper::createLink('program', 'createguide'), '<i class="icon icon-plus"></i>' . $lang->project->create, '', 'class="not-list-item text-primary" data-toggle="modal" data-type="ajax"'); ?>
<div class='pull-right'>
<?php echo html::a(helper::createLink('program', 'index', 'status=all'), '<i class="icon icon-cards-view muted"></i> ' . $lang->project->all, '', 'class="not-list-item"'); ?>
<span class='text-muted muted'> &nbsp; | &nbsp; </span>
<a class='toggle-right-col not-list-item'><?php echo $lang->project->doneProjects?><i class='icon icon-angle-right'></i></a>
</div>
</div>
</div>
<div class="table-col col-right">
+1 -1
View File
@@ -22,7 +22,7 @@
</div>
<div class='btn-toolbar pull-right'>
<?php common::printLink('project', 'export', "status=$status&productID=$productID&orderBy=$orderBy", "<i class='icon-export muted'> </i>" . $lang->export, '', "class='btn btn-link export'")?>
<?php common::printLink('project', 'create', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary'")?>
<?php common::printLink('program', 'createguide', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary' data-toggle='modal' data-type='ajax'")?>
</div>
</div>
<div id='mainContent'>
+1 -1
View File
@@ -12,7 +12,7 @@
<?php include '../../common/view/header.html.php';?>
<?php if(empty($projects)):?>
<div class="table-empty-tip">
<p><span class="text-muted"><?php echo $lang->project->noProject;?></span> <?php common::printLink('project', 'create', '', "<i class='icon icon-plus'></i> " . $lang->project->create, '', "class='btn btn-info'");?></p>
<p><span class="text-muted"><?php echo $lang->project->noProject;?></span> <?php common::printLink('program', 'createguide', '', "<i class='icon icon-plus'></i> " . $lang->project->create, '', "class='btn btn-info' data-toggle='modal' data-type='ajax'");?></p>
</div>
<?php else:?>
<?php echo $this->fetch('block', 'dashboard', 'module=project');?>
+6 -6
View File
File diff suppressed because one or more lines are too long
+7 -21
View File
@@ -23,9 +23,6 @@
#dropMenu.show-right-col .col-left>.list-group{width:250px;max-width:260px;}
#dropMenu.show-right-col .col-right>.list-group{width:250px;max-width:260px;}
#dropMenu .col-footer{width:230px;}
#dropMenu.has-search-text .list-group{overflow-x:hidden;}
#dropMenu.has-search-text .col-footer{display:none;}
#dropMenu.has-search-text .col-right .list-group {margin-bottom: 0px;}
.main-actions .btn-toolbar .divider {margin-right:8px !important; margin-left: 8px !important;}
.main-actions .btn-toolbar .btn + .btn {margin-left: 8px !important;}
@@ -35,25 +32,14 @@
.side .leftmenu .nav-primary>li.active>a { background-color: #e7f1fc;}
.side .leftmenu .nav-primary>li.active>a:hover {background-color: #006af1;}
.label-severity:after{z-index:0 !important;}
.label-severity:after {z-index:0 !important;}
.modal-title{font-size: 14px;}
.modal-title {font-size: 14px;}
.fixed-footer .text {color: #fff;}
a.showMoreImage {
display: block;
height: 30px;
line-height: 30px;
background: #2B85C4;
position: absolute;
bottom: 0px;
width: 100%;
opacity: 0.7;
text-align: center;
color:#fff;
}
a.showMoreImage:hover{opacity: 1;}
a.showMoreImage {display: block; height: 30px; line-height: 30px; background: #2B85C4; position: absolute; bottom: 0px; width: 100%; opacity: 0.7; text-align: center; color:#fff;}
a.showMoreImage:hover {opacity: 1;}
.color-darkblue{background:rgb(0,0,139)}
.color-darkblue:hover{background:rgb(0,0,139)}
.color-darkblue:focus{background:rgb(0,0,139)}
.color-darkblue {background:rgb(0,0,139)}
.color-darkblue:hover {background:rgb(0,0,139)}
.color-darkblue:focus {background:rgb(0,0,139)}
File diff suppressed because one or more lines are too long