diff --git a/config/zentaopms.php b/config/zentaopms.php
index 527d4c87fa..ff9bafc479 100644
--- a/config/zentaopms.php
+++ b/config/zentaopms.php
@@ -204,6 +204,7 @@ $config->objectTables['product'] = TABLE_PRODUCT;
$config->objectTables['story'] = TABLE_STORY;
$config->objectTables['productplan'] = TABLE_PRODUCTPLAN;
$config->objectTables['release'] = TABLE_RELEASE;
+$config->objectTables['program'] = TABLE_PROJECT;
$config->objectTables['project'] = TABLE_PROJECT;
$config->objectTables['task'] = TABLE_TASK;
$config->objectTables['build'] = TABLE_BUILD;
diff --git a/module/action/config.php b/module/action/config.php
index 0946a6c5c6..bcdfac26e6 100755
--- a/module/action/config.php
+++ b/module/action/config.php
@@ -3,6 +3,7 @@ $config->action->objectNameFields['product'] = 'name';
$config->action->objectNameFields['story'] = 'title';
$config->action->objectNameFields['productplan'] = 'title';
$config->action->objectNameFields['release'] = 'name';
+$config->action->objectNameFields['program'] = 'name';
$config->action->objectNameFields['project'] = 'name';
$config->action->objectNameFields['task'] = 'name';
$config->action->objectNameFields['build'] = 'name';
diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php
index db6c3aef0f..ee5b61aca7 100755
--- a/module/action/lang/zh-cn.php
+++ b/module/action/lang/zh-cn.php
@@ -68,6 +68,7 @@ $lang->action->objectTypes['product'] = $lang->productCommon;
$lang->action->objectTypes['story'] = $lang->storyCommon;
$lang->action->objectTypes['productplan'] = '计划';
$lang->action->objectTypes['release'] = '发布';
+$lang->action->objectTypes['program'] = '项目';
$lang->action->objectTypes['project'] = $lang->projectCommon;
$lang->action->objectTypes['task'] = '任务';
$lang->action->objectTypes['build'] = '版本';
@@ -386,6 +387,7 @@ $lang->action->label->product = $lang->productCommon . '|product|view|produc
$lang->action->label->productplan = '计划|productplan|view|productID=%s';
$lang->action->label->release = '发布|release|view|productID=%s';
$lang->action->label->story = "{$lang->storyCommon}|story|view|storyID=%s";
+$lang->action->label->program = "项目|program|browse|";
$lang->action->label->project = "{$lang->projectCommon}|project|view|projectID=%s";
$lang->action->label->task = '任务|task|view|taskID=%s';
$lang->action->label->build = '版本|build|view|buildID=%s';
@@ -407,6 +409,7 @@ $lang->action->label->risk = '风险|risk|view|riskID=%s';
/* Object type. */
$lang->action->search->objectTypeList[''] = '';
$lang->action->search->objectTypeList['product'] = $lang->productCommon;
+$lang->action->search->objectTypeList['program'] = '项目';
$lang->action->search->objectTypeList['project'] = $lang->projectCommon;
$lang->action->search->objectTypeList['bug'] = 'Bug';
$lang->action->search->objectTypeList['case'] = '用例';
diff --git a/module/program/control.php b/module/program/control.php
index 35ccba2052..f96d352206 100644
--- a/module/program/control.php
+++ b/module/program/control.php
@@ -491,18 +491,18 @@ class program extends control
* @access public
* @return void
*/
- public function delete($projectID, $confirm = 'no')
+ public function delete($programID, $confirm = 'no')
{
- if($confirm == 'no')
- {
- echo js::confirm(sprintf($this->lang->project->confirmDelete, $this->projects[$projectID]), $this->createLink('project', 'delete', "projectID=$projectID&confirm=yes"));
- exit;
- }
- else
- {
- $this->project->delete(TABLE_PROJECT, $projectID);
- die(js::locate(inlink('browse'), 'parent'));
- }
+ $childrenCount = $this->dao->select('count(*) as count')->from(TABLE_PROJECT)->where('parent')->eq($programID)->andWhere('template')->ne('')->andWhere('deleted')->eq(0)->fetch('count');
+ if($childrenCount) die(js::alert($this->lang->program->hasChildren));
+
+ $program = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($programID)->fetch();
+ if($confirm == 'no') die(js::confirm(sprintf($this->lang->program->confirmDelete, $program->name), $this->createLink('program', 'delete', "programID=$programID&confirm=yes")));
+
+ $this->dao->update(TABLE_PROJECT)->set('deleted')->eq(1)->where('id')->eq($programID)->exec();
+ $this->loadModel('action')->create('program', $programID, 'deleted', '', $extra = ACTIONMODEL::CAN_UNDELETED);
+
+ die(js::reload('parent'));
}
/**
diff --git a/module/program/css/browse.css b/module/program/css/browse.css
index 0c1d1bde46..4b05de0af8 100644
--- a/module/program/css/browse.css
+++ b/module/program/css/browse.css
@@ -26,4 +26,4 @@
#cards .pager {margin: 0; float: right;}
#cards .pager .btn{border: none}
-.w-215px{width:215px;}
+.w-240px{width:240px;}
diff --git a/module/program/lang/zh-cn.php b/module/program/lang/zh-cn.php
index 6d254ec317..93cb1a1beb 100644
--- a/module/program/lang/zh-cn.php
+++ b/module/program/lang/zh-cn.php
@@ -77,6 +77,11 @@ $lang->program->aclList['custom'] = "自定义白名单(团队成员和白名
$lang->program->privwayList['extend'] = '继承(取项目权限与组织权限的并集)';
$lang->program->privwayList['reset'] = '重新定义(只取项目权限)';
+$lang->program->statusList['wait'] = '未开始';
+$lang->program->statusList['doing'] = '进行中';
+$lang->program->statusList['suspended'] = '已挂起';
+$lang->program->statusList['closed'] = '已关闭';
+
$lang->program->noProgram = '暂时没有项目';
$lang->program->accessDenied = '您无权访问该项目!';
$lang->program->chooseProgramType = '选择项目管理方式';
@@ -91,4 +96,6 @@ $lang->program->scrumDesc = '简介:小步迭代,
$lang->program->cmmi = '瀑布';
$lang->program->cmmiTitle = '瀑布式项目管理';
$lang->program->cmmiDesc = '简介:按阶段规范化管理
包含功能点:估算、计划、阶段、报告';
-$lang->program->cannotCreateChild = '该项目已经有实际的内容,无法直接添加子项目。您可以为当前项目创建一个父项目,然后在新的父项目下面添加子项目。';
+$lang->program->cannotCreateChild = '该项目已经有实际的内容,无法直接添加子项目。您可以为当前项目创建一个父项目,然后在新的父项目下面添加子项目。';
+$lang->program->hasChildren = '该项目有子项目存在,不能删除。';
+$lang->program->confirmDelete = "您确定删除项目[%s]吗?";
diff --git a/module/program/view/browsebylist.html.php b/module/program/view/browsebylist.html.php
index 50a3b1bd92..69885f710a 100644
--- a/module/program/view/browsebylist.html.php
+++ b/module/program/view/browsebylist.html.php
@@ -14,7 +14,7 @@