* Fix program module.

This commit is contained in:
Yagami
2020-05-14 14:39:52 +08:00
parent 2f249572f7
commit 9f1e075c82
11 changed files with 96 additions and 106 deletions
+4 -5
View File
@@ -121,7 +121,6 @@ $lang->common->common = '公有模块';
$lang->mainNav = new stdclass();
$lang->mainNav->my = '<i class="icon icon-menu-my"></i> 地盘|my|index|';
$lang->mainNav->program = '<i class="icon icon-menu-project"></i> 项目|program|index|';
$lang->mainNav->doclib = '<i class="icon icon-menu-doc"></i> 文档|doc|index|';
$lang->mainNav->reporting = '<i class="icon icon-menu-report"></i> 报表|report|index|';
$lang->mainNav->attend = '<i class="icon icon-file"></i> 办公|attend|personal|';
$lang->mainNav->system = '<i class="icon icon-menu-users"></i> 组织|custom|estimate|';
@@ -136,6 +135,7 @@ $lang->menu = new stdclass();
//$lang->menu->program = '主页|program|index';
$lang->menu->product = $lang->productCommon . '|product|index|locate=no';
$lang->menu->project = '迭代|project|index|locate=no';
$lang->menu->doc = '文档|doc|index|';
$lang->menu->qa = '测试|qa|index';
$lang->program = new stdclass();
@@ -469,7 +469,6 @@ $lang->job->menu = $lang->ci->menu;
/* 文档视图菜单设置。*/
$lang->doc = new stdclass();
$lang->doc->menu = new stdclass();
//$lang->doc->menu->createLib = array('link' => '<i class="icon icon-folder-plus"></i>&nbsp;添加文件夹|doc|createLib', 'float' => 'right');
$lang->svn = new stdclass();
$lang->git = new stdclass();
@@ -582,7 +581,6 @@ $lang->menugroup->testtask = 'qa';
$lang->menugroup->testsuite = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testreport = 'qa';
$lang->menugroup->doclib = 'doc';
$lang->menugroup->report = 'reporting';
$lang->menugroup->people = 'admin';
$lang->menugroup->dept = 'company';
@@ -620,6 +618,7 @@ $lang->navGroup->project = 'program';
$lang->navGroup->task = 'program';
$lang->navGroup->qa = 'program';
$lang->navGroup->bug = 'program';
$lang->navGroup->doc = 'program';
$lang->navGroup->testcase = 'program';
$lang->navGroup->testtask = 'program';
$lang->navGroup->testreport = 'program';
@@ -642,7 +641,6 @@ $lang->navGroup->auditplan = 'program';
$lang->navGroup->cm = 'program';
$lang->navGroup->nc = 'program';
$lang->navGroup->doc = 'doclib';
$lang->navGroup->report = 'reporting';
$lang->navGroup->stage = 'system';
@@ -1109,9 +1107,10 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
$lang->menu->cmmi = new stdclass();
$lang->menu->cmmi->workestimation = '估算|workestimation|index|program={PROGRAM}';
$lang->menu->cmmi->programplan = array('link' => '计划|programplan|browse|program={PROGRAM}', 'subModule' => 'programplan');
$lang->menu->cmmi->project = array('link' => $lang->projectCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,task,doc,');
$lang->menu->cmmi->project = array('link' => $lang->projectCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,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 = array('link' => '文档|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|';
+7 -40
View File
@@ -2078,36 +2078,6 @@ EOD;
return $response;
}
public static function processMenus($menus, $group)
{
global $app, $lang;
$processedMenus = array();
$moduleName = $app->rawModule;
if(isset($lang->menugroup->$moduleName)) $moduleName = $lang->menugroup->$moduleName;
foreach($menus as $name => $setting)
{
$vars = '';
$link = is_array($setting) ? $setting['link'] : $setting;
$link = explode('|', $link);
list($title, $module, $method) = $link;
if(isset($link[3])) $vars = $link[3];
$object = new stdclass();
$object->name = $name;
$object->title = $title;
$object->module = $module;
$object->method = $method;
$object->subModule = isset($setting['subModule']) ? $setting['subModule'] : '';
$object->alias = isset($setting['alias']) ? $setting['alias'] : '';
$object->link = $vars ? helper::createLink($module, $method, $vars) : helper::createLink($module, $method);
$object->subMenu = isset($lang->$moduleName->subMenu->$name) ? self::processMenus($lang->$moduleName->subMenu->$name, $group) : array();
$processedMenus[$name] = $object;
}
return $processedMenus;
}
public static function processMenuVars($menus)
{
global $app, $lang;
@@ -2136,11 +2106,10 @@ EOD;
public static function getProgramMainMenu($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->menu;
if($program->template == 'cmmi')
$template = $app->session->programTemplate;
if(!$template) return;
if($template == 'scrum') return $lang->menu;
if($template == 'cmmi')
{
unset($lang->menuOrder);
$lang->release->menu = new stdclass();
@@ -2154,11 +2123,9 @@ EOD;
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 self::processMenuVars($lang->moduleMenu->scrum->$moduleName);
if($program->template == 'cmmi')
$template = $app->session->programTemplate;
if(!$template) return;
if($template == 'cmmi')
{
$lang->$moduleName->menu = self::processMenuVars($lang->$moduleName->menu);
}
+25 -7
View File
@@ -7,6 +7,26 @@ class program extends control
$this->loadModel('project');
}
public function transfer($programID = 0)
{
$this->session->set('program', $programID);
$program = $this->project->getByID($programID);
$programProjects = $this->project->getPairsByProgram($programID);
$programProject = key($programProjects);
$this->session->set('programTemplate', $program->template);
if($program->template == 'cmmi')
{
$link = $this->createLink('programplan', 'browse', 'programID=' . $programID);
}
if($program->template == 'scrum')
{
$link = $programProject ? $this->createLink('project', 'task', 'projectID=' . $programProject) : $this->createLink('project', 'create', '', '', '', $programID);
}
die(js::locate($link, 'parent'));
}
/**
* Common actions.
*
@@ -29,14 +49,14 @@ class program extends control
if(common::hasPriv('program', 'create')) $this->lang->pageActions = html::a($this->createLink('program', 'createguide'), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->program->create, '', "class='btn btn-primary' data-toggle='modal' data-type='ajax'");
$programType = $this->cookie->programType;
$programType = $this->cookie->programType ? $this->cookie->programType : 'bylist';
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
if($programType === 'bygrid')
{
$projectList = $this->project->getProjectStats($status == 'byproduct' ? 'all' : $status, 0, 0, 30, $orderBy, $pager);
$projectList = $this->project->getProjectStats($status == 'byproduct' ? 'all' : $status, 0, 0, 30, $orderBy, $pager, 'program');
foreach($projectList as $projectID => $project)
{
$project->teamCount = count($this->project->getTeamMembers($project->id));
@@ -63,7 +83,7 @@ class program extends control
$this->display();
}
public function create($type = 'scrum', $copyProgramID = '')
public function create($template = 'scrum', $copyProgramID = '')
{
$this->commonAction();
@@ -97,8 +117,8 @@ class program extends control
$this->view->position[] = $this->lang->program->create;
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->pmUsers = $this->loadModel('user')->getPairs('noclosed|nodeleted|pmfirst');
$this->view->programs = array('' => '') + $this->program->getPairsByType($type);
$this->view->type = $type;
$this->view->programs = array('' => '') + $this->program->getPairsByTemplate($template);
$this->view->template = $template;
$this->view->name = $name;
$this->view->code = $code;
$this->view->team = $team;
@@ -356,7 +376,6 @@ class program extends control
$this->display();
}
/*
public function processErrors($errors)
{
foreach($errors as $field => $error)
@@ -366,5 +385,4 @@ class program extends control
return $errors;
}
*/
}
+1 -1
View File
@@ -5,5 +5,5 @@ $(function()
function setCopyProject(programID)
{
location.href = createLink('program', 'create', 'type=' + type + '&copyProgramID=' + programID);
location.href = createLink('program', 'create', 'template=' + template + '&copyProgramID=' + programID);
}
+2 -2
View File
@@ -36,8 +36,8 @@ $lang->program->unitList[''] = '';
$lang->program->unitList['yuan'] = '元';
$lang->program->unitList['dollar'] = 'Dollars';
$lang->program->typeList['scrum'] = "Scrum";
$lang->program->typeList['cmmi'] = "CMMI";
$lang->program->templateList['scrum'] = "Scrum";
$lang->program->templateList['cmmi'] = "CMMI";
$lang->program->categoryList['single'] = "Single product";
$lang->program->categoryList['multiple'] = "Multiple products";
+4 -3
View File
@@ -3,10 +3,11 @@ $lang->program->index = '项目主页';
$lang->program->common = '项目';
$lang->program->stage = '阶段';
$lang->program->name = '项目名称';
$lang->program->type = '管理方式';
$lang->program->template = '项目模板';
$lang->program->category = '项目类型';
$lang->program->desc = '项目描述';
$lang->program->code = '项目代号';
$lang->program->copy = '复制项目';
$lang->program->begin = '计划开始日期';
$lang->program->end = '计划完成日期';
$lang->program->status = '项目状态';
@@ -36,8 +37,8 @@ $lang->program->unitList[''] = '';
$lang->program->unitList['yuan'] = '元';
$lang->program->unitList['dollar'] = 'Dollars';
$lang->program->typeList['scrum'] = "Scrum";
$lang->program->typeList['cmmi'] = "瀑布";
$lang->program->templateList['scrum'] = "Scrum";
$lang->program->templateList['cmmi'] = "瀑布";
$lang->program->categoryList['single'] = "单产品项目";
$lang->program->categoryList['multiple'] = "多产品项目";
+31 -30
View File
@@ -10,19 +10,20 @@ class programModel extends model
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
->beginIF($status != 'all')->andWhere('status')->eq($status)->fi()
->beginIF($this->cookie->mine)
->andWhere('openedBy')->eq($this->app->user->account)
->andWhere('openedBy', true)->eq($this->app->user->account)
->orWhere('PM')->eq($this->app->user->account)
->markRight(1)
->fi()
->orderBy($orderBy)
->page($pager)
->fetchAll('id');
}
public function getPairsByType($type)
public function getPairsByTemplate($template)
{
return $this->dao->select('id, name')->from(TABLE_PROJECT)
->where('iscat')->eq(0)
->andWhere('type')->eq($type)
->andWhere('template')->eq($template)
->andWhere('program')->eq(0)
->andWhere('deleted')->eq(0)
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
@@ -62,38 +63,38 @@ class programModel extends model
$this->dao->update(TABLE_PROJECT)->set('`order`')->eq($programID * 5)->where('id')->eq($programID)->exec();
$this->file->updateObjectID($this->post->uid, $programID, 'project');
/*
$product = new stdclass();
$product->name = $project->name;
$product->project = $projectID;
$product->status = 'normal';
$product->createdBy = $this->app->user->account;
$product->createdDate = helper::now();
if($project->template == 'cmmi')
{
$product = new stdclass();
$product->name = $project->name;
$product->project = $programID;
$product->status = 'normal';
$product->createdBy = $this->app->user->account;
$product->createdDate = helper::now();
$this->dao->insert(TABLE_PRODUCT)->data($product)->exec();
$this->dao->insert(TABLE_PRODUCT)->data($product)->exec();
$productID = $this->dao->lastInsertId();
$this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($productID * 5)->where('id')->eq($productID)->exec();
*/
$productID = $this->dao->lastInsertId();
$this->dao->update(TABLE_PRODUCT)->set('`order`')->eq($productID * 5)->where('id')->eq($productID)->exec();
/* Create doc lib.
$this->app->loadLang('doc');
$lib = new stdclass();
$lib->product = $productID;
$lib->name = $this->lang->doclib->main['product'];
$lib->type = 'product';
$lib->main = '1';
$lib->acl = 'default';
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
/* Create doc lib. */
$this->app->loadLang('doc');
$lib = new stdclass();
$lib->product = $productID;
$lib->name = $this->lang->doclib->main['product'];
$lib->type = 'product';
$lib->main = '1';
$lib->acl = 'default';
$this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
$docLibID = $this->dao->lastInsertId();
$this->loadModel('doc')->syncDocModule($docLibID);
$docLibID = $this->dao->lastInsertId();
$this->loadModel('doc')->syncDocModule($docLibID);
$data = new stdclass();
$data->project = $projectID;
$data->product = $productID;
$this->dao->insert(TABLE_PROJECTPRODUCT)->data($data)->exec();
*/
$data = new stdclass();
$data->project = $programID;
$data->product = $productID;
$this->dao->insert(TABLE_PROJECTPRODUCT)->data($data)->exec();
}
return $programID;
}
+8 -8
View File
@@ -2,10 +2,10 @@
<div class='row cell' id='cards'>
<?php foreach ($projectList as $projectID => $project):?>
<div class='col' data-id='<?php echo $projectID?>'>
<div class='panel' data-url='<?php echo $this->createLink('project', 'task', "projectID=$project->id");?>'>
<div class='panel' data-url='<?php echo $this->createLink('program', 'transfer', "projectID=$project->id");?>'>
<div class='panel-heading'>
<strong class='project-name' title='<?php echo $project->name;?>'><?php echo $project->name;?></strong>
<?php if($project->type === 'cmmi'): ?>
<?php if($project->template === 'cmmi'): ?>
<span class='project-type-label label label-warning label-outline'><?php echo $lang->program->cmmi; ?></span>
<?php else: ?>
<span class='project-type-label label label-info label-outline'><?php echo $lang->program->scrum; ?></span>
@@ -31,13 +31,13 @@
<span><i class='icon icon-clock'></i> <?php printf($lang->program->hoursUnit, $project->hours->totalEstimate); ?></span>
<span><i class='icon icon-cost'></i> <?php echo $project->budget . '' . zget($lang->program->unitList, $project->budgetUnit);?></span>
</div>
<?php if($project->type === 'cmmi'): ?>
<?php //if($project->template === 'cmmi'): ?>
<div class='project-detail project-stages'>
<p class='text-muted'><?php echo $lang->program->ongoingStage; ?></p>
<!--p class='text-muted'><?php echo $lang->program->ongoingStage; ?></p-->
<div class='label label-outline'><?php echo zget($lang->project->statusList, $project->status);?></div>
</div>
<?php else: ?>
<div class='project-detail project-iteration'>
<?php //else: ?>
<!--div class='project-detail project-iteration'>
<p class='text-muted'><?php echo $lang->program->lastIteration; ?></p>
<div class='row'>
<div class='col-xs-5'><?php echo $project->name; ?></div>
@@ -49,8 +49,8 @@
</div>
</div>
</div>
</div>
<?php endif; ?>
</div -->
<?php //endif; ?>
</div>
</div>
</div>
+3 -3
View File
@@ -14,7 +14,7 @@
<th><?php common::printOrderLink('name', $orderBy, $vars, $lang->program->name);?></th>
<th class='w-100px'><?php common::printOrderLink('status', $orderBy, $vars, $lang->project->status);?></th>
<th class='w-100px'><?php common::printOrderLink('category', $orderBy, $vars, $lang->program->category);?></th>
<th class='w-100px'><?php common::printOrderLink('type', $orderBy, $vars, $lang->program->type);?></th>
<th class='w-100px'><?php common::printOrderLink('template', $orderBy, $vars, $lang->program->template);?></th>
<th class='w-100px'><?php common::printOrderLink('begin', $orderBy, $vars, $lang->program->begin);?></th>
<th class='w-100px'><?php common::printOrderLink('end', $orderBy, $vars, $lang->program->end);?></th>
<th class='w-100px'><?php common::printOrderLink('budget', $orderBy, $vars, $lang->program->budget);?></th>
@@ -38,11 +38,11 @@
</td>
<td class='text-left'><?php echo $project->code;?></td>
<td class='text-left' title='<?php echo $project->name?>'>
<?php echo html::a($this->createLink('project', 'task', 'projectID=' . $project->id), $project->name);?>
<?php echo html::a($this->createLink('program', 'transfer', 'projectID=' . $project->id), $project->name);?>
</td>
<td class='c-status'><span class="status-project status-<?php echo $project->status?>"><?php echo zget($lang->project->statusList, $project->status, '');?></span></td>
<td class='text-left'><?php echo zget($lang->program->categoryList, $project->category, '');?></td>
<td class='text-left'><?php echo zget($lang->program->typeList, $project->type, '');?></td>
<td class='text-left'><?php echo zget($lang->program->templateList, $project->template, '');?></td>
<td class='text-center'><?php echo $project->begin;?></td>
<td class='text-center'><?php echo $project->end;?></td>
<td class='text-left'><?php echo $project->budget . ' ' . zget($lang->program->unitList, $project->budgetUnit);?></td>
+8 -6
View File
@@ -39,14 +39,14 @@
<div class='main-header'>
<h2><?php echo $lang->program->create;?></h2>
<div class="pull-right btn-toolbar">
<button type='button' class='btn btn-link' data-toggle='modal' data-target='#copyProjectModal'><?php echo html::icon($lang->icons['copy'], 'muted') . ' ' . $lang->project->copy;?></button>
<button type='button' class='btn btn-link' data-toggle='modal' data-target='#copyProjectModal'><?php echo html::icon($lang->icons['copy'], 'muted') . ' ' . $lang->program->copy;?></button>
</div>
</div>
<form class='form-indicator main-form form-ajax' method='post' target='hiddenwin' id='dataform'>
<table class='table table-form'>
<tr>
<th class='w-120px'><?php echo $lang->program->type;?></th>
<td><?php echo zget($lang->program->typeList, $type, '');?></td><td></td><td></td>
<th class='w-120px'><?php echo $lang->program->template;?></th>
<td><?php echo zget($lang->program->templateList, $template, '');?></td><td></td><td></td>
</tr>
<tr>
<th><?php echo $lang->program->name;?></th>
@@ -57,10 +57,12 @@
<th><?php echo $lang->program->code;?></th>
<td><?php echo html::input('code', $code, "class='form-control' required");?></td><td></td><td></td>
</tr>
<?php if($template == 'cmmi'):?>
<tr>
<th><?php echo $lang->program->category;?></th>
<td><?php echo html::select('category', $lang->program->categoryList, '', "class='form-control'");?></td><td></td><td></td>
</tr>
<?php endif;?>
<tr>
<th><?php echo $lang->program->PM;?></th>
<td><?php echo html::select('PM', $pmUsers, '', "class='form-control chosen'");?></td>
@@ -81,7 +83,7 @@
</td>
<td colspan='2'></td>
</tr>
<?php if($type == 'scrum'):?>
<?php if($template == 'scrum'):?>
<tr>
<th><?php echo $lang->project->days;?></th>
<td>
@@ -99,7 +101,7 @@
<tr class='hide'>
<th><?php echo $lang->project->status;?></th>
<td><?php echo html::hidden('status', 'wait');?></td>
<td><?php echo html::hidden('type', $type);?></td>
<td><?php echo html::hidden('template', $template);?></td>
<td></td>
<td></td>
</tr>
@@ -158,5 +160,5 @@
</div>
</div>
</div>
<?php js::set('type', $type);?>
<?php js::set('template', $template);?>
<?php include '../../common/view/footer.html.php';?>
+3 -1
View File
@@ -29,10 +29,12 @@
<th><?php echo $lang->program->code;?></th>
<td><?php echo html::input('code', $project->code, "class='form-control' required");?></td><td></td><td></td>
</tr>
<?php if($project->template == 'cmmi'):?>
<tr>
<th><?php echo $lang->program->category;?></th>
<td><?php echo html::select('category', $lang->program->categoryList, $project->category, "class='form-control'");?></td><td></td><td></td>
</tr>
<?php endif;?>
<tr>
<th><?php echo $lang->program->PM;?></th>
<td><?php echo html::select('PM', $pmUsers, $project->PM, "class='form-control chosen'");?></td>
@@ -53,7 +55,7 @@
</td>
<td colspan='2'></td>
</tr>
<?php if($project->type == 'scrum'):?>
<?php if($project->template == 'scrum'):?>
<tr>
<th><?php echo $lang->project->days;?></th>
<td>