* Adjusting programplan and project and panel module code.

This commit is contained in:
leiyong
2020-10-16 14:28:52 +08:00
parent 0cbfddb802
commit 55e1126f0b
31 changed files with 1480 additions and 213 deletions
+2 -1
View File
@@ -1,7 +1,8 @@
ALTER TABLE `zt_project`
DROP `isCat`,
DROP `catID`,
ADD `model` char(30) NOT NULL AFTER `id`,
ADD `project` mediumint(8) NOT NULL DEFAULT 0 AFTER `id`;
ADD `model` char(30) NOT NULL AFTER `project`,
CHANGE `type` `type` char(30) NOT NULL DEFAULT 'sprint' AFTER `model`,
ADD `product` varchar(20) NOT NULL DEFAULT 'single' AFTER `type`,
ADD `lifetime` char(30) NOT NULL AFTER `product`,
+9 -9
View File
@@ -170,19 +170,19 @@ $lang->productplan->menu = $lang->product->menu;
/* System menu. */
$lang->system = new stdclass();
$lang->system->menu = new stdclass();
$lang->system->menu->estimate = array('link' => 'Estimate|custom|estimate|');
$lang->system->menu->stage = array('link' => 'Stage|stage|browse|', 'subModule' => 'stage');
$lang->system->menu->subject = array('link' => 'Subject|subject|browse|');
$lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|');
$lang->system->menu->custom = array('link' => 'Custom|custom|configurewaterfall|');
$lang->system->dividerMenu = ',auditcl,subject,';
$lang->system->menu->estimate = array('link' => 'Estimate|custom|estimate|');
$lang->system->menu->stage = array('link' => 'Stage|stage|browse|', 'subModule' => 'stage');
$lang->system->menu->subject = array('link' => 'Subject|subject|browse|');
$lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|');
$lang->system->menu->custom = array('link' => 'Custom|custom|configurewaterfall|');
$lang->system->dividerMenu = ',auditcl,subject,';
if(isset($_COOKIE['systemModel']) and $_COOKIE['systemModel'] == 'scrum')
{
$lang->system->menu = new stdclass();
$lang->system->menu->subject = array('link' => 'Subject|subject|browse|');
$lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|');
$lang->system->menu->custom = array('link' => 'Custom|custom|configurescrum|');
$lang->system->menu->subject = array('link' => 'Subject|subject|browse|');
$lang->system->menu->holiday = array('link' => 'Holiday|holiday|browse|');
$lang->system->menu->custom = array('link' => 'Custom|custom|configurescrum|');
$lang->mainNav->system = '<i class="icon icon-menu-users"></i> System|subject|browse|';
unset($lang->system->dividerMenu);
+1
View File
@@ -84,6 +84,7 @@ class personnel extends control
$this->program->setPGMViewMenu($programID);
$inputPersonnel = $this->personnel->getInputPersonnel($programID, $browseType, $orderBy);
echo array_keys($inputPersonnel);
$this->view->title = $this->lang->personnel->putInto;
$this->view->position[] = $this->lang->personnel->putInto;
+20
View File
@@ -0,0 +1,20 @@
<?php
$lang->personnel->accessible = '可访问人员列表';
$lang->personnel->putInto = '投入人员列表';
$lang->personnel->department = '部门';
$lang->personnel->realName = '真实姓名';
$lang->personnel->userName = '用户名';
$lang->personnel->job = '岗位';
$lang->personnel->genders = '性别';
$lang->personnel->project = '项目';
$lang->personnel->sprint = '迭代/阶段';
$lang->personnel->user = '用户';
$lang->personnel->role = '角色';
$lang->personnel->search = '搜索';
$lang->personnel->program = '项目集';
$lang->personnel->emptyTip = '暂无';
$lang->personnel->inputLabel['all'] = '全部';
$lang->personnel->inputLabel['parent'] = '直属项目';
$lang->personnel->inputLabel['exist'] = '非空项目';
+14 -14
View File
@@ -1,18 +1,18 @@
<?php
$lang->personnel->accessible = '可访问人员列表';
$lang->personnel->putInto = '投入人员列表';
$lang->personnel->department = '部门';
$lang->personnel->realName = '真实姓名';
$lang->personnel->userName = '用户名';
$lang->personnel->job = '岗位';
$lang->personnel->genders = '性别';
$lang->personnel->project = '项目';
$lang->personnel->sprint = '迭代/阶段';
$lang->personnel->user = '用户';
$lang->personnel->role = '角色';
$lang->personnel->search = '搜索';
$lang->personnel->program = '项目集';
$lang->personnel->emptyTip = '暂无';
$lang->personnel->accessible = '可访问人员列表';
$lang->personnel->putInto = '投入人员列表';
$lang->personnel->department = '部门';
$lang->personnel->realName = '真实姓名';
$lang->personnel->userName = '用户名';
$lang->personnel->job = '岗位';
$lang->personnel->genders = '性别';
$lang->personnel->project = '项目';
$lang->personnel->sprint = '迭代/阶段';
$lang->personnel->user = '用户';
$lang->personnel->role = '角色';
$lang->personnel->search = '搜索';
$lang->personnel->program = '项目集';
$lang->personnel->emptyTip = '暂无';
$lang->personnel->inputLabel['all'] = '全部';
$lang->personnel->inputLabel['parent'] = '直属项目';
+20
View File
@@ -0,0 +1,20 @@
<?php
$lang->personnel->accessible = '可訪問人員列表';
$lang->personnel->putInto = '投入人員列表';
$lang->personnel->department = '部門';
$lang->personnel->realName = '真實姓名';
$lang->personnel->userName = '用戶名';
$lang->personnel->job = '崗位';
$lang->personnel->genders = '性別';
$lang->personnel->project = '項目';
$lang->personnel->sprint = '迭代/階段';
$lang->personnel->user = '用戶';
$lang->personnel->role = '角色';
$lang->personnel->search = '搜索';
$lang->personnel->program = '項目集';
$lang->personnel->emptyTip = '暫無';
$lang->personnel->inputLabel['all'] = '全部';
$lang->personnel->inputLabel['parent'] = '直屬項目';
$lang->personnel->inputLabel['exist'] = '非空項目';
+65 -22
View File
@@ -49,6 +49,7 @@ class personnelModel extends model
return $personnelList;
}
/**
* Access to program set input staff.
*
@@ -73,30 +74,13 @@ class personnelModel extends model
$personnelList['projects'] = $projects;
if(empty($projects)) return $personnelList;
/* Get the sprint or stage under the project. */
$projectKeys = array_keys($projects);
$sprints = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT)
->where('type')->in('stage,sprint')
->andWhere('parent')->in($projectKeys)
->andWhere('deleted')->eq('0')
->fetchGroup('parent', 'id');
/* Get team members for projects, stage, sprints. */
$sprintKeys = array(0);
foreach($sprints as $sprint)
{
foreach($sprint as $id => $data) $sprintKeys[] = $id;
}
$teams = $this->dao->select('id,root,type,role,account')->from(TABLE_TEAM)
->where('root')->in($sprintKeys)
->andWhere('type')->in('project,stage,sprint')
->fetchGroup('root', 'id');
$programNameList = $this->getProgramPairs();
$personnelList['sprints'] = $sprints;
$personnelList['teams'] = $teams;
$teams = $this->getTeams($projects);
$personnelList['stages'] = $teams['stages'];
$personnelList['sprints'] = $teams['sprints'];
$personnelList['teams'] = $teams['teams'];
/* Get the program name for each level. */
$programNameList = $this->getProgramPairs();
foreach($personnelList['projects'] as $id => $project)
{
$path = explode(',', $project->path);
@@ -114,6 +98,65 @@ class personnelModel extends model
return $personnelList;
}
/**
* Get team members for projects, stage, sprints.
*
* @param string $projects
* @access public
* @return object
*/
public function getTeams($projects)
{
$sprintParent = array();
$stageParent = array();
foreach($projects as $project)
{
$project->model == 'scrum' ? $sprintParent[] = $project->id : $stageParent[] = $project->id;
}
$sprints = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT)
->where('type')->eq('sprint')
->andWhere('parent')->in($sprintParent)
->andWhere('deleted')->eq('0')
->fetchGroup('parent', 'id');
$stages = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT)
->where('type')->eq('stage')
->andWhere('parent')->in($stageParent)
->andWhere('deleted')->eq('0')
->fetchGroup('parent', 'id');
$rootIDList = array();
foreach($stages as $stage)
{
foreach($stage as $stageFields)
{
$stageFields->children = $this->dao->select('id,model,type,template,parent,path,name')->from(TABLE_PROJECT)
->where('type')->eq('stage')
->andWhere('grade')->eq('2')
->andWhere('path')->like(",$stageFields->id,%")
->andWhere('deleted')->eq('0')
->fetchAll('id');
$childrenIDList = array_keys($stageFields->children);
$rootIDList = array_merge($childrenIDList, $rootIDList);
$rootIDList[] = $stageFields->id;
}
}
foreach($sprints as $sprint)
{
foreach($sprint as $id => $data) $rootIDList[] = $id;
}
$teams = $this->dao->select('t1.id,t1.root,t1.type,t1.role,t1.account,t2.realname')->from(TABLE_TEAM)->alias('t1')
->leftJoin(TABLE_USER)->alias('t2')->on('t1.root=t2.id')
->where('t1.root')->in($rootIDList)
->andWhere('t1.type')->in('stage,sprint')
->fetchGroup('root', 'id');
return array('sprints' => $sprints, 'stages' => $stages, 'teams' => $teams);
}
/**
* Get all program set names.
*
+52 -23
View File
@@ -1,6 +1,6 @@
<?php
/**
* The html template file of putinto method of personnel module of ZenTaoPMS.
* The html template file of putInto method of personnel module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
@@ -26,7 +26,7 @@
</div>
</div>
<div id="mainContent" class="main-row fade">
<?php if(isset($inputPersonnel['projects'])):?>
<?php if(!empty($inputPersonnel['projects'])):?>
<div class="main-col">
<form class="main-table table-personnel" action="" data-ride="table">
<?php $vars = "programID=$programID&browseType=$browseType&orderBy=%s";?>
@@ -44,44 +44,73 @@
<?php foreach($inputPersonnel['projects'] as $project):?>
<?php
$sprintRow = isset($inputPersonnel['sprints'][$project->id]) ? count($inputPersonnel['sprints'][$project->id]) : 0;
$teamMemberRow = 0;
$stageRow = isset($inputPersonnel['stages'][$project->id]) ? count($inputPersonnel['stages'][$project->id]) : 0;
if($browseType == 'exist' && $sprintRow == 0 && $stageRow == 0) continue; // If the stage or sprint is empty, skip it.
if($browseType == 'exist' && $sprintRow == 0) continue; // If the stage or sprint is empty, skip it.
$teamMemberRow = 0;
if($sprintRow > 0)
{
foreach($inputPersonnel['sprints'][$project->id] as $sprint)
{
$teamMemberRow += isset($inputPersonnel['teams'][$sprint->id]) ? count($inputPersonnel['teams'][$sprint->id]) : 0;
$teamMemberRow += isset($inputPersonnel['teams'][$sprint->id]) ? count($inputPersonnel['teams'][$sprint->id]) : 0;
}
}
$projectRow = $sprintRow + $teamMemberRow;
if($stageRow > 0)
{
foreach($inputPersonnel['stages'][$project->id] as $stages)
{
$teamMemberRow += isset($inputPersonnel['teams'][$stages->id]) ? count($inputPersonnel['teams'][$stages->id]) : 0;
}
}
$projectRow = $sprintRow + $stageRow + $teamMemberRow;
?>
<tr>
<td class="text-ellipsis" rowspan="<?php echo $projectRow + 1;?>" title="<?php echo $project->programName;?>"><?php echo $project->programName;?></td>
<td class="text-ellipsis" rowspan="<?php echo $projectRow + 1;?>" title="<?php echo $project->name;?>"><?php echo $project->name;?></td>
<?php if($sprintRow == 0):?>
<?php if($sprintRow == 0 && $stageRow == 0):?>
<td></td>
<td></td>
<td></td>
<?php endif;?>
</tr>
<?php if($sprintRow == 0) continue;?>
<?php foreach($inputPersonnel['sprints'][$project->id] as $sprint):?>
<tr>
<td class="text-ellipsis" rowspan="<?php echo count($inputPersonnel['teams'][$sprint->id]) + 1;?>" title="<?php echo $sprint->name;?>"><?php echo $sprint->name;?></td>
<?php if(!isset($inputPersonnel['teams'][$sprint->id])):?>
<td></td>
<td></td>
<?php if($sprintRow > 0):;?>
<?php foreach($inputPersonnel['sprints'][$project->id] as $sprint):?>
<?php $teamRow = isset($inputPersonnel['teams'][$sprint->id]) ? $inputPersonnel['teams'][$sprint->id] : 0;?>
<tr>
<td class="text-ellipsis" rowspan="<?php echo $teamRow + 1;?>" title="<?php echo $sprint->name;?>"><?php echo $sprint->name;?></td>
<td></td>
<td></td>
</tr>
<?php if($teamRow):?>
<?php foreach($inputPersonnel['teams'][$sprint->id] as $team):?>
<tr>
<td><?php echo $team->realname;?></td>
<td><?php echo $team->role;?></td>
</tr>
<?php endforeach;?>
<?php endif;?>
<?php endforeach;?>
<?php endif;?>
<?php if($stageRow > 0):?>
<?php foreach($inputPersonnel['stages'][$project->id] as $stages):?>
<?php $teamRow = isset($inputPersonnel['teams'][$stages->id]) ? $inputPersonnel['teams'][$stages->id] : 0;?>
<tr>
<td class="text-ellipsis" rowspan="<?php echo $teamRow + 1;?>" title="<?php echo $stages->name;?>"><?php echo $stages->name;?></td>
<td></td>
<td></td>
</tr>
<?php if($teamRow):?>
<?php foreach($inputPersonnel['teams'][$stages->id] as $team):?>
<tr>
<td><?php echo $team->realname;?></td>
<td><?php echo $team->role;?></td>
</tr>
<?php endforeach;?>
<?php endif;?>
</tr>
<?php if(!isset($inputPersonnel['teams'][$sprint->id])) continue;?>
<?php foreach($inputPersonnel['teams'][$sprint->id] as $team):?>
<tr>
<td><?php echo $team->account;?></td>
<td><?php echo $team->role;?></td>
</tr>
<?php endforeach;?>
<?php endforeach;?>
<?php endforeach;?>
<?php endif;?>
<?php endforeach;?>
</tbody>
</table>
+211
View File
@@ -0,0 +1,211 @@
<?php
/* Actions. */
$lang->program->createGuide = 'Select Template';
$lang->program->PRJIndex = 'Dashboard';
$lang->program->PRJHome = 'Home';
$lang->program->PRJCreate = 'Create Project';
$lang->program->PRJEdit = 'Edit';
$lang->program->PRJBatchEdit = 'Batch Edit';
$lang->program->PRJBrowse = 'Projects';
$lang->program->PRJAll = 'All';
$lang->program->PRJStart = 'Start';
$lang->program->PRJFinish = 'Finish';
$lang->program->PRJSuspend = 'Suspend';
$lang->program->PRJDelete = 'Delete';
$lang->program->PRJClose = 'Close';
$lang->program->PRJActivate = 'Activate';
$lang->program->PRJGroup = 'Privilege Group';
$lang->program->PRJCreateGroup = 'Create Group';
$lang->program->PRJEditGroup = 'Edit Group';
$lang->program->PRJCopyGroup = 'Copy Group';
$lang->program->PRJManageView = 'Manage View';
$lang->program->PRJManagePriv = 'Manage Privilege';
$lang->program->PRJManageMembers = 'Manage Team';
$lang->program->export = 'Export';
$lang->program->PRJManageGroupMember = 'Manage Group';
$lang->program->PRJModuleSetting = 'Program Settings';
$lang->program->PRJModuleOpen = 'Program Name';
$lang->program->PRJUpdateOrder = 'Order';
$lang->program->PRJSort = 'Order';
/* Fields. */
$lang->program->common = 'Project';
$lang->program->stage = 'Stage';
$lang->program->PRJName = 'Name';
$lang->program->PRJModel = 'Template';
$lang->program->PRJCategory = 'Category';
$lang->program->PRJDesc = 'Description';
$lang->program->PRJCode = 'Code';
$lang->program->PRJCopy = 'Copy';
$lang->program->begin = 'Begin';
$lang->program->end = 'End';
$lang->program->PRJStatus = 'Status';
$lang->program->PRJPM = 'Manager';
$lang->program->PRJBudget = 'Budget';
$lang->program->PRJTemplate = 'Template';
$lang->program->PRJEstimate = 'Estimates';
$lang->program->PRJConsume = 'Cost';
$lang->program->PRJSurplus = 'Left';
$lang->program->PRJProgress = 'Progress';
$lang->program->dateRange = 'Duration';
$lang->program->to = ' to ';
$lang->program->realEnd = 'Actual End';
$lang->program->realBegan = 'Actual Began';
$lang->program->bygrid = 'Kanban';
$lang->program->bylist = 'List';
$lang->program->mine = 'My';
$lang->program->setPlanduration = 'Set Duration';
$lang->program->auth = 'Access Control';
$lang->program->durationEstimation = 'Estimated Workload';
$lang->program->teamCount = 'Man';
$lang->program->leftStories = 'Left Stories';
$lang->program->leftTasks = 'Left Tasks';
$lang->program->leftBugs = 'Left Bugs';
$lang->program->PRJChildren = 'Child Project';
$lang->program->PRJParent = 'Parent Project';
$lang->program->allStories = 'All Stories';
$lang->program->doneStories = 'Finished Stories';
$lang->program->allInput = 'Total Input';
$lang->program->weekly = 'Program Weekly';
$lang->program->pv = 'PV';
$lang->program->ev = 'EV';
$lang->program->sv = 'SV%';
$lang->program->ac = 'AC';
$lang->program->cv = 'CV%';
$lang->program->PRJTeamCount = 'Team';
$lang->program->PRJLongTime = 'Long-Term Project';
$lang->program->unitList[''] = '';
$lang->program->unitList['yuan'] = 'Yuan';
$lang->program->unitList['dollar'] = 'Dollars';
$lang->program->modelList['scrum'] = "Scrum";
$lang->program->modelList['waterfall'] = "CMMI";
$lang->program->PRJCategoryList['single'] = "Single product";
$lang->program->PRJCategoryList['multiple'] = "Multiple products";
$lang->program->PRJLifeTimeList['short'] = "Short-Term";
$lang->program->PRJLifeTimeList['long'] = "Long-Term";
$lang->program->PRJLifeTimeList['ops'] = "DevOps";
$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->PRJAclList['open'] = "Default (Users who can visit {$lang->projectCommon} can access it)";
$lang->program->PRJAclList['private'] = 'Private (For team members only)';
$lang->program->PRJAclList['custom'] = 'Custom (Team members and the whitelist users can access it)';
$lang->program->PRJPrivwayList['extend'] = 'Inherit (program privilege and company privilege)';
$lang->program->PRJPrivwayList['reset'] = 'Reset (program privilege only)';
$lang->program->statusList['wait'] = 'Waiting';
$lang->program->statusList['doing'] = 'Doing';
$lang->program->statusList['suspended'] = 'Suspended';
$lang->program->statusList['closed'] = 'Closed';
$lang->program->noPRJ = 'No project.';
$lang->program->accessDenied = 'Access denied!';
$lang->program->chooseProgramType = 'Select a method';
$lang->program->nextStep = 'Next step';
$lang->program->hoursUnit = '%s hours';
$lang->program->membersUnit = '%s men';
$lang->program->lastIteration = 'Recent iterations';
$lang->program->ongoingStage = 'Ongoing stage';
$lang->program->scrum = 'Scrum';
$lang->program->waterfall = 'CMMI';
$lang->program->waterfallTitle = 'CMMI';
$lang->program->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.';
$lang->program->hasChildren = 'It has child projects. You cannot delete it.';
$lang->program->confirmDelete = "Do you want to delete [%s]?";
$lang->program->emptyPM = 'No manager';
$lang->program->cannotChangeToCat = "It is not empty, so you cannot change it to a parent.";
$lang->program->cannotCancelCat = "It has child projects, so you cannot unmark the parent.";
$lang->program->parentBeginEnd = "Parent begin&end date: %s ~ %s";
$lang->program->parentBudget = "Parent budget: %s";
$lang->program->beginLetterParent = "Parent begin date: %s, begin date should be >= parent begin date.";
$lang->program->endGreaterParent = "Parent end date: %s, end date should be <= parent end date.";
$lang->program->beginGreateChild = "Child earliest begin: %s, parent begin date <= child earliest begin date.";
$lang->program->endLetterChild = "Child latest end: %s, parent end date >= child latest end date.";
$lang->program->childLongTime = "If a child as long-term projects, the parent should be long-term too.";
$lang->program->readjustTime = 'Change the project begin&end date.';
$lang->program->PRJProgramTitle['0'] = 'Hide';
$lang->program->PRJProgramTitle['base'] = 'Base-level program only';
$lang->program->PRJProgramTitle['end'] = 'End-level program only';
$lang->program->PRJNoProgram = 'No program';
$lang->program->PRJAccessDenied = 'Access denied to this program';
$lang->program->PRJChooseProgramType = 'Select management type';
$lang->program->scrumTitle = 'Agile Development Management';
$lang->program->PRJCannotCreateChild = 'The project has contents, so you cannot add a child project. You can create a parent project for this one and then add a child project for the parent project.';
$lang->program->PRJHasChildren = 'This project has a child project, so it cannot be deleted.';
$lang->program->PRJConfirmDelete = 'Do you want to delete this project?';
$lang->program->PRJCannotChangeToCat = "The project has contents, so you cannot it to a parent project.";
$lang->program->PRJCannotCancelCat = "There are child projects of this project. You cannot cancel the parent project mark.";
$lang->program->PRJParentBeginEnd = "The begin and end date of the parent project: %s ~ %s";
$lang->program->PRJParentBudget = "The budget of the parent project: %s";
$lang->program->PRJBeginLetterParent = "The begin date of the parent project: %s. It cannot be < the begin date of its parent project.";
$lang->program->PRJEndGreaterParent = "The end date of the parent project: %s. It cannot be > the end date of its parent project.";
$lang->program->PRJBeginGreateChild = "The earliest begin date of a child project: %s. The begin date of its parent project cannot be > the earliest begin date of a child project.";
$lang->program->PRJEndLetterChild = "The latest end date of a child project: %s. The end date of its parent project cannot be < the latest end date of child project.";
$lang->program->PRJChildLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project.";
/* Actions. */
$lang->program->PGMCommon = 'Program';
$lang->program->PGMIndex = 'Home';
$lang->program->PGMCreate = 'Create Program';
$lang->program->PGMCreateGuide = 'Select Template';
$lang->program->PGMEdit = 'Edit Program';
$lang->program->PGMBrowse = 'Programs';
$lang->program->PGMProduct = 'Products';
$lang->program->PGMProject = 'Projects';
$lang->program->PGMAll = 'All Programs';
$lang->program->PGMStart = 'Start';
$lang->program->PGMFinish = 'Finish';
$lang->program->PGMSuspend = 'Suspend';
$lang->program->PGMDelete = 'Delete';
$lang->program->PGMClose = 'Close';
$lang->program->PGMView = 'Overview';
$lang->program->PGMActivate = 'Activate';
$lang->program->PGMGroup = 'Privilege Group';
$lang->program->PGMCreateGroup = 'Create Group';
$lang->program->PGMEditGroup = 'Edit Group';
$lang->program->PGMCopyGroup = 'Copy Group';
$lang->program->PGMManageView = 'Manage View';
$lang->program->PGMManagePriv = 'Manage Privilege';
$lang->program->PGMManageMembers = 'Program Team';
$lang->program->PGMExport = 'Export';
$lang->program->PGMManageGroupMember = 'Manage Group';
/* Fields. */
$lang->program->PGMName = 'Name';
$lang->program->PGMTemplate = 'Template';
$lang->program->PGMCategory = 'Type';
$lang->program->PGMDesc = 'Description';
$lang->program->PGMCode = 'Code';
$lang->program->PGMCopy = 'Copy Program';
$lang->program->PGMStatus = 'Status';
$lang->program->PGMPM = 'Manager';
$lang->program->PGMBudget = 'Budget';
$lang->program->PGMProgress = 'Progress';
$lang->program->PGMChildren = 'Child';
$lang->program->PGMParent = 'Parent';
$lang->program->PGMAllInput = 'Input';
$lang->program->PGMTeamCount = 'Team';
$lang->program->PGMLongTime = 'Long-Term';
$lang->program->noPGM = 'No program.';
$lang->program->PGMShowClosed = 'Closed programs.';i
$lang->program->PGMAclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->PGMAclList['private'] = "Private(for the program team only)";
$lang->program->PGMAclList['custom'] = "Custom(the program team and the whitelist users can access it)";
$lang->program->PGMAuthList['extend'] = 'Inherit(program privileges and company privileges)';
$lang->program->PGMAuthList['reset'] = 'Reset(program privileges only)';
$lang->program->PGMFeatureBar['all'] = 'All';
+211
View File
@@ -0,0 +1,211 @@
<?php
/* Actions. */
$lang->program->createGuide = 'Select Template';
$lang->program->PRJIndex = 'Dashboard';
$lang->program->PRJHome = 'Home';
$lang->program->PRJCreate = 'Create Project';
$lang->program->PRJEdit = 'Edit';
$lang->program->PRJBatchEdit = 'Batch Edit';
$lang->program->PRJBrowse = 'Projects';
$lang->program->PRJAll = 'All';
$lang->program->PRJStart = 'Start';
$lang->program->PRJFinish = 'Finish';
$lang->program->PRJSuspend = 'Suspend';
$lang->program->PRJDelete = 'Delete';
$lang->program->PRJClose = 'Close';
$lang->program->PRJActivate = 'Activate';
$lang->program->PRJGroup = 'Privilege Group';
$lang->program->PRJCreateGroup = 'Create Group';
$lang->program->PRJEditGroup = 'Edit Group';
$lang->program->PRJCopyGroup = 'Copy Group';
$lang->program->PRJManageView = 'Manage View';
$lang->program->PRJManagePriv = 'Manage Privilege';
$lang->program->PRJManageMembers = 'Manage Team';
$lang->program->export = 'Export';
$lang->program->PRJManageGroupMember = 'Manage Group';
$lang->program->PRJModuleSetting = 'Program Settings';
$lang->program->PRJModuleOpen = 'Program Name';
$lang->program->PRJUpdateOrder = 'Order';
$lang->program->PRJSort = 'Order';
/* Fields. */
$lang->program->common = 'Project';
$lang->program->stage = 'Stage';
$lang->program->PRJName = 'Name';
$lang->program->PRJModel = 'Template';
$lang->program->PRJCategory = 'Category';
$lang->program->PRJDesc = 'Description';
$lang->program->PRJCode = 'Code';
$lang->program->PRJCopy = 'Copy';
$lang->program->begin = 'Begin';
$lang->program->end = 'End';
$lang->program->PRJStatus = 'Status';
$lang->program->PRJPM = 'Manager';
$lang->program->PRJBudget = 'Budget';
$lang->program->PRJTemplate = 'Template';
$lang->program->PRJEstimate = 'Estimates';
$lang->program->PRJConsume = 'Cost';
$lang->program->PRJSurplus = 'Left';
$lang->program->PRJProgress = 'Progress';
$lang->program->dateRange = 'Duration';
$lang->program->to = ' to ';
$lang->program->realEnd = 'Actual End';
$lang->program->realBegan = 'Actual Began';
$lang->program->bygrid = 'Kanban';
$lang->program->bylist = 'List';
$lang->program->mine = 'My';
$lang->program->setPlanduration = 'Set Duration';
$lang->program->auth = 'Access Control';
$lang->program->durationEstimation = 'Estimated Workload';
$lang->program->teamCount = 'Man';
$lang->program->leftStories = 'Left Stories';
$lang->program->leftTasks = 'Left Tasks';
$lang->program->leftBugs = 'Left Bugs';
$lang->program->PRJChildren = 'Child Project';
$lang->program->PRJParent = 'Parent Project';
$lang->program->allStories = 'All Stories';
$lang->program->doneStories = 'Finished Stories';
$lang->program->allInput = 'Total Input';
$lang->program->weekly = 'Program Weekly';
$lang->program->pv = 'PV';
$lang->program->ev = 'EV';
$lang->program->sv = 'SV%';
$lang->program->ac = 'AC';
$lang->program->cv = 'CV%';
$lang->program->PRJTeamCount = 'Team';
$lang->program->PRJLongTime = 'Long-Term Project';
$lang->program->unitList[''] = '';
$lang->program->unitList['yuan'] = 'Yuan';
$lang->program->unitList['dollar'] = 'Dollars';
$lang->program->modelList['scrum'] = "Scrum";
$lang->program->modelList['waterfall'] = "CMMI";
$lang->program->PRJCategoryList['single'] = "Single product";
$lang->program->PRJCategoryList['multiple'] = "Multiple products";
$lang->program->PRJLifeTimeList['short'] = "Short-Term";
$lang->program->PRJLifeTimeList['long'] = "Long-Term";
$lang->program->PRJLifeTimeList['ops'] = "DevOps";
$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->PRJAclList['open'] = "Default (Users who can visit {$lang->projectCommon} can access it)";
$lang->program->PRJAclList['private'] = 'Private (For team members only)';
$lang->program->PRJAclList['custom'] = 'Custom (Team members and the whitelist users can access it)';
$lang->program->PRJPrivwayList['extend'] = 'Inherit (program privilege and company privilege)';
$lang->program->PRJPrivwayList['reset'] = 'Reset (program privilege only)';
$lang->program->statusList['wait'] = 'Waiting';
$lang->program->statusList['doing'] = 'Doing';
$lang->program->statusList['suspended'] = 'Suspended';
$lang->program->statusList['closed'] = 'Closed';
$lang->program->noPRJ = 'No project.';
$lang->program->accessDenied = 'Access denied!';
$lang->program->chooseProgramType = 'Select a method';
$lang->program->nextStep = 'Next step';
$lang->program->hoursUnit = '%s hours';
$lang->program->membersUnit = '%s men';
$lang->program->lastIteration = 'Recent iterations';
$lang->program->ongoingStage = 'Ongoing stage';
$lang->program->scrum = 'Scrum';
$lang->program->waterfall = 'CMMI';
$lang->program->waterfallTitle = 'CMMI';
$lang->program->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.';
$lang->program->hasChildren = 'It has child projects. You cannot delete it.';
$lang->program->confirmDelete = "Do you want to delete [%s]?";
$lang->program->emptyPM = 'No manager';
$lang->program->cannotChangeToCat = "It is not empty, so you cannot change it to a parent.";
$lang->program->cannotCancelCat = "It has child projects, so you cannot unmark the parent.";
$lang->program->parentBeginEnd = "Parent begin&end date: %s ~ %s";
$lang->program->parentBudget = "Parent budget: %s";
$lang->program->beginLetterParent = "Parent begin date: %s, begin date should be >= parent begin date.";
$lang->program->endGreaterParent = "Parent end date: %s, end date should be <= parent end date.";
$lang->program->beginGreateChild = "Child earliest begin: %s, parent begin date <= child earliest begin date.";
$lang->program->endLetterChild = "Child latest end: %s, parent end date >= child latest end date.";
$lang->program->childLongTime = "If a child as long-term projects, the parent should be long-term too.";
$lang->program->readjustTime = 'Change the project begin&end date.';
$lang->program->PRJProgramTitle['0'] = 'Hide';
$lang->program->PRJProgramTitle['base'] = 'Base-level program only';
$lang->program->PRJProgramTitle['end'] = 'End-level program only';
$lang->program->PRJNoProgram = 'No program';
$lang->program->PRJAccessDenied = 'Access denied to this program';
$lang->program->PRJChooseProgramType = 'Select management type';
$lang->program->scrumTitle = 'Agile Development Management';
$lang->program->PRJCannotCreateChild = 'The project has contents, so you cannot add a child project. You can create a parent project for this one and then add a child project for the parent project.';
$lang->program->PRJHasChildren = 'This project has a child project, so it cannot be deleted.';
$lang->program->PRJConfirmDelete = 'Do you want to delete this project?';
$lang->program->PRJCannotChangeToCat = "The project has contents, so you cannot it to a parent project.";
$lang->program->PRJCannotCancelCat = "There are child projects of this project. You cannot cancel the parent project mark.";
$lang->program->PRJParentBeginEnd = "The begin and end date of the parent project: %s ~ %s";
$lang->program->PRJParentBudget = "The budget of the parent project: %s";
$lang->program->PRJBeginLetterParent = "The begin date of the parent project: %s. It cannot be < the begin date of its parent project.";
$lang->program->PRJEndGreaterParent = "The end date of the parent project: %s. It cannot be > the end date of its parent project.";
$lang->program->PRJBeginGreateChild = "The earliest begin date of a child project: %s. The begin date of its parent project cannot be > the earliest begin date of a child project.";
$lang->program->PRJEndLetterChild = "The latest end date of a child project: %s. The end date of its parent project cannot be < the latest end date of child project.";
$lang->program->PRJChildLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project.";
/* Actions. */
$lang->program->PGMCommon = 'Program';
$lang->program->PGMIndex = 'Home';
$lang->program->PGMCreate = 'Create Program';
$lang->program->PGMCreateGuide = 'Select Template';
$lang->program->PGMEdit = 'Edit Program';
$lang->program->PGMBrowse = 'Programs';
$lang->program->PGMProduct = 'Products';
$lang->program->PGMProject = 'Projects';
$lang->program->PGMAll = 'All Programs';
$lang->program->PGMStart = 'Start';
$lang->program->PGMFinish = 'Finish';
$lang->program->PGMSuspend = 'Suspend';
$lang->program->PGMDelete = 'Delete';
$lang->program->PGMClose = 'Close';
$lang->program->PGMView = 'Overview';
$lang->program->PGMActivate = 'Activate';
$lang->program->PGMGroup = 'Privilege Group';
$lang->program->PGMCreateGroup = 'Create Group';
$lang->program->PGMEditGroup = 'Edit Group';
$lang->program->PGMCopyGroup = 'Copy Group';
$lang->program->PGMManageView = 'Manage View';
$lang->program->PGMManagePriv = 'Manage Privilege';
$lang->program->PGMManageMembers = 'Program Team';
$lang->program->PGMExport = 'Export';
$lang->program->PGMManageGroupMember = 'Manage Group';
/* Fields. */
$lang->program->PGMName = 'Name';
$lang->program->PGMTemplate = 'Template';
$lang->program->PGMCategory = 'Type';
$lang->program->PGMDesc = 'Description';
$lang->program->PGMCode = 'Code';
$lang->program->PGMCopy = 'Copy Program';
$lang->program->PGMStatus = 'Status';
$lang->program->PGMPM = 'Manager';
$lang->program->PGMBudget = 'Budget';
$lang->program->PGMProgress = 'Progress';
$lang->program->PGMChildren = 'Child';
$lang->program->PGMParent = 'Parent';
$lang->program->PGMAllInput = 'Input';
$lang->program->PGMTeamCount = 'Team';
$lang->program->PGMLongTime = 'Long-Term';
$lang->program->noPGM = 'No program.';
$lang->program->PGMShowClosed = 'Closed programs.';i
$lang->program->PGMAclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->PGMAclList['private'] = "Private(for the program team only)";
$lang->program->PGMAclList['custom'] = "Custom(the program team and the whitelist users can access it)";
$lang->program->PGMAuthList['extend'] = 'Inherit(program privileges and company privileges)';
$lang->program->PGMAuthList['reset'] = 'Reset(program privileges only)';
$lang->program->PGMFeatureBar['all'] = 'All';
+211
View File
@@ -0,0 +1,211 @@
<?php
/* Actions. */
$lang->program->createGuide = 'Select Template';
$lang->program->PRJIndex = 'Dashboard';
$lang->program->PRJHome = 'Home';
$lang->program->PRJCreate = 'Create Project';
$lang->program->PRJEdit = 'Edit';
$lang->program->PRJBatchEdit = 'Batch Edit';
$lang->program->PRJBrowse = 'Projects';
$lang->program->PRJAll = 'All';
$lang->program->PRJStart = 'Start';
$lang->program->PRJFinish = 'Finish';
$lang->program->PRJSuspend = 'Suspend';
$lang->program->PRJDelete = 'Delete';
$lang->program->PRJClose = 'Close';
$lang->program->PRJActivate = 'Activate';
$lang->program->PRJGroup = 'Privilege Group';
$lang->program->PRJCreateGroup = 'Create Group';
$lang->program->PRJEditGroup = 'Edit Group';
$lang->program->PRJCopyGroup = 'Copy Group';
$lang->program->PRJManageView = 'Manage View';
$lang->program->PRJManagePriv = 'Manage Privilege';
$lang->program->PRJManageMembers = 'Manage Team';
$lang->program->export = 'Export';
$lang->program->PRJManageGroupMember = 'Manage Group';
$lang->program->PRJModuleSetting = 'Program Settings';
$lang->program->PRJModuleOpen = 'Program Name';
$lang->program->PRJUpdateOrder = 'Order';
$lang->program->PRJSort = 'Order';
/* Fields. */
$lang->program->common = 'Project';
$lang->program->stage = 'Stage';
$lang->program->PRJName = 'Name';
$lang->program->PRJModel = 'Template';
$lang->program->PRJCategory = 'Category';
$lang->program->PRJDesc = 'Description';
$lang->program->PRJCode = 'Code';
$lang->program->PRJCopy = 'Copy';
$lang->program->begin = 'Begin';
$lang->program->end = 'End';
$lang->program->PRJStatus = 'Status';
$lang->program->PRJPM = 'Manager';
$lang->program->PRJBudget = 'Budget';
$lang->program->PRJTemplate = 'Template';
$lang->program->PRJEstimate = 'Estimates';
$lang->program->PRJConsume = 'Cost';
$lang->program->PRJSurplus = 'Left';
$lang->program->PRJProgress = 'Progress';
$lang->program->dateRange = 'Duration';
$lang->program->to = ' to ';
$lang->program->realEnd = 'Actual End';
$lang->program->realBegan = 'Actual Began';
$lang->program->bygrid = 'Kanban';
$lang->program->bylist = 'List';
$lang->program->mine = 'My';
$lang->program->setPlanduration = 'Set Duration';
$lang->program->auth = 'Access Control';
$lang->program->durationEstimation = 'Estimated Workload';
$lang->program->teamCount = 'Man';
$lang->program->leftStories = 'Left Stories';
$lang->program->leftTasks = 'Left Tasks';
$lang->program->leftBugs = 'Left Bugs';
$lang->program->PRJChildren = 'Child Project';
$lang->program->PRJParent = 'Parent Project';
$lang->program->allStories = 'All Stories';
$lang->program->doneStories = 'Finished Stories';
$lang->program->allInput = 'Total Input';
$lang->program->weekly = 'Program Weekly';
$lang->program->pv = 'PV';
$lang->program->ev = 'EV';
$lang->program->sv = 'SV%';
$lang->program->ac = 'AC';
$lang->program->cv = 'CV%';
$lang->program->PRJTeamCount = 'Team';
$lang->program->PRJLongTime = 'Long-Term Project';
$lang->program->unitList[''] = '';
$lang->program->unitList['yuan'] = 'Yuan';
$lang->program->unitList['dollar'] = 'Dollars';
$lang->program->modelList['scrum'] = "Scrum";
$lang->program->modelList['waterfall'] = "CMMI";
$lang->program->PRJCategoryList['single'] = "Single product";
$lang->program->PRJCategoryList['multiple'] = "Multiple products";
$lang->program->PRJLifeTimeList['short'] = "Short-Term";
$lang->program->PRJLifeTimeList['long'] = "Long-Term";
$lang->program->PRJLifeTimeList['ops'] = "DevOps";
$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->PRJAclList['open'] = "Default (Users who can visit {$lang->projectCommon} can access it)";
$lang->program->PRJAclList['private'] = 'Private (For team members only)';
$lang->program->PRJAclList['custom'] = 'Custom (Team members and the whitelist users can access it)';
$lang->program->PRJPrivwayList['extend'] = 'Inherit (program privilege and company privilege)';
$lang->program->PRJPrivwayList['reset'] = 'Reset (program privilege only)';
$lang->program->statusList['wait'] = 'Waiting';
$lang->program->statusList['doing'] = 'Doing';
$lang->program->statusList['suspended'] = 'Suspended';
$lang->program->statusList['closed'] = 'Closed';
$lang->program->noPRJ = 'No project.';
$lang->program->accessDenied = 'Access denied!';
$lang->program->chooseProgramType = 'Select a method';
$lang->program->nextStep = 'Next step';
$lang->program->hoursUnit = '%s hours';
$lang->program->membersUnit = '%s men';
$lang->program->lastIteration = 'Recent iterations';
$lang->program->ongoingStage = 'Ongoing stage';
$lang->program->scrum = 'Scrum';
$lang->program->waterfall = 'CMMI';
$lang->program->waterfallTitle = 'CMMI';
$lang->program->cannotCreateChild = 'It is not empty, so you cannot add a child. You can add a parent for it, and then create a child.';
$lang->program->hasChildren = 'It has child projects. You cannot delete it.';
$lang->program->confirmDelete = "Do you want to delete [%s]?";
$lang->program->emptyPM = 'No manager';
$lang->program->cannotChangeToCat = "It is not empty, so you cannot change it to a parent.";
$lang->program->cannotCancelCat = "It has child projects, so you cannot unmark the parent.";
$lang->program->parentBeginEnd = "Parent begin&end date: %s ~ %s";
$lang->program->parentBudget = "Parent budget: %s";
$lang->program->beginLetterParent = "Parent begin date: %s, begin date should be >= parent begin date.";
$lang->program->endGreaterParent = "Parent end date: %s, end date should be <= parent end date.";
$lang->program->beginGreateChild = "Child earliest begin: %s, parent begin date <= child earliest begin date.";
$lang->program->endLetterChild = "Child latest end: %s, parent end date >= child latest end date.";
$lang->program->childLongTime = "If a child as long-term projects, the parent should be long-term too.";
$lang->program->readjustTime = 'Change the project begin&end date.';
$lang->program->PRJProgramTitle['0'] = 'Hide';
$lang->program->PRJProgramTitle['base'] = 'Base-level program only';
$lang->program->PRJProgramTitle['end'] = 'End-level program only';
$lang->program->PRJNoProgram = 'No program';
$lang->program->PRJAccessDenied = 'Access denied to this program';
$lang->program->PRJChooseProgramType = 'Select management type';
$lang->program->scrumTitle = 'Agile Development Management';
$lang->program->PRJCannotCreateChild = 'The project has contents, so you cannot add a child project. You can create a parent project for this one and then add a child project for the parent project.';
$lang->program->PRJHasChildren = 'This project has a child project, so it cannot be deleted.';
$lang->program->PRJConfirmDelete = 'Do you want to delete this project?';
$lang->program->PRJCannotChangeToCat = "The project has contents, so you cannot it to a parent project.";
$lang->program->PRJCannotCancelCat = "There are child projects of this project. You cannot cancel the parent project mark.";
$lang->program->PRJParentBeginEnd = "The begin and end date of the parent project: %s ~ %s";
$lang->program->PRJParentBudget = "The budget of the parent project: %s";
$lang->program->PRJBeginLetterParent = "The begin date of the parent project: %s. It cannot be < the begin date of its parent project.";
$lang->program->PRJEndGreaterParent = "The end date of the parent project: %s. It cannot be > the end date of its parent project.";
$lang->program->PRJBeginGreateChild = "The earliest begin date of a child project: %s. The begin date of its parent project cannot be > the earliest begin date of a child project.";
$lang->program->PRJEndLetterChild = "The latest end date of a child project: %s. The end date of its parent project cannot be < the latest end date of child project.";
$lang->program->PRJChildLongTime = "There are long-term projects in the child project, and the parent project should also be a long-term project.";
/* Actions. */
$lang->program->PGMCommon = 'Program';
$lang->program->PGMIndex = 'Home';
$lang->program->PGMCreate = 'Create Program';
$lang->program->PGMCreateGuide = 'Select Template';
$lang->program->PGMEdit = 'Edit Program';
$lang->program->PGMBrowse = 'Programs';
$lang->program->PGMProduct = 'Products';
$lang->program->PGMProject = 'Projects';
$lang->program->PGMAll = 'All Programs';
$lang->program->PGMStart = 'Start';
$lang->program->PGMFinish = 'Finish';
$lang->program->PGMSuspend = 'Suspend';
$lang->program->PGMDelete = 'Delete';
$lang->program->PGMClose = 'Close';
$lang->program->PGMView = 'Overview';
$lang->program->PGMActivate = 'Activate';
$lang->program->PGMGroup = 'Privilege Group';
$lang->program->PGMCreateGroup = 'Create Group';
$lang->program->PGMEditGroup = 'Edit Group';
$lang->program->PGMCopyGroup = 'Copy Group';
$lang->program->PGMManageView = 'Manage View';
$lang->program->PGMManagePriv = 'Manage Privilege';
$lang->program->PGMManageMembers = 'Program Team';
$lang->program->PGMExport = 'Export';
$lang->program->PGMManageGroupMember = 'Manage Group';
/* Fields. */
$lang->program->PGMName = 'Name';
$lang->program->PGMTemplate = 'Template';
$lang->program->PGMCategory = 'Type';
$lang->program->PGMDesc = 'Description';
$lang->program->PGMCode = 'Code';
$lang->program->PGMCopy = 'Copy Program';
$lang->program->PGMStatus = 'Status';
$lang->program->PGMPM = 'Manager';
$lang->program->PGMBudget = 'Budget';
$lang->program->PGMProgress = 'Progress';
$lang->program->PGMChildren = 'Child';
$lang->program->PGMParent = 'Parent';
$lang->program->PGMAllInput = 'Input';
$lang->program->PGMTeamCount = 'Team';
$lang->program->PGMLongTime = 'Long-Term';
$lang->program->noPGM = 'No program.';
$lang->program->PGMShowClosed = 'Closed programs.';i
$lang->program->PGMAclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->PGMAclList['private'] = "Private(for the program team only)";
$lang->program->PGMAclList['custom'] = "Custom(the program team and the whitelist users can access it)";
$lang->program->PGMAuthList['extend'] = 'Inherit(program privileges and company privileges)';
$lang->program->PGMAuthList['reset'] = 'Reset(program privileges only)';
$lang->program->PGMFeatureBar['all'] = 'All';
+215
View File
@@ -0,0 +1,215 @@
<?php
/* Actions. */
$lang->program->createGuide = '選擇項目模板';
$lang->program->PRJIndex = '項目儀表盤';
$lang->program->PRJHome = '項目主頁';
$lang->program->PRJCreate = '創建項目';
$lang->program->PRJEdit = '編輯項目';
$lang->program->PRJBatchEdit = '批量編輯';
$lang->program->PRJBrowse = '項目列表';
$lang->program->PRJAll = '所有項目';
$lang->program->PRJStart = '啟動項目';
$lang->program->PRJFinish = '完成項目';
$lang->program->PRJSuspend = '掛起項目';
$lang->program->PRJDelete = '刪除項目';
$lang->program->PRJClose = '關閉項目';
$lang->program->PRJActivate = '激活項目';
$lang->program->PRJGroup = '項目權限分組';
$lang->program->PRJCreateGroup = '項目創建分組';
$lang->program->PRJEditGroup = '項目編輯分組';
$lang->program->PRJCopyGroup = '項目複製分組';
$lang->program->PRJManageView = '項目維護視圖';
$lang->program->PRJManagePriv = '項目維護權限';
$lang->program->PRJManageMembers = '項目團隊';
$lang->program->export = '導出';
$lang->program->PRJManageGroupMember = '維護分組用戶';
$lang->program->PRJModuleSetting = '項目集設置';
$lang->program->PRJModuleOpen = '顯示項目集名';
$lang->program->PRJUpdateOrder = '排序';
$lang->program->PRJSort = '項目排序';
/* Fields. */
$lang->program->common = '項目';
$lang->program->stage = '階段';
$lang->program->PRJName = '項目名稱';
$lang->program->PRJModel = '管理類型';
$lang->program->PRJCategory = '項目類型';
$lang->program->PRJDesc = '項目描述';
$lang->program->PRJCode = '項目代號';
$lang->program->PRJCopy = '複製項目';
$lang->program->begin = '計劃開始日期';
$lang->program->end = '計劃完成日期';
$lang->program->PRJStatus = '項目狀態';
$lang->program->PRJPM = '項目負責人';
$lang->program->PO = '產品負責人';
$lang->program->PRJBudget = '項目預算';
$lang->program->PRJTemplate = '項目模板';
$lang->program->PRJEstimate = '預計';
$lang->program->PRJConsume = '消耗';
$lang->program->PRJSurplus = '剩餘';
$lang->program->PRJProgress = '進度';
$lang->program->dateRange = '起止時間';
$lang->program->to = '至';
$lang->program->realEnd = '實際完成日期';
$lang->program->realBegan = '實際開始日期';
$lang->program->bygrid = '看板';
$lang->program->bylist = '列表';
$lang->program->mine = '我參與的';
$lang->program->setPlanduration = '設置工期';
$lang->program->auth = '權限控制';
$lang->program->durationEstimation = '工作量估算';
$lang->program->teamCount = '投入人數';
$lang->program->leftStories = '剩餘需求';
$lang->program->leftTasks = '剩餘任務';
$lang->program->leftBugs = '剩餘Bug';
$lang->program->PRJChildren = '子項目';
$lang->program->PRJParent = '父項目';
$lang->program->allStories = '總需求';
$lang->program->doneStories = '已完成';
$lang->program->allInput = '項目總投入';
$lang->program->weekly = '項目周報';
$lang->program->pv = 'PV';
$lang->program->ev = 'EV';
$lang->program->sv = 'SV%';
$lang->program->ac = 'AC';
$lang->program->cv = 'CV%';
$lang->program->PRJTeamCount = '項目成員';
$lang->program->PRJLongTime = '長期項目';
$lang->program->unitList[''] = '';
$lang->program->unitList['yuan'] = '元';
$lang->program->unitList['dollar'] = 'Dollars';
$lang->program->modelList['scrum'] = "Scrum";
$lang->program->modelList['waterfall'] = "瀑布";
$lang->program->PRJCategoryList['single'] = "單產品項目";
$lang->program->PRJCategoryList['multiple'] = "多產品項目";
$lang->program->PRJLifeTimeList['short'] = "短期";
$lang->program->PRJLifeTimeList['long'] = "長期";
$lang->program->PRJLifeTimeList['ops'] = "運維";
$lang->program->featureBar['all'] = '所有';
$lang->program->featureBar['doing'] = '進行中';
$lang->program->featureBar['wait'] = '未開始';
$lang->program->featureBar['suspended'] = '已掛起';
$lang->program->featureBar['closed'] = '已關閉';
$lang->program->PRJAclList['open'] = "預設設置(有項目視圖權限,即可訪問)";
$lang->program->PRJAclList['private'] = "私有項目(只有項目團隊成員才能訪問)";
$lang->program->PRJAclList['custom'] = "自定義白名單(團隊成員和白名單的成員可以訪問)";
$lang->program->PRJAuthList['extend'] = '繼承(取項目權限與組織權限的並集)';
$lang->program->PRJAuthList['reset'] = '重新定義(只取項目權限)';
$lang->program->statusList['wait'] = '未開始';
$lang->program->statusList['doing'] = '進行中';
$lang->program->statusList['suspended'] = '已掛起';
$lang->program->statusList['closed'] = '已關閉';
$lang->program->noPRJ = '暫時沒有項目';
$lang->program->accessDenied = '您無權訪問該項目!';
$lang->program->chooseProgramType = '選擇項目管理方式';
$lang->program->nextStep = '下一步';
$lang->program->hoursUnit = '%s工時';
$lang->program->membersUnit = '%s人';
$lang->program->lastIteration = '近期迭代';
$lang->program->ongoingStage = '進行中的階段';
$lang->program->scrum = 'Scrum';
$lang->program->waterfall = '瀑布';
$lang->program->waterfallTitle = '瀑布式項目管理';
$lang->program->cannotCreateChild = '該項目已經有實際的內容,無法直接添加子項目。您可以為當前項目創建一個父項目,然後在新的父項目下面添加子項目。';
$lang->program->hasChildren = '該項目有子項目存在,不能刪除。';
$lang->program->confirmDelete = "您確定要刪除嗎?";
$lang->program->emptyPM = '暫無';
$lang->program->cannotChangeToCat = "該項目已經有實際的內容,無法修改為父項目";
$lang->program->cannotCancelCat = "該項目下已經有子項目,無法取消父項目標記";
$lang->program->parentBeginEnd = "父項目起止時間:%s ~ %s";
$lang->program->parentBudget = "父項目預算:%s";
$lang->program->beginLetterParent = "父項目的開始日期:%s,開始日期不能小於父項目的開始日期";
$lang->program->endGreaterParent = "父項目的完成日期:%s,完成日期不能大於父項目的完成日期";
$lang->program->beginGreateChild = "子項目的最小開始日期:%s,父項目的開始日期不能大於子項目的最小開始日期";
$lang->program->endLetterChild = "子項目的最大完成日期:%s,父項目的完成日期不能小於子項目的最大完成日期";
$lang->program->childLongTime = "子項目中有長期項目,父項目也應該是長期項目";
$lang->program->readjustTime = '重新調整項目起止時間';
$lang->program->PRJProgramTitle['0'] = '不顯示';
$lang->program->PRJProgramTitle['base'] = '只顯示一級項目集';
$lang->program->PRJProgramTitle['end'] = '只顯示最後一級項目集';
$lang->program->PRJNoProgram = '暫時沒有項目';
$lang->program->PRJAccessDenied = '您無權訪問該項目!';
$lang->program->PRJChooseProgramType = '選擇項目管理方式';
$lang->program->scrumTitle = '敏捷開發全流程項目管理';
$lang->program->PRJCannotCreateChild = '該項目已經有實際的內容,無法直接添加子項目。您可以為當前項目創建一個父項目,然後在新的父項目下面添加子項目。';
$lang->program->PRJHasChildren = '該項目有子項目存在,不能刪除。';
$lang->program->PRJConfirmDelete = "您確定刪除項目[%s]嗎?";
$lang->program->PRJCannotChangeToCat = "該項目已經有實際的內容,無法修改為父項目";
$lang->program->PRJCannotCancelCat = "該項目下已經有子項目,無法取消父項目標記";
$lang->program->PRJParentBeginEnd = "父項目起止時間:%s ~ %s";
$lang->program->PRJParentBudget = "父項目預算:%s";
$lang->program->PRJBeginLetterParent = "父項目的開始日期:%s,開始日期不能小於父項目的開始日期";
$lang->program->PRJEndGreaterParent = "父項目的完成日期:%s,完成日期不能大於父項目的完成日期";
$lang->program->PRJBeginGreateChild = "項目的最小開始日期:%s,項目集的開始日期不能大於項目的最小開始日期";
$lang->program->PRJEndLetterChild = "項目的最大完成日期:%s,項目集的完成日期不能小於項目的最大完成日期";
$lang->program->PRJChildLongTime = "子項目中有長期項目,父項目也應該是長期項目";
/* Actions. */
$lang->program->PGMCommon = '項目集';
$lang->program->PGMIndex = '項目集主頁';
$lang->program->PGMCreate = '添加項目集';
$lang->program->PGMCreateGuide = '選擇項目模板';
$lang->program->PGMEdit = '編輯項目集';
$lang->program->PGMBrowse = '項目集列表';
$lang->program->PGMProduct = '產品列表';
$lang->program->PGMProject = '項目列表';
$lang->program->PGMAll = '所有項目集';
$lang->program->PGMStart = '啟動項目集';
$lang->program->PGMFinish = '完成項目集';
$lang->program->PGMSuspend = '掛起項目集';
$lang->program->PGMDelete = '刪除項目集';
$lang->program->PGMClose = '關閉項目集';
$lang->program->PGMView = '項目集概況';
$lang->program->PGMActivate = '激活項目集';
$lang->program->PGMGroup = '權限分組';
$lang->program->PGMCreateGroup = '創建分組';
$lang->program->PGMEditGroup = '編輯分組';
$lang->program->PGMCopyGroup = '複製分組';
$lang->program->PGMManageView = '維護視圖';
$lang->program->PGMManagePriv = '維護權限';
$lang->program->PGMManageMembers = '項目集團隊';
$lang->program->PGMExport = '導出';
$lang->program->PGMManageGroupMember = '維護分組用戶';
$lang->program->PGMStakeholder = '干係人列表';
$lang->program->createStakeholder = '添加干係人';
$lang->program->importStakeholder = '從父項目導入';
/* Fields. */
$lang->program->PGMName = '項目集名稱';
$lang->program->PGMTemplate = '項目集模板';
$lang->program->PGMCategory = '項目集類型';
$lang->program->PGMDesc = '項目集描述';
$lang->program->PGMCode = '項目集代號';
$lang->program->PGMCopy = '複製項目集';
$lang->program->PGMStatus = '項目集狀態';
$lang->program->PGMPM = '項目集負責人';
$lang->program->PGMBudget = '項目集預算';
$lang->program->PGMProgress = '項目進度';
$lang->program->PGMChildren = '子項目集';
$lang->program->PGMParent = '父項目集';
$lang->program->PGMAllInput = '項目集總投入';
$lang->program->PGMTeamCount = '項目整合員';
$lang->program->PGMLongTime = '長期項目';
$lang->program->noPGM = '暫時沒有項目集';
$lang->program->PGMShowClosed = '顯示已關閉';
$lang->program->PGMAclList['open'] = "預設設置(有項目視圖權限,即可訪問)";
$lang->program->PGMAclList['private'] = "私有項目(只有項目團隊成員才能訪問)";
$lang->program->PGMAclList['custom'] = "自定義白名單(團隊成員和白名單的成員可以訪問)";
$lang->program->PGMAuthList['extend'] = '繼承(取項目權限與組織權限的並集)';
$lang->program->PGMAuthList['reset'] = '重新定義(只取項目權限)';
$lang->program->PGMFeatureBar['all'] = '所有';
+25 -15
View File
@@ -58,7 +58,9 @@ class programplan extends control
{
$this->app->loadLang('stage');
$this->commonAction($programID, $productID, $type);
$this->session->set('programplanList', $this->app->getURI(true));
$this->session->set('programPlanList', $this->app->getURI(true));
if(common::hasPriv('programplan', 'create')) $this->lang->modulePageActions = html::a($this->createLink('programplan', 'create', "programID=$programID"), "<i class='icon icon-sm icon-plus'></i> " . $this->lang->programplan->create, '', "class='btn btn-primary'");
$selectCustom = 0;
$dateDetails = 1;
@@ -111,30 +113,37 @@ class programplan extends control
$this->commonAction($programID, $productID);
if($_POST)
{
$this->programplan->create($programID, $planID, $this->productID);
$this->programplan->create($programID, $this->productID, $planID);
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
$locate = $this->session->PRJplanList ? $this->session->PRJplanList : $this->createLink('programplan', 'browse', "program=$programID");
$locate = $this->session->programPlanList ? $this->session->programPlanList : $this->createLink('programplan', 'browse', "program=$programID");
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate));
}
$stages = array();
$browseType = 'parent';
if($planID)
{
$stages = $this->loadModel('stage')->getStages('id_asc');
$browseType = 'children';
}
$this->app->loadLang('stage');
$program = $this->loadModel('project')->getById($programID);
$stages = $planID ? array() : $this->loadModel('stage')->getStages('id_asc');
$plans = $this->programplan->getList($programID, $this->productID, $planID);
$plans = $this->programplan->getList($programID, $this->productID, $planID, $browseType);
$title = $this->lang->programplan->create . $this->lang->colon . $program->name;
$position[] = html::a($this->createLink('programplan', 'browse', "program=$programID"), $program->name);
$position[] = $this->lang->programplan->create;
$this->view->title = $title;
$this->view->position = $position;
$this->view->program = $program;
$this->view->stages = $stages;
$this->view->plans = $plans;
$this->view->planID = $planID;
$this->view->type = 'lists';
$this->view->title = $title;
$this->view->position = $position;
$this->view->program = $program;
$this->view->stages = $stages;
$this->view->plans = $plans;
$this->view->planID = $planID;
$this->view->type = 'lists';
$this->display();
}
@@ -143,17 +152,18 @@ class programplan extends control
* Edit a programplan.
*
* @param int $planID
* @param int $programID
* @access public
* @return void
*/
public function edit($planID = 0)
public function edit($planID = 0, $programID = 0)
{
$plan = $this->programplan->getByID($planID);
$this->commonAction($plan->program, $plan->product);
if($_POST)
{
$changes = $this->programplan->update($planID);
$changes = $this->programplan->update($planID, $programID);
if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
if($changes)
{
@@ -168,9 +178,9 @@ class programplan extends control
$this->view->title = $this->lang->programplan->edit;
$this->view->position[] = $this->lang->programplan->edit;
$this->view->parentStage = $this->programplan->getParentStageList($this->session->PRJ, $planID, $plan->product);
$this->view->plan = $plan;
$this->view->isParent = $this->programplan->isParent($planID);
$this->view->isCreateTask = $this->programplan->isCreateTask($planID);
$this->view->plan = $plan;
$this->display();
}
+69
View File
@@ -0,0 +1,69 @@
<?php
/**
* The programplan module English file of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package programplan
* @version $Id: en.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
$lang->programplan->common = 'Program Plan';
$lang->programplan->browse = 'Program Plan';
$lang->programplan->gantt = 'Gantt Chart';
$lang->programplan->list = 'Stage List';
$lang->programplan->create = 'Create';
$lang->programplan->edit = 'Edit';
$lang->programplan->delete = 'Delete';
$lang->programplan->createSubPlan = 'Create Sub Plan';
$lang->programplan->parent = 'Parent Stage';
$lang->programplan->emptyParent = 'N/A';
$lang->programplan->name = 'Name';
$lang->programplan->percent = 'Plan Workload';
$lang->programplan->percentAB = 'Plan Workload';
$lang->programplan->planPercent = 'Workload';
$lang->programplan->attribute = 'Stage';
$lang->programplan->milestone = 'Milestone';
$lang->programplan->taskProgress = 'Task Progress';
$lang->programplan->task = 'Task';
$lang->programplan->begin = 'Begin';
$lang->programplan->end = 'End';
$lang->programplan->realBegan = 'Actual Started';
$lang->programplan->realEnd = 'Actual End';
$lang->programplan->output = 'Output';
$lang->programplan->openedBy = 'Created By';
$lang->programplan->openedDate = 'Created Date';
$lang->programplan->editedBy = 'Edited By';
$lang->programplan->editedDate = 'Edited Date';
$lang->programplan->duration = 'Duration';
$lang->programplan->version = 'Version';
$lang->programplan->full = 'Full Screen';
$lang->programplan->today = 'Today';
$lang->programplan->exporting = 'Exporting';
$lang->programplan->exportFail = 'Export failed';
$lang->programplan->hideCriticalPath = 'Hide Critical Path';
$lang->programplan->showCriticalPath = 'Show Critical Path';
$lang->programplan->accessRight = 'Access Control';
$lang->programplan->milestoneList[1] = 'Yes';
$lang->programplan->milestoneList[0] = 'No';
$lang->programplan->accessRights['open'] = 'Inherited Project ACL (for who can access the current project)';
$lang->programplan->accessRights['private'] = 'Private (for team members and project stakeholders)';
$lang->programplan->noData = 'No Data';
$lang->programplan->children = 'Sub Plan';
$lang->programplan->childrenAB = 'Child';
$lang->programplan->confirmDelete = 'Do you want to delete the current plan?';
$lang->programplan->stageCustom = new stdClass();
$lang->programplan->stageCustom->date = 'Show Date';
$lang->programplan->stageCustom->task = 'Show Task';
$lang->programplan->error = new stdclass();
$lang->programplan->error->percentNumber = '"Workload %" must be digits.';
$lang->programplan->error->planFinishSmall = 'The "End" date must be > the "Begin" date.';
$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100%.';
$lang->programplan->error->createdTask = 'The task has been decomposed. Sub phases cannot be added.';
+5 -2
View File
@@ -9,8 +9,7 @@
* @version $Id: en.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
$lang->programplan->common = 'Program Plan';
$lang->programplan->common = 'Program Plan';
$lang->programplan->browse = 'Program Plan';
$lang->programplan->gantt = 'Gantt Chart';
$lang->programplan->list = 'Stage List';
@@ -46,10 +45,14 @@ $lang->programplan->exporting = 'Exporting';
$lang->programplan->exportFail = 'Export failed';
$lang->programplan->hideCriticalPath = 'Hide Critical Path';
$lang->programplan->showCriticalPath = 'Show Critical Path';
$lang->programplan->accessRight = 'Access Control';
$lang->programplan->milestoneList[1] = 'Yes';
$lang->programplan->milestoneList[0] = 'No';
$lang->programplan->accessRights['open'] = 'Inherited Project ACL (for who can access the current project)';
$lang->programplan->accessRights['private'] = 'Private (for team members and project stakeholders)';
$lang->programplan->noData = 'No Data';
$lang->programplan->children = 'Sub Plan';
$lang->programplan->childrenAB = 'Child';
+69
View File
@@ -0,0 +1,69 @@
<?php
/**
* The programplan module English file of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package programplan
* @version $Id: en.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
$lang->programplan->common = 'Program Plan';
$lang->programplan->browse = 'Program Plan';
$lang->programplan->gantt = 'Gantt Chart';
$lang->programplan->list = 'Stage List';
$lang->programplan->create = 'Create';
$lang->programplan->edit = 'Edit';
$lang->programplan->delete = 'Delete';
$lang->programplan->createSubPlan = 'Create Sub Plan';
$lang->programplan->parent = 'Parent Stage';
$lang->programplan->emptyParent = 'N/A';
$lang->programplan->name = 'Name';
$lang->programplan->percent = 'Plan Workload';
$lang->programplan->percentAB = 'Plan Workload';
$lang->programplan->planPercent = 'Workload';
$lang->programplan->attribute = 'Stage';
$lang->programplan->milestone = 'Milestone';
$lang->programplan->taskProgress = 'Task Progress';
$lang->programplan->task = 'Task';
$lang->programplan->begin = 'Begin';
$lang->programplan->end = 'End';
$lang->programplan->realBegan = 'Actual Started';
$lang->programplan->realEnd = 'Actual End';
$lang->programplan->output = 'Output';
$lang->programplan->openedBy = 'Created By';
$lang->programplan->openedDate = 'Created Date';
$lang->programplan->editedBy = 'Edited By';
$lang->programplan->editedDate = 'Edited Date';
$lang->programplan->duration = 'Duration';
$lang->programplan->version = 'Version';
$lang->programplan->full = 'Full Screen';
$lang->programplan->today = 'Today';
$lang->programplan->exporting = 'Exporting';
$lang->programplan->exportFail = 'Export failed';
$lang->programplan->hideCriticalPath = 'Hide Critical Path';
$lang->programplan->showCriticalPath = 'Show Critical Path';
$lang->programplan->accessRight = 'Access Control';
$lang->programplan->milestoneList[1] = 'Yes';
$lang->programplan->milestoneList[0] = 'No';
$lang->programplan->accessRights['open'] = 'Inherited Project ACL (for who can access the current project)';
$lang->programplan->accessRights['private'] = 'Private (for team members and project stakeholders)';
$lang->programplan->noData = 'No Data';
$lang->programplan->children = 'Sub Plan';
$lang->programplan->childrenAB = 'Child';
$lang->programplan->confirmDelete = 'Do you want to delete the current plan?';
$lang->programplan->stageCustom = new stdClass();
$lang->programplan->stageCustom->date = 'Show Date';
$lang->programplan->stageCustom->task = 'Show Task';
$lang->programplan->error = new stdclass();
$lang->programplan->error->percentNumber = '"Workload %" must be digits.';
$lang->programplan->error->planFinishSmall = 'The "End" date must be > the "Begin" date.';
$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100%.';
$lang->programplan->error->createdTask = 'The task has been decomposed. Sub phases cannot be added.';
+69
View File
@@ -0,0 +1,69 @@
<?php
/**
* The programplan module English file of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package programplan
* @version $Id: en.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
$lang->programplan->common = 'Program Plan';
$lang->programplan->browse = 'Program Plan';
$lang->programplan->gantt = 'Gantt Chart';
$lang->programplan->list = 'Stage List';
$lang->programplan->create = 'Create';
$lang->programplan->edit = 'Edit';
$lang->programplan->delete = 'Delete';
$lang->programplan->createSubPlan = 'Create Sub Plan';
$lang->programplan->parent = 'Parent Stage';
$lang->programplan->emptyParent = 'N/A';
$lang->programplan->name = 'Name';
$lang->programplan->percent = 'Plan Workload';
$lang->programplan->percentAB = 'Plan Workload';
$lang->programplan->planPercent = 'Workload';
$lang->programplan->attribute = 'Stage';
$lang->programplan->milestone = 'Milestone';
$lang->programplan->taskProgress = 'Task Progress';
$lang->programplan->task = 'Task';
$lang->programplan->begin = 'Begin';
$lang->programplan->end = 'End';
$lang->programplan->realBegan = 'Actual Started';
$lang->programplan->realEnd = 'Actual End';
$lang->programplan->output = 'Output';
$lang->programplan->openedBy = 'Created By';
$lang->programplan->openedDate = 'Created Date';
$lang->programplan->editedBy = 'Edited By';
$lang->programplan->editedDate = 'Edited Date';
$lang->programplan->duration = 'Duration';
$lang->programplan->version = 'Version';
$lang->programplan->full = 'Full Screen';
$lang->programplan->today = 'Today';
$lang->programplan->exporting = 'Exporting';
$lang->programplan->exportFail = 'Export failed';
$lang->programplan->hideCriticalPath = 'Hide Critical Path';
$lang->programplan->showCriticalPath = 'Show Critical Path';
$lang->programplan->accessRight = 'Access Control';
$lang->programplan->milestoneList[1] = 'Yes';
$lang->programplan->milestoneList[0] = 'No';
$lang->programplan->accessRights['open'] = 'Inherited Project ACL (for who can access the current project)';
$lang->programplan->accessRights['private'] = 'Private (for team members and project stakeholders)';
$lang->programplan->noData = 'No Data';
$lang->programplan->children = 'Sub Plan';
$lang->programplan->childrenAB = 'Child';
$lang->programplan->confirmDelete = 'Do you want to delete the current plan?';
$lang->programplan->stageCustom = new stdClass();
$lang->programplan->stageCustom->date = 'Show Date';
$lang->programplan->stageCustom->task = 'Show Task';
$lang->programplan->error = new stdclass();
$lang->programplan->error->percentNumber = '"Workload %" must be digits.';
$lang->programplan->error->planFinishSmall = 'The "End" date must be > the "Begin" date.';
$lang->programplan->error->percentOver = 'The sum of "Workload %" cannot exceed 100%.';
$lang->programplan->error->createdTask = 'The task has been decomposed. Sub phases cannot be added.';
+5 -2
View File
@@ -9,8 +9,7 @@
* @version $Id: zh-cn.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
$lang->programplan->common = '项目计划';
$lang->programplan->common = '项目计划';
$lang->programplan->browse = '浏览阶段计划';
$lang->programplan->gantt = '甘特图';
$lang->programplan->list = '阶段列表';
@@ -46,10 +45,14 @@ $lang->programplan->exporting = '导出';
$lang->programplan->exportFail = '导出失败';
$lang->programplan->hideCriticalPath = '隐藏关键路径';
$lang->programplan->showCriticalPath = '显示关键路径';
$lang->programplan->accessRight = '访问控制';
$lang->programplan->milestoneList[1] = '是';
$lang->programplan->milestoneList[0] = '否';
$lang->programplan->accessRights['open'] = '继承项目访问权限 (能访问当前项目,即可访问)';
$lang->programplan->accessRights['private'] = '私有 (团队成员和项目干系人可访问)';
$lang->programplan->noData = '暂无数据。';
$lang->programplan->children = '二级计划';
$lang->programplan->childrenAB = '子';
+69
View File
@@ -0,0 +1,69 @@
<?php
/**
* The programplan module zh-cn file of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 青島易軟天創網絡科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
* @license ZPL (http://zpl.pub/page/zplv12.html)
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
* @package programplan
* @version $Id: zh-cn.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
* @link http://www.zentao.net
*/
$lang->programplan->common = '項目計劃';
$lang->programplan->browse = '瀏覽階段計劃';
$lang->programplan->gantt = '甘特圖';
$lang->programplan->list = '階段列表';
$lang->programplan->create = '設置階段';
$lang->programplan->edit = '編輯';
$lang->programplan->delete = '刪除';
$lang->programplan->createSubPlan = '創建二級階段';
$lang->programplan->parent = '父階段';
$lang->programplan->emptyParent = '無';
$lang->programplan->name = '名稱';
$lang->programplan->percent = '計劃工作量';
$lang->programplan->percentAB = '計劃工作量';
$lang->programplan->planPercent = '工作量';
$lang->programplan->attribute = '階段';
$lang->programplan->milestone = '里程碑';
$lang->programplan->taskProgress = '任務進度';
$lang->programplan->task = '任務';
$lang->programplan->begin = '計劃開始';
$lang->programplan->end = '計劃完成';
$lang->programplan->realBegan = '實際開始';
$lang->programplan->realEnd = '實際完成';
$lang->programplan->output = '輸出';
$lang->programplan->openedBy = '由誰創建';
$lang->programplan->openedDate = '創建日期';
$lang->programplan->editedBy = '由誰編輯';
$lang->programplan->editedDate = '編輯日期';
$lang->programplan->duration = '計劃工期';
$lang->programplan->version = '版本號';
$lang->programplan->full = '全屏';
$lang->programplan->today = '今天';
$lang->programplan->exporting = '導出';
$lang->programplan->exportFail = '導出失敗';
$lang->programplan->hideCriticalPath = '隱藏關鍵路徑';
$lang->programplan->showCriticalPath = '顯示關鍵路徑';
$lang->programplan->accessRight = '訪問控制';
$lang->programplan->milestoneList[1] = '是';
$lang->programplan->milestoneList[0] = '否';
$lang->programplan->accessRights['open'] = '繼承項目訪問權限 (能訪問當前項目,即可訪問)';
$lang->programplan->accessRights['private'] = '私有 (團隊成員和項目干係人可訪問)';
$lang->programplan->noData = '暫無數據。';
$lang->programplan->children = '二級計劃';
$lang->programplan->childrenAB = '子';
$lang->programplan->confirmDelete = '確定要刪除當前計劃嗎?';
$lang->programplan->stageCustom = new stdClass();
$lang->programplan->stageCustom->date = '顯示日期';
$lang->programplan->stageCustom->task = '顯示任務';
$lang->programplan->error = new stdclass();
$lang->programplan->error->percentNumber = '"工作量比例"必須為數字';
$lang->programplan->error->planFinishSmall = '"計劃完成時間"必須大於"計劃開始時間"';
$lang->programplan->error->percentOver = '"工作量比例"累計不應當超過100%';
$lang->programplan->error->createdTask = '已分解任務,不可添加子階段';
+107 -100
View File
@@ -55,26 +55,27 @@ class programplanModel extends model
}
/**
* Get plans list.
* Get plans list.
*
* @param int $programID
* @param int $productID
* @param int $planID
* @param string $type
* @param string $browseType
* @param string $orderBy
* @access public
* @return array
*/
public function getList($programID = 0, $productID = 0, $planID = 0, $type = '', $orderBy = 'id_asc')
public function getList($programID = 0, $productID = 0, $planID = 0, $browseType = 'all', $orderBy = 'id_asc')
{
$projects = $this->getProjectsByProduct($productID);
$plans = $this->dao->select('*')->from(TABLE_PROJECT)
->where('type')->eq('stage')
->andWhere('parent')->eq($programID)
->beginIF($type != 'all')->andWhere('parent')->eq($planID)->fi()
->andWhere('deleted')->eq(0)
->beginIF($browseType == 'all')->andWhere('path')->like(",$programID,%")->fi()
->beginIF($browseType == 'parent')->andWhere('parent')->eq($programID)->fi()
->beginIF($browseType == 'children')->andWhere('parent')->eq($planID)->fi()
->beginIF($productID)->andWhere('id')->in($projects)->fi()
->andWhere('deleted')->eq(0)
->orderBy($orderBy)
->fetchAll('id');
@@ -139,10 +140,11 @@ class programplanModel extends model
{
$plans = $this->getList($programID, $productID, 0, 'all', $orderBy);
$parents = array();
$parents = array();
$children = array();
foreach($plans as $planID => $plan)
{
$plan->parent == 0 ? $parents[$planID] = $plan : $children[$plan->parent][] = $plan;
$plan->grade == 1 ? $parents[$planID] = $plan : $children[$plan->parent][] = $plan;
}
foreach($parents as $planID => $plan) $parents[$planID]->children = isset($children[$planID]) ? $children[$planID] : array();
@@ -220,19 +222,19 @@ class programplanModel extends model
$end = $plan->end == '0000-00-00' ? '' : $plan->end;
$data = new stdclass();
$data->id = $plan->id;
$data->type = 'plan';
$data->text = empty($plan->milestone) ? $plan->name : $isMilestone . $plan->name;
$data->percent = $plan->percent;
$data->attribute = zget($this->lang->stage->typeList, $plan->attribute);
$data->milestone = zget($this->lang->programplan->milestoneList, $plan->milestone);
$data->start_date = $start;
$data->deadline = $end;
$data->realBegan = $plan->realBegan == '0000-00-00' ? '' : $plan->realBegan;
$data->realEnd = $plan->realEnd == '0000-00-00' ? '' : $plan->realEnd;
$data->duration = helper::diffDate($plan->end, $plan->begin) + 1;;
$data->parent = $plan->parent;
$data->open = true;
$data->id = $plan->id;
$data->type = 'plan';
$data->text = empty($plan->milestone) ? $plan->name : $isMilestone . $plan->name;
$data->percent = $plan->percent;
$data->attribute = zget($this->lang->stage->typeList, $plan->attribute);
$data->milestone = zget($this->lang->programplan->milestoneList, $plan->milestone);
$data->start_date = $start;
$data->deadline = $end;
$data->realBegan = $plan->realBegan == '0000-00-00' ? '' : $plan->realBegan;
$data->realEnd = $plan->realEnd == '0000-00-00' ? '' : $plan->realEnd;
$data->duration = helper::diffDate($plan->end, $plan->begin) + 1;;
$data->parent = $plan->grade == 1 ? 0 :$plan->parent;
$data->open = true;
if($data->start_date == '' or $data->deadline == '') $data->duration = 0;
@@ -244,11 +246,11 @@ class programplanModel extends model
$taskPri = "<span class='label-pri label-pri-%s' title='%s'>%s</span> ";
/* Judge whether to display tasks under the stage. */
$owner = $this->app->user->account;
$module = 'programplan';
$section = 'browse';
$object = 'stageCustom';
$setting = $this->loadModel('setting');
$owner = $this->app->user->account;
$module = 'programplan';
$section = 'browse';
$object = 'stageCustom';
$setting = $this->loadModel('setting');
if(empty($selectCustom)) $selectCustom = $setting->getItem("owner={$owner}&module={$module}&section={$section}&key={$object}");
@@ -276,9 +278,9 @@ class programplanModel extends model
$start = $task->estStarted == '0000-00-00' ? '' : date('d-m-Y', strtotime($task->estStarted));
$end = $task->deadline == '0000-00-00' ? '' : $task->deadline;
$realBegan = $task->realStarted == '0000-00-00' ? '' : $task->realStarted;
$realEnd = $task->finishedDate == '0000-00-00 00:00:00' ? '' : substr($task->finishedDate, 5, 11);
$priIcon = sprintf($taskPri, $task->pri, $task->pri, $task->pri);
$realBegan = $task->realStarted == '0000-00-00' ? '' : $task->realStarted;
$realEnd = $task->finishedDate == '0000-00-00 00:00:00' ? '' : substr($task->finishedDate, 5, 11);
$priIcon = sprintf($taskPri, $task->pri, $task->pri, $task->pri);
$data = new stdclass();
$data->id = $task->project . '-' . $task->id;
@@ -324,19 +326,19 @@ class programplanModel extends model
/**
* Get total percent.
*
* @param int $plan
* @param object $plan
* @access public
* @return int
*/
public function getTotalPercent($plan)
{
$plans = $this->getList($plan->program, $plan->product, $plan->parent);
$plans = $this->getList($plan->program, $plan->product, $plan->parent,'parent');
$totalPercent = 0;
foreach($plans as $planID => $planObj)
foreach($plans as $id => $stage)
{
if($planID == $plan->id) continue;
$totalPercent += $planObj->percent;
if($id == $plan->id) continue;
$totalPercent += $stage->percent;
}
return $totalPercent;
@@ -417,51 +419,56 @@ class programplanModel extends model
/**
* Create a plan.
*
* @param int $programID
* @param int $parentID
* @param int $productID
* @param int $programID
* @param int $productID
* @param int $parentID
* @access public
* @return bool
*/
public function create($programID = 0, $parentID = 0, $productID = 0)
public function create($programID = 0, $productID = 0, $parentID = 0)
{
$data = (array)fixer::input('post')->get();
extract($data);
/* Determine if a task has been created under the parent phase. */
if(!$this->isCreateTask($parentID)) return dao::$errors['message'][] = $this->lang->programplan->error->createdTask;
$parentStage = '';
/* The child phase type setting is the same as the parent phase. */
$parentStageType = '';
if($parentID)
{
$parentData = $this->getByID($parentID);
$parentStage = $parentData->attribute;
$parentData = $this->getByID($parentID);
$parentStageType = $parentData->attribute;
}
$attributes = array_values($attributes);
$milestone = array_values($milestone);
$datas = array();
$datas = array();
foreach($names as $key => $name)
{
if(empty($name)) continue;
$plan = new stdclass();
$plan->id = isset($planIDs[$key]) ? $planIDs[$key] : '';
$plan->type = 'stage';
$plan->parent = $parentID ? $parentID : (int)$programID;
$plan->name = $names[$key];
$plan->percent = $percents[$key];
$plan->attribute = empty($parentID) ? $attributes[$key] : $parentStage;
$plan->milestone = $milestone[$key];
$plan->begin = empty($begin[$key]) ? '0000-00-00' : $begin[$key];
$plan->end = empty($end[$key]) ? '0000-00-00' : $end[$key];
$plan->realBegan = empty($realBegan[$key]) ? '0000-00-00' : $realBegan[$key];
$plan->realEnd = empty($realEnd[$key]) ? '0000-00-00' : $realEnd[$key];
$plan->output = empty($output[$key]) ? '' : implode(',', $output[$key]);
$plan->id = isset($planIDList[$key]) ? $planIDList[$key] : '';
$plan->type = 'stage';
$plan->project = $programID;
$plan->parent = $parentID ? $parentID : $programID;
$plan->name = $names[$key];
$plan->percent = $percents[$key];
$plan->attribute = empty($parentID) ? $attributes[$key] : $parentStageType;
$plan->milestone = $milestone[$key];
$plan->begin = empty($begin[$key]) ? '0000-00-00' : $begin[$key];
$plan->end = empty($end[$key]) ? '0000-00-00' : $end[$key];
$plan->realBegan = empty($realBegan[$key]) ? '0000-00-00' : $realBegan[$key];
$plan->realEnd = empty($realEnd[$key]) ? '0000-00-00' : $realEnd[$key];
$plan->output = empty($output[$key]) ? '' : implode(',', $output[$key]);
$plan->acl = $acl[$key];
$datas[] = $plan;
}
$totalPercent = 0;
$devCounts = 0;
$totalDevType = 0;
$milestone = 0;
foreach($datas as $plan)
{
@@ -476,19 +483,8 @@ class programplanModel extends model
return false;
}
/* Check dev stage counts which should not be over one for parent plan. */
if($parentID == 0)
{
if($plan->attribute == 'develop') $devCounts += 1;
if($devCounts > 1)
{
dao::$errors['message'][] = $this->lang->programplan->error->onlyOneDev;
return false;
}
}
if($plan->begin == '0000-00-00') $plan->begin = '';
if($plan->end == '0000-00-00') $plan->end = '';
if($plan->end == '0000-00-00') $plan->end = '';
foreach(explode(',', $this->config->programplan->create->requiredFields) as $field)
{
$field = trim($field);
@@ -499,11 +495,8 @@ class programplanModel extends model
}
}
if($plan->percent)
{
$plan->percent = (float)$plan->percent;
$totalPercent += $plan->percent;
}
$plan->percent = (float)$plan->percent;
$totalPercent += $plan->percent;
if($plan->milestone) $milestone = 1;
}
@@ -575,6 +568,7 @@ class programplanModel extends model
if(!dao::isError())
{
$planID = $this->dao->lastInsertID();
$this->setTreePath($planID);
$this->loadModel('project')->updateProducts($planID);
$spec = new stdclass();
@@ -597,13 +591,39 @@ class programplanModel extends model
}
/**
* Update a plan.
* Set stage tree path.
*
* @param int $planID
* @access public
* @return bool
*/
public function setTreePath($planID)
{
$stage = $this->dao->select('id,type,parent,path,grade')->from(TABLE_PROJECT)->where('id')->eq($planID)->fetch();
$parent = $this->dao->select('id,type,parent,path,grade')->from(TABLE_PROJECT)->where('id')->eq($stage->parent)->fetch();
if($parent->type == 'project')
{
$path['path'] = ",{$parent->id},{$stage->id},";
$path['grade'] = 1;
}
elseif($parent->type == 'stage')
{
$path['path'] = $parent->path . "{$stage->id},";
$path['grade'] = $parent->grade + 1;
}
$this->dao->update(TABLE_PROJECT)->set('path')->eq($path['path'])->set('grade')->eq($path['grade'])->where('id')->eq($stage->id)->exec();
}
/**
* Update a plan.
*
* @param int $planID
* @param int $programID
* @access public
* @return bool|array
*/
public function update($planID = 0)
public function update($planID = 0, $programID = 0)
{
$oldPlan = $this->getByID($planID);
$plan = fixer::input('post')
@@ -625,35 +645,21 @@ class programplanModel extends model
$totalPercent += (float)$plan->percent;
if($totalPercent > 100) return dao::$errors['percent'][] = $this->lang->programplan->error->percentOver;
if($plan->parent == 0)
{
$projects = $this->getProjectsByProduct($oldPlan->product);
$devCounts = $this->dao->select('count(*) AS count')->from(TABLE_PROJECT)
->where('parent')->eq($oldPlan->program)
->andWhere('type')->eq('stage')
->andWhere('deleted')->eq(0)
->andWhere('attribute')->eq('dev')
->andWhere('id')->ne($oldPlan->id)
->andWhere('id')->in($projects)
->fetch('count');
}
if($plan->parent > 0)
{
/* If child plans has milestone, update parent plan set milestone eq 0 . */
$parentPlan = $this->getByID($plan->parent);
if($plan->milestone and $parentPlan->milestone) $this->dao->update(TABLE_PROJECT)->set('milestone')->eq(0)->where('id')->eq($oldPlan->parent)->exec();
$plan->attribute = $parentPlan->attribute;
}
if(dao::isError()) return false;
/* Set planDuration and realDuration. */
$plan->planDuration = $this->getDuration($plan->begin, $plan->end);
$plan->realDuration = $this->getDuration($plan->realBegan, $plan->realEnd);
if($plan->parent) $plan->attribute = $parentPlan->attribute;
if($planChanged) $plan->version = $oldPlan->version + 1;
if(empty($plan->parent)) $plan->parent = $programID;
if($planChanged) $plan->version = $oldPlan->version + 1;
$this->dao->update(TABLE_PROJECT)->data($plan)
->autoCheck()
->batchCheck($this->config->programplan->edit->requiredFields, 'notempty')
@@ -663,6 +669,7 @@ class programplanModel extends model
->exec();
if(dao::isError()) return false;
$this->setTreePath($planID);
if($planChanged)
{
@@ -686,10 +693,11 @@ class programplanModel extends model
* @param int $col
* @param int $plan
* @param int $users
* @param int $programID
* @access public
* @return string
*/
public function printCell($col, $plan, $users)
public function printCell($col, $plan, $users, $programID)
{
$id = $col->id;
if($col->show)
@@ -718,7 +726,7 @@ class programplanModel extends model
echo sprintf('%03d', $plan->id);
break;
case 'name':
if($plan->parent > 0) echo '<span class="label label-badge label-light" title="' . $this->lang->programplan->children . '">' . $this->lang->programplan->childrenAB . '</span> ';
if($plan->grade > 1) echo '<span class="label label-badge label-light" title="' . $this->lang->programplan->children . '">' . $this->lang->programplan->childrenAB . '</span> ';
echo $plan->name;
if(!empty($plan->children)) echo '<a class="plan-toggle" data-id="' . $plan->id . '"><i class="icon icon-angle-double-right"></i></a>';
break;
@@ -766,7 +774,7 @@ class programplanModel extends model
common::printIcon('task', 'create', "projectID={$plan->id}", $plan, 'list');
if($this->isCreateTask($plan->id))
{
common::printIcon('programplan', 'create', "program={$plan->program}&productID=$plan->product&planID=$plan->id", $plan, 'list', 'treemap', '', '', '', '', $this->lang->programplan->createSubPlan);
common::printIcon('programplan', 'create', "program={$plan->parent}&productID=$plan->product&planID=$plan->id", $plan, 'list', 'treemap', '', '', '', '', $this->lang->programplan->createSubPlan);
}
else
{
@@ -774,7 +782,7 @@ class programplanModel extends model
echo html::a('javascript:alert("' . $this->lang->programplan->error->createdTask . '");', '<i class="icon-programplan-create icon-treemap"></i>', '', 'class="btn ' . $disabled . '"');
}
common::printIcon('programplan', 'edit', "planID=$plan->id", $plan, 'list', '', '', 'iframe', true);
common::printIcon('programplan', 'edit', "planID=$plan->id&programID=$programID", $plan, 'list', '', '', 'iframe', true);
$disabled = !empty($plan->children) ? ' disabled' : '';
if(common::hasPriv('programplan', 'delete', $plan))
{
@@ -813,7 +821,7 @@ class programplanModel extends model
{
$action = strtolower($action);
if($action == 'create' and $plan->parent) return false;
if($action == 'create' and $plan->grade > 1) return false;
return true;
}
@@ -864,8 +872,8 @@ class programplanModel extends model
*/
public function isParent($planID)
{
$children = $this->dao->select('id')->from(TABLE_PROJECT)->where('parent')->eq($planID)->andWhere('deleted')->eq('0')->fetch();
return empty($children) ? false : true;
$childrenStage = $this->dao->select('grade')->from(TABLE_PROJECT)->where('parent')->eq($planID)->andWhere('deleted')->eq('0')->fetch();
return empty($childrenStage) ? false : true;
}
/**
@@ -883,8 +891,7 @@ class programplanModel extends model
unset($projects[$planID]);
$parentStage = $this->dao->select('id,name')->from(TABLE_PROJECT)
->where('id')->in($projects)
->andWhere('type')->eq('stage')
->where('type')->eq('stage')
->andWhere('parent')->eq($programID)
->andWhere('deleted')->eq('0')
->fetchPairs('id');
+6 -1
View File
@@ -28,6 +28,7 @@
<th class='required'><?php echo $lang->programplan->name;?></th>
<th class='w-100px'><?php echo $lang->programplan->percent;?></th>
<th class='w-110px <?php echo $hideAttribute?>'><?php echo $lang->programplan->attribute;?></th>
<th class='w-110px'><?php echo $lang->programplan->accessRight;?></th>
<th class='w-110px'><?php echo $lang->programplan->milestone;?></th>
<th class='w-110px required'><?php echo $lang->programplan->begin;?></th>
<th class='w-110px required'><?php echo $lang->programplan->end;?></th>
@@ -49,6 +50,7 @@
</div>
</td>
<td class='<?php echo $hideAttribute?>'><?php echo html::select("attributes[$i]", $lang->stage->typeList, $stage->type, "class='form-control'");?></td>
<td><?php echo html::select("acl[$i]", $lang->programplan->accessRights, 'open', 'class="form-control"');?></td>
<td><?php echo html::radio("milestone[$i]", $lang->programplan->milestoneList, 0);?></td>
<td><input type='text' name='begin[]' id='begin<?php echo $i;?>' value='' class='form-control form-date' /></td>
<td><input type='text' name='end[]' id='end<?php echo $i;?>' value='' class='form-control form-date' /></td>
@@ -66,7 +68,7 @@
<?php if(!empty($plans)):?>
<?php foreach($plans as $plan):?>
<?php $disabled = $plan->setMilestone ? '' : "disabled='disabled'"?>
<?php echo html::hidden('planIDs[]', $plan->id);?>
<?php echo html::hidden('planIDList[]', $plan->id);?>
<tr>
<td><input type='text' name='names[]' id='names<?php echo $i;?>' value='<?php echo $plan->name;?>' class='form-control' /></td>
<td>
@@ -76,6 +78,7 @@
</div>
</td>
<td class='<?php echo $hideAttribute?>'><?php echo html::select("attributes[$i]", $lang->stage->typeList, $plan->attribute, "class='form-control'");?></td>
<td><?php echo html::select("acl[$i]", $lang->programplan->accessRights, $plan->acl, 'class="form-control"');?></td>
<td><?php echo html::radio("milestone[$i]", $lang->programplan->milestoneList, $plan->milestone, $disabled);?></td>
<td><input type='text' name='begin[] ' id='begin<?php echo $i;?>' value='<?php echo $plan->begin;?>' class='form-control form-date' /></td>
<td><input type='text' name='end[]' id='end<?php echo $i;?>' value='<?php echo $plan->end;?>' class='form-control form-date' /></td>
@@ -100,6 +103,7 @@
</div>
</td>
<td class='<?php echo $hideAttribute?>'><?php echo html::select("attributes[$i]", $lang->stage->typeList, '', "class='form-control'");?></td>
<td><?php echo html::select("acl[$i]", $lang->programplan->accessRights, 'open', 'class="form-control"');?></td>
<td><?php echo html::radio("milestone[$i]", $lang->programplan->milestoneList, 0);?></td>
<td><input type='text' name='begin[] ' id='begin<?php echo $i;?>' value='' class='form-control form-date' /></td>
<td><input type='text' name='end[]' id='end<?php echo $i;?>' value='' class='form-control form-date' /></td>
@@ -135,6 +139,7 @@
</div>
</td>
<td class='<?php echo $hideAttribute?>'><?php echo html::select("attributes[$i]", $lang->stage->typeList, '', "class='form-control'");?></td>
<td><?php echo html::select("acl[$i]", $lang->programplan->accessRights, 'open', 'class="form-control"');?></td>
<td><?php echo html::radio("milestone[$i]", $lang->programplan->milestoneList, 0);?></td>
<td><input type='text' name='begin[] ' id='begin<?php echo $i;?>' class='form-control form-date' /></td>
<td><input type='text' name='end[]' id='end<?php echo $i;?>' class='form-control form-date' /></td>
+4
View File
@@ -57,6 +57,10 @@ js::set('parentID', $plan->parent);
<?php else:?>
<?php echo html::hidden('milestone', $plan->milestone);?>
<?php endif;?>
<tr>
<th><?php echo $lang->programplan->accessRight;?> </th>
<td><?php echo html::select('acl', $lang->programplan->accessRights, $plan->acl, 'class="form-control"');?></td>
</tr>
<tr>
<th><?php echo $lang->programplan->begin;?> </th>
<td><?php echo html::input('begin', $plan->begin, "class='form-control form-date'");?></td>
+2 -2
View File
@@ -59,7 +59,7 @@ js::set('confirmDelete', $lang->programplan->confirmDelete);
<tbody>
<?php foreach($plans as $plan):?>
<tr data-id='<?php echo $plan->id?>'>
<?php foreach($setting as $key => $value) $this->programplan->printCell($value, $plan, $users);?>
<?php foreach($setting as $key => $value) $this->programplan->printCell($value, $plan, $users, $programID);?>
</tr>
<?php if(!empty($plan->children)):?>
<?php $i = 0;?>
@@ -67,7 +67,7 @@ js::set('confirmDelete', $lang->programplan->confirmDelete);
<?php $class = $i == 0 ? ' table-child-top' : '';?>
<?php $class .= ($i + 1 == count($plan->children)) ? ' table-child-bottom' : '';?>
<tr class='table-children<?php echo $class;?> parent-<?php echo $plan->id;?>' data-id='<?php echo $child->id?>'>
<?php foreach($setting as $key => $value) $this->programplan->printCell($value, $child, $users);?>
<?php foreach($setting as $key => $value) $this->programplan->printCell($value, $child, $users, $programID);?>
</tr>
<?php $i ++;?>
<?php endforeach;?>
+3 -2
View File
@@ -1104,11 +1104,12 @@ class project extends control
if(!empty($planID))
{
$plan = $this->dao->select('*')->from(TABLE_PRODUCTPLAN)->where('id')->eq($planID)->fetch();
$products = $this->dao->select('t1.id, t1.name, t1.type, t2.branch')->from(TABLE_PRODUCT)->alias('t1')
$plan = $this->dao->select('*')->from(TABLE_PRODUCTPLAN)->where('id')->eq($planID)->fetch();
$products = $this->dao->select('t1.id, t1.name, t1.type, t2.branch')->from(TABLE_PRODUCT)->alias('t1')
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.product')
->where('t1.id')->eq($plan->product)
->fetchAll('id');
$productPlan = $this->loadModel('productplan')->getPairs($plan->product, 0, 'unexpired');
}
+2 -3
View File
@@ -115,9 +115,8 @@ $lang->project->statusList['doing'] = 'In Arbeit';
$lang->project->statusList['suspended'] = 'Ausgesetzt';
$lang->project->statusList['closed'] = 'Geschlossen';
$lang->project->aclList['open'] = "Standard (Benutzer mit Rechten für Projekte können zugreifen.)";
$lang->project->aclList['private'] = "Privat (Nur Teammitglieder)";
$lang->project->aclList['custom'] = 'Benutzerdefiniert (Teammitglieder und Whitelist Benutzer haben Zugriff.)';
$lang->project->aclList['open'] = 'Inherited Project ACL (for who can access the current project)';
$lang->project->aclList['private'] = 'Private (for team members and project stakeholders)';
$lang->project->storyPoint = 'Story Point';
+2 -3
View File
@@ -115,9 +115,8 @@ $lang->project->statusList['doing'] = 'Doing';
$lang->project->statusList['suspended'] = 'Suspended';
$lang->project->statusList['closed'] = 'Closed';
$lang->project->aclList['open'] = "Default (Users who can visit {$lang->projectCommon} can access it.)";
$lang->project->aclList['private'] = 'Private (For team members only.)';
$lang->project->aclList['custom'] = 'Custom (Team members and the whitelist users can access it.)';
$lang->project->aclList['open'] = 'Inherited Project ACL (for who can access the current project)';
$lang->project->aclList['private'] = 'Private (for team members and project stakeholders)';
$lang->project->storyPoint = 'Story Point';
+2 -3
View File
@@ -115,9 +115,8 @@ $lang->project->statusList['doing'] = 'En cours';
$lang->project->statusList['suspended'] = 'Suspendu';
$lang->project->statusList['closed'] = 'Fermé';
$lang->project->aclList['open'] = "Défaut (les utilisateurs qui peuvent consulter l'onglet {$lang->projectCommon} peuvent y accéder.)";
$lang->project->aclList['private'] = "Privé (réservé aux membres de l'équipe.)";
$lang->project->aclList['custom'] = "Liste blanche (seuls les membres de l'équipe et de la Liste Blanche peuvent y accéder.)";
$lang->project->aclList['open'] = 'Inherited Project ACL (for who can access the current project)';
$lang->project->aclList['private'] = 'Private (for team members and project stakeholders)';
$lang->project->storyPoint = 'Story Point';
+2 -3
View File
@@ -115,9 +115,8 @@ $lang->project->statusList['doing'] = 'Đang làm';
$lang->project->statusList['suspended'] = 'Đã đình chỉ';
$lang->project->statusList['closed'] = 'Đã đóng';
$lang->project->aclList['open'] = "Mặc định (Người dùng có thể vào {$lang->projectCommon} có thể truy cập nó.)";
$lang->project->aclList['private'] = 'Riêng tư (Chỉ có thành viên nhóm.)';
$lang->project->aclList['custom'] = 'Tùy biến (Thành viên nhóm và người dùng dánh sách trắng có thể truy cập nó.)';
$lang->project->aclList['open'] = 'Inherited Project ACL (for who can access the current project)';
$lang->project->aclList['private'] = 'Private (for team members and project stakeholders)';
$lang->project->storyPoint = 'Story Point';
+2 -3
View File
@@ -115,9 +115,8 @@ $lang->project->statusList['doing'] = '進行中';
$lang->project->statusList['suspended'] = '已掛起';
$lang->project->statusList['closed'] = '已關閉';
$lang->project->aclList['open'] = "預設設置(有{$lang->projectCommon}視圖權限,即可訪問)";
$lang->project->aclList['private'] = "私有{$lang->projectCommon}(只有{$lang->projectCommon}團隊成員才能訪問)";
$lang->project->aclList['custom'] = "自定義白名單(團隊成員和白名單的成員可以訪問)";
$lang->project->aclList['open'] = "繼承項目訪問權限 (能訪問當前項目,即可訪問)";
$lang->project->aclList['private'] = "私有 (團隊成員和項目幹系人可訪問)";
/* 方法列表。*/
$lang->project->index = "{$lang->projectCommon}主頁";
+5
View File
@@ -310,6 +310,7 @@ class projectModel extends model
$project = fixer::input('post')
->setDefault('status', 'wait')
->setDefault('type', 'sprint')
->setDefault('project', $this->session->PRJ)
->setDefault('parent', $this->session->PRJ)
->setIF($this->post->acl != 'custom', 'whitelist', '')
->setDefault('openedBy', $this->app->user->account)
@@ -320,6 +321,7 @@ class projectModel extends model
->stripTags($this->config->project->editor->create['id'], $this->config->allowedTags)
->remove('products, workDays, delta, branch, uid, plans')
->get();
$project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->create['id'], $this->post->uid);
$this->dao->insert(TABLE_PROJECT)->data($project)
->autoCheck($skipFields = 'begin,end')
@@ -342,6 +344,9 @@ class projectModel extends model
$this->dao->update(TABLE_PROJECT)->set('`order`')->eq($projectID * 5)->where('id')->eq($projectID)->exec();
$this->file->updateObjectID($this->post->uid, $projectID, 'project');
/* Update the path. */
$this->loadModel('programplan')->setTreePath($projectID);
/* Copy team of project. */
if($copyProjectID != '')
{
+1 -5
View File
@@ -147,11 +147,7 @@
</tr>
<tr>
<th><?php echo $lang->project->acl;?></th>
<td colspan='3'><?php echo nl2br(html::radio('acl', $lang->project->aclList, $acl, "onclick='setWhite(this.value);'", 'block'));?></td>
</tr>
<tr id='whitelistBox' <?php if($acl != 'custom') echo "class='hidden'";?>>
<th><?php echo $lang->project->whitelist;?></th>
<td colspan='3'><?php echo html::checkbox('whitelist', $groups, $whitelist, '', '', 'inline');?></td>
<td colspan='3'><?php echo nl2br(html::radio('acl', $lang->project->aclList, $acl, '', 'block'));?></td>
</tr>
<tr>
<td colspan='4' class='text-center form-actions'>