From 774eceaf1dce5e54570dcad1cc6733555e6f9211 Mon Sep 17 00:00:00 2001
From: Yagami <976204163@qq.com>
Date: Thu, 25 Feb 2021 13:28:21 +0800
Subject: [PATCH] * Merge code.
---
module/common/lang/de.php | 6 -
module/common/lang/en.php | 6 -
module/common/lang/fr.php | 6 -
module/common/lang/vi.php | 6 -
module/common/lang/zh-cn.php | 6 -
module/group/lang/resource.php | 11 -
module/programplan/config.php | 54 --
module/programplan/control.php | 196 -----
module/programplan/js/browse.js | 34 -
module/programplan/js/create.js | 16 -
module/programplan/lang/de.php | 70 --
module/programplan/lang/en.php | 70 --
module/programplan/lang/fr.php | 70 --
module/programplan/lang/vi.php | 70 --
module/programplan/lang/zh-cn.php | 70 --
module/programplan/lang/zh-tw.php | 70 --
module/programplan/model.php | 910 ------------------------
module/programplan/view/browse.html.php | 38 -
module/programplan/view/create.html.php | 183 -----
module/programplan/view/edit.html.php | 107 ---
module/programplan/view/gantt.html.php | 422 -----------
module/programplan/view/list.html.php | 89 ---
module/project/model.php | 16 +-
23 files changed, 11 insertions(+), 2515 deletions(-)
delete mode 100644 module/programplan/config.php
delete mode 100644 module/programplan/control.php
delete mode 100644 module/programplan/js/browse.js
delete mode 100644 module/programplan/js/create.js
delete mode 100644 module/programplan/lang/de.php
delete mode 100644 module/programplan/lang/en.php
delete mode 100644 module/programplan/lang/fr.php
delete mode 100644 module/programplan/lang/vi.php
delete mode 100644 module/programplan/lang/zh-cn.php
delete mode 100644 module/programplan/lang/zh-tw.php
delete mode 100644 module/programplan/model.php
delete mode 100644 module/programplan/view/browse.html.php
delete mode 100644 module/programplan/view/create.html.php
delete mode 100644 module/programplan/view/edit.html.php
delete mode 100644 module/programplan/view/gantt.html.php
delete mode 100644 module/programplan/view/list.html.php
diff --git a/module/common/lang/de.php b/module/common/lang/de.php
index b4e65f25c0..f6f33b3544 100644
--- a/module/common/lang/de.php
+++ b/module/common/lang/de.php
@@ -663,7 +663,6 @@ $lang->navGroup->deploy = 'project';
$lang->navGroup->stakeholder = 'project';
$lang->navGroup->projectstory = 'project';
-$lang->navGroup->programplan = 'project';
$lang->navGroup->workestimation = 'project';
$lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
@@ -934,7 +933,6 @@ $lang->scrum->setMenu->whitelist = array('link' => 'White List|program|PRJWhitel
$lang->waterfallproduct = new stdclass();
$lang->workestimation = new stdclass();
-$lang->programplan = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
@@ -946,7 +944,6 @@ $lang->stakeholder = new stdclass();
$lang->projectstory = new stdclass();
$lang->workestimation->menu = new stdclass();
-$lang->programplan->menu = new stdclass();
$lang->review->menu = new stdclass();
$lang->milestone->menu = new stdclass();
$lang->design->menu = new stdclass();
@@ -962,9 +959,6 @@ $lang->workestimation->menu->workestimation = 'Work Estimation|workestimation|in
$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|');
-$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
-$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
-
$lang->design->menu->all = array('link' => 'All|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => 'HLDS|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => 'DDS|design|browse|productID={PRODUCT}&browseType=DDS');
diff --git a/module/common/lang/en.php b/module/common/lang/en.php
index a5dae08270..61e41ed546 100644
--- a/module/common/lang/en.php
+++ b/module/common/lang/en.php
@@ -663,7 +663,6 @@ $lang->navGroup->deploy = 'project';
$lang->navGroup->stakeholder = 'project';
$lang->navGroup->projectstory = 'project';
-$lang->navGroup->programplan = 'project';
$lang->navGroup->workestimation = 'project';
$lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
@@ -934,7 +933,6 @@ $lang->scrum->setMenu->whitelist = array('link' => 'White List|program|PRJWhitel
$lang->waterfallproduct = new stdclass();
$lang->workestimation = new stdclass();
-$lang->programplan = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
@@ -946,7 +944,6 @@ $lang->stakeholder = new stdclass();
$lang->projectstory = new stdclass();
$lang->workestimation->menu = new stdclass();
-$lang->programplan->menu = new stdclass();
$lang->review->menu = new stdclass();
$lang->milestone->menu = new stdclass();
$lang->design->menu = new stdclass();
@@ -962,9 +959,6 @@ $lang->workestimation->menu->workestimation = 'Work Estimation|workestimation|in
$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|');
-$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
-$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
-
$lang->design->menu->all = array('link' => 'All|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => 'HLDS|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => 'DDS|design|browse|productID={PRODUCT}&browseType=DDS');
diff --git a/module/common/lang/fr.php b/module/common/lang/fr.php
index 0fa1c92553..d0e860a1e0 100644
--- a/module/common/lang/fr.php
+++ b/module/common/lang/fr.php
@@ -663,7 +663,6 @@ $lang->navGroup->deploy = 'project';
$lang->navGroup->stakeholder = 'project';
$lang->navGroup->projectstory = 'project';
-$lang->navGroup->programplan = 'project';
$lang->navGroup->workestimation = 'project';
$lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
@@ -934,7 +933,6 @@ $lang->scrum->setMenu->whitelist = array('link' => 'White List|program|PRJWhitel
$lang->waterfallproduct = new stdclass();
$lang->workestimation = new stdclass();
-$lang->programplan = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
@@ -946,7 +944,6 @@ $lang->stakeholder = new stdclass();
$lang->projectstory = new stdclass();
$lang->workestimation->menu = new stdclass();
-$lang->programplan->menu = new stdclass();
$lang->review->menu = new stdclass();
$lang->milestone->menu = new stdclass();
$lang->design->menu = new stdclass();
@@ -962,9 +959,6 @@ $lang->workestimation->menu->workestimation = 'Work Estimation|workestimation|in
$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|');
-$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
-$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
-
$lang->design->menu->all = array('link' => 'All|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => 'HLDS|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => 'DDS|design|browse|productID={PRODUCT}&browseType=DDS');
diff --git a/module/common/lang/vi.php b/module/common/lang/vi.php
index 1538a0132c..b35dac502f 100644
--- a/module/common/lang/vi.php
+++ b/module/common/lang/vi.php
@@ -663,7 +663,6 @@ $lang->navGroup->deploy = 'project';
$lang->navGroup->stakeholder = 'project';
$lang->navGroup->projectstory = 'project';
-$lang->navGroup->programplan = 'project';
$lang->navGroup->workestimation = 'project';
$lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
@@ -933,7 +932,6 @@ $lang->scrum->setMenu->whitelist = array('link' => 'White List|program|PRJWhitel
$lang->waterfallproduct = new stdclass();
$lang->workestimation = new stdclass();
-$lang->programplan = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
@@ -945,7 +943,6 @@ $lang->stakeholder = new stdclass();
$lang->projectstory = new stdclass();
$lang->workestimation->menu = new stdclass();
-$lang->programplan->menu = new stdclass();
$lang->review->menu = new stdclass();
$lang->milestone->menu = new stdclass();
$lang->design->menu = new stdclass();
@@ -961,9 +958,6 @@ $lang->workestimation->menu->workestimation = 'Work Estimation|workestimation|in
$lang->stakeholder->menu->list = array('link' => 'Stakeholder List|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
$lang->stakeholder->menu->issue = array('link' => 'Issue|stakeholder|issue|');
-$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
-$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
-
$lang->design->menu->all = array('link' => 'All|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => 'HLDS|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => 'DDS|design|browse|productID={PRODUCT}&browseType=DDS');
diff --git a/module/common/lang/zh-cn.php b/module/common/lang/zh-cn.php
index 079216b88b..160ea953b6 100644
--- a/module/common/lang/zh-cn.php
+++ b/module/common/lang/zh-cn.php
@@ -661,7 +661,6 @@ $lang->navGroup->deploy = 'project';
$lang->navGroup->stakeholder = 'project';
$lang->navGroup->projectstory = 'project';
-$lang->navGroup->programplan = 'project';
$lang->navGroup->workestimation = 'project';
$lang->navGroup->review = 'project';
$lang->navGroup->reviewissue = 'project';
@@ -932,7 +931,6 @@ $lang->scrum->setMenu->whitelist = array('link' => '白名单|program|PRJWh
$lang->waterfallproduct = new stdclass();
$lang->workestimation = new stdclass();
-$lang->programplan = new stdclass();
$lang->review = new stdclass();
$lang->milestone = new stdclass();
$lang->design = new stdclass();
@@ -944,7 +942,6 @@ $lang->stakeholder = new stdclass();
$lang->projectstory = new stdclass();
$lang->workestimation->menu = new stdclass();
-$lang->programplan->menu = new stdclass();
$lang->review->menu = new stdclass();
$lang->milestone->menu = new stdclass();
$lang->design->menu = new stdclass();
@@ -960,9 +957,6 @@ $lang->workestimation->menu->workestimation = '工作量估算|workestimation|in
$lang->stakeholder->menu->list = array('link' => '干系人列表|stakeholder|browse|', 'alias' => 'create,edit,view,batchcreate');
$lang->stakeholder->menu->issue = array('link' => '问题管理|stakeholder|issue|');
-$lang->programplan->menu->gantt = array('link' => '甘特图|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
-$lang->programplan->menu->lists = array('link' => '阶段列表|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
-
$lang->design->menu->all = array('link' => '所有|design|browse|productID={PRODUCT}&browseType=all');
$lang->design->menu->hlds = array('link' => '概要设计|design|browse|productID={PRODUCT}&browseType=HLDS');
$lang->design->menu->dds = array('link' => '详细设计|design|browse|productID={PRODUCT}&browseType=DDS');
diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php
index b565cbcbc9..9425a0fc4a 100644
--- a/module/group/lang/resource.php
+++ b/module/group/lang/resource.php
@@ -61,7 +61,6 @@ $lang->moduleOrder[195] = 'cron';
$lang->moduleOrder[200] = 'dev';
$lang->moduleOrder[205] = 'message';
$lang->moduleOrder[210] = 'design';
-$lang->moduleOrder[215] = 'programplan';
$lang->resource = new stdclass();
@@ -673,16 +672,6 @@ $lang->design->methodOrder[45] = 'viewCommit';
$lang->design->methodOrder[50] = 'unlinkCommit';
$lang->design->methodOrder[55] = 'revision';
-/* Program plan. */
-$lang->resource->programplan = new stdclass();
-$lang->resource->programplan->browse = 'browse';
-$lang->resource->programplan->create = 'create';
-$lang->resource->programplan->edit = 'edit';
-
-$lang->programplan->methodOrder[5] = 'browse';
-$lang->programplan->methodOrder[10] = 'create';
-$lang->programplan->methodOrder[15] = 'edit';
-
/* Task. */
$lang->resource->task = new stdclass();
$lang->resource->task->create = 'create';
diff --git a/module/programplan/config.php b/module/programplan/config.php
deleted file mode 100644
index 2710d95c98..0000000000
--- a/module/programplan/config.php
+++ /dev/null
@@ -1,54 +0,0 @@
-programplan->create = new stdclass();
-$config->programplan->edit = new stdclass();
-$config->programplan->create->requiredFields = 'name,begin,end';
-$config->programplan->edit->requiredFields = 'name,begin,end';
-
-$config->programplan->datatable = new stdclass();
-$config->programplan->datatable->defaultField = array('id', 'name', 'percent', 'attribute', 'begin', 'end', 'realBegan', 'realEnd', 'actions');
-
-$config->programplan->datatable->fieldList['id']['title'] = 'idAB';
-$config->programplan->datatable->fieldList['id']['fixed'] = 'left';
-$config->programplan->datatable->fieldList['id']['width'] = '70';
-$config->programplan->datatable->fieldList['id']['required'] = 'yes';
-
-$config->programplan->datatable->fieldList['name']['title'] = 'name';
-$config->programplan->datatable->fieldList['name']['fixed'] = 'left';
-$config->programplan->datatable->fieldList['name']['width'] = 'auto';
-$config->programplan->datatable->fieldList['name']['required'] = 'yes';
-
-$config->programplan->datatable->fieldList['percent']['title'] = 'percent';
-$config->programplan->datatable->fieldList['percent']['fixed'] = 'no';
-$config->programplan->datatable->fieldList['percent']['width'] = '100';
-$config->programplan->datatable->fieldList['percent']['required'] = 'no';
-
-$config->programplan->datatable->fieldList['attribute']['title'] = 'attribute';
-$config->programplan->datatable->fieldList['attribute']['fixed'] = 'no';
-$config->programplan->datatable->fieldList['attribute']['width'] = '90';
-$config->programplan->datatable->fieldList['attribute']['required'] = 'no';
-
-$config->programplan->datatable->fieldList['begin']['title'] = 'begin';
-$config->programplan->datatable->fieldList['begin']['fixed'] = 'no';
-$config->programplan->datatable->fieldList['begin']['width'] = '90';
-$config->programplan->datatable->fieldList['begin']['required'] = 'no';
-
-$config->programplan->datatable->fieldList['end']['title'] = 'end';
-$config->programplan->datatable->fieldList['end']['fixed'] = 'no';
-$config->programplan->datatable->fieldList['end']['width'] = '90';
-$config->programplan->datatable->fieldList['end']['required'] = 'no';
-
-$config->programplan->datatable->fieldList['realBegan']['title'] = 'realBegan';
-$config->programplan->datatable->fieldList['realBegan']['fixed'] = 'no';
-$config->programplan->datatable->fieldList['realBegan']['width'] = '90';
-$config->programplan->datatable->fieldList['realBegan']['required'] = 'no';
-
-$config->programplan->datatable->fieldList['realEnd']['title'] = 'realEnd';
-$config->programplan->datatable->fieldList['realEnd']['fixed'] = 'no';
-$config->programplan->datatable->fieldList['realEnd']['width'] = '90';
-$config->programplan->datatable->fieldList['realEnd']['required'] = 'no';
-
-$config->programplan->datatable->fieldList['actions']['title'] = 'actions';
-$config->programplan->datatable->fieldList['actions']['fixed'] = 'right';
-$config->programplan->datatable->fieldList['actions']['width'] = '150';
-$config->programplan->datatable->fieldList['actions']['required'] = 'yes';
-$config->programplan->datatable->fieldList['actions']['sort'] = 'no';
diff --git a/module/programplan/control.php b/module/programplan/control.php
deleted file mode 100644
index c02c2e9fdf..0000000000
--- a/module/programplan/control.php
+++ /dev/null
@@ -1,196 +0,0 @@
-
- * @package programplan
- * @version $Id: control.php 5107 2013-07-12 01:46:12Z chencongzhi520@gmail.com $
- * @link http://www.zentao.net
- */
-class programplan extends control
-{
- /**
- * __construct
- *
- * @param string $moduleName
- * @param string $methodName
- * @access public
- * @return void
- */
- public function __construct($moduleName = '', $methodName = '')
- {
- parent::__construct($moduleName, $methodName);
- }
-
- /**
- * Common action.
- *
- * @param int $projectID
- * @param int $productID
- * @param string $extra
- * @access public
- * @return void
- */
- public function commonAction($projectID, $productID = 0, $extra = '')
- {
- $products = $this->loadModel('product')->getProductPairsByProject($projectID);
- $productID = $this->product->saveState($productID, $products);
- $this->productID = $productID;
- $this->product->setMenu($products, $productID, 0, 0, '', $extra);
- $this->programplan->setMenu($projectID, $productID);
- }
-
- /**
- * Browse program plans.
- *
- * @param int $projectID
- * @param int $productID
- * @param string $type
- * @param string $orderBy
- * @param int $baselineID
- * @access public
- * @return void
- */
- public function browse($projectID = 0, $productID = 0, $type = 'gantt', $orderBy = 'id_asc', $baselineID = 0)
- {
- $this->app->loadLang('stage');
- $this->commonAction($projectID, $productID, $type);
- $this->session->set('projectPlanList', $this->app->getURI(true));
-
- if(common::hasPriv('programplan', 'create')) $this->lang->TRActions = html::a($this->createLink('programplan', 'create', "projectID=$projectID"), " " . $this->lang->programplan->create, '', "class='btn btn-primary'");
-
- $selectCustom = 0; // Display date and task settings.
- $dateDetails = 1; // Gantt chart detail date display.
- if($type == 'gantt')
- {
- $owner = $this->app->user->account;
- $module = 'programplan';
- $section = 'browse';
- $object = 'stageCustom';
- $selectCustom = $this->loadModel('setting')->getItem("owner={$owner}&module={$module}§ion={$section}&key={$object}");
- if(strpos($selectCustom, 'date') !== false) $dateDetails = 0;
-
- $plans = $this->programplan->getDataForGantt($projectID, $this->productID, $baselineID);
- }
-
- if($type == 'lists')
- {
- $sort = $this->loadModel('common')->appendOrder($orderBy);
- $this->loadModel('datatable');
- $plans = $this->programplan->getPlans($projectID, $this->productID, $sort);
- }
-
- $this->view->title = $this->lang->programplan->browse;
- $this->view->position[] = $this->lang->programplan->browse;
- $this->view->projectID = $projectID;
- $this->view->productID = $this->productID;
- $this->view->type = $type;
- $this->view->plans = $plans;
- $this->view->orderBy = $orderBy;
- $this->view->selectCustom = $selectCustom;
- $this->view->dateDetails = $dateDetails;
- $this->view->users = $this->loadModel('user')->getPairs('noletter');
-
- $this->display();
- }
-
- /**
- * Create a project plan.
- *
- * @param int $projectID
- * @param int $productID
- * @param int $planID
- * @access public
- * @return void
- */
- public function create($projectID = 0, $productID = 0, $planID = 0)
- {
- $this->commonAction($projectID, $productID);
- $this->app->loadLang('project');
- if($_POST)
- {
- $this->programplan->create($projectID, $this->productID, $planID);
- if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
-
- $locate = $this->session->projectPlanList ? $this->session->projectPlanList : $this->createLink('programplan', 'browse', "projectID=$projectID");
- $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate));
- }
-
- $this->app->loadLang('stage');
- $project = $this->loadModel('project')->getById($projectID);
-
- $this->view->title = $this->lang->programplan->create . $this->lang->colon . $project->name;
- $this->view->position[] = html::a($this->createLink('programplan', 'browse', "projectID=$projectID"), $project->name);
- $this->view->position[] = $this->lang->programplan->create;
-
- $this->view->project = $project;
- $this->view->stages = empty($planID) ? $this->loadModel('stage')->getStages('id_asc') : array();
- $this->view->programPlan = $this->project->getById($planID);
- $this->view->plans = $this->programplan->getStage($planID ? $planID : $projectID, $this->productID, 'parent');
- $this->view->planID = $planID;
- $this->view->type = 'lists';
-
- $this->display();
- }
-
- /**
- * Edit a project plan.
- *
- * @param int $planID
- * @param int $projectID
- * @access public
- * @return void
- */
- public function edit($planID = 0, $projectID = 0)
- {
- $this->app->loadLang('project');
- $plan = $this->programplan->getByID($planID);
- if($_POST)
- {
- $changes = $this->programplan->update($planID, $projectID);
-
- if(dao::isError()) $this->send(array('result' => 'fail', 'message' => dao::getError()));
- if($changes)
- {
- $actionID = $this->loadModel('action')->create('execution', $planID, 'edited');
- $this->action->logHistory($actionID, $changes);
- }
- $locate = isonlybody() ? 'parent' : inlink('browse', "program=$plan->program&type=lists");
- $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $locate));
- }
-
- $this->app->loadLang('stage');
- $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->isCreateTask = $this->programplan->isCreateTask($planID);
- $this->view->plan = $plan;
-
- $this->display();
- }
-
- /**
- * Save custom settings via ajax.
- *
- * @access public
- * @return void
- */
- public function ajaxCustom()
- {
- $data = fixer::input('post')->get();
- $owner = $this->app->user->account;
- $module = 'programplan';
- $section = 'browse';
- $object = 'stageCustom';
- $setting = $this->loadModel('setting');
- $custom = empty($data->stageCustom) ? '' : implode(',', $data->stageCustom);
- $setting->setItem("$owner.$module.$section.$object", $custom);
-
- $response = array();
- $response['result'] = 'success';
- $response['message'] = '';
- $this->send($response);
- }
-}
diff --git a/module/programplan/js/browse.js b/module/programplan/js/browse.js
deleted file mode 100644
index 480420dc76..0000000000
--- a/module/programplan/js/browse.js
+++ /dev/null
@@ -1,34 +0,0 @@
-$(function()
-{
- setTimeout(function()
- {
- fixScroll();
- }, 500);
-})
-
-function fixScroll()
-{
- var $scrollwrapper = $('div.datatable').first().find('.scroll-wrapper:first');
- if($scrollwrapper.size() == 0)return;
-
- var $tfoot = $('div.datatable').first().find('table tfoot:last');
- var scrollOffset = $scrollwrapper.offset().top + $scrollwrapper.find('.scroll-slide').height();
- if($tfoot.size() > 0) scrollOffset += $tfoot.height();
- if($('div.datatable.head-fixed').size() == 0) scrollOffset -= '29';
- var windowH = $(window).height();
- if(scrollOffset > windowH + $(window).scrollTop()) $scrollwrapper.css({'position': 'fixed', 'bottom': 50 + 'px'});
- $(window).scroll(function()
- {
- newBottom = $tfoot.hasClass('fixedTfootAction') ? 50 + $tfoot.height() : 50;
- if(typeof(ssoRedirect) != "undefined") newBottom = 50;
- if(scrollOffset <= windowH + $(window).scrollTop())
- {
- $scrollwrapper.css({'position':'relative', 'bottom': '0px'});
- }
- else if($scrollwrapper.css('position') != 'fixed')
- {
- $scrollwrapper.css({'position': 'fixed', 'bottom': newBottom + 'px'});
- bottom = newBottom;
- }
- });
-}
diff --git a/module/programplan/js/create.js b/module/programplan/js/create.js
deleted file mode 100644
index 62a08dbd0e..0000000000
--- a/module/programplan/js/create.js
+++ /dev/null
@@ -1,16 +0,0 @@
-function addItem(obj)
-{
- var item = $('#addItem').html().replace(/%i%/g, i);
- $(obj).closest('tr').after('
' + item + '
');
- var newItem = $('#names' + i).closest('tr');
- newItem.find('.form-date').datepicker();
- $("#output" + i).chosen();
- $("#output_i__chosen").remove();
- i ++;
-}
-
-function deleteItem(obj)
-{
- if($('#planForm .table tbody').children().length < 2) return false;
- $(obj).closest('tr').remove();
-}
diff --git a/module/programplan/lang/de.php b/module/programplan/lang/de.php
deleted file mode 100644
index 7b79967dd4..0000000000
--- a/module/programplan/lang/de.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
- * @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 = 'Stage Name';
-$lang->programplan->subStageName = 'Sub Stage Name';
-$lang->programplan->percent = 'Workload Ratio';
-$lang->programplan->percentAB = 'Workload Ratio';
-$lang->programplan->planPercent = 'Workload';
-$lang->programplan->attribute = 'Stage Type';
-$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->planDateRange = 'Planned Start';
-$lang->programplan->realDateRange = 'Actual Start';
-$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->milestoneList[1] = 'Yes';
-$lang->programplan->milestoneList[0] = 'No';
-
-$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->workloadTips = 'The proportion of the sub stage workload is divided by 100%.';
-
-$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.';
-$lang->programplan->error->parentWorkload = 'The sum of the workload of the child phase cannot be greater than that of the parent phase: %s.';
diff --git a/module/programplan/lang/en.php b/module/programplan/lang/en.php
deleted file mode 100644
index 7b79967dd4..0000000000
--- a/module/programplan/lang/en.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
- * @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 = 'Stage Name';
-$lang->programplan->subStageName = 'Sub Stage Name';
-$lang->programplan->percent = 'Workload Ratio';
-$lang->programplan->percentAB = 'Workload Ratio';
-$lang->programplan->planPercent = 'Workload';
-$lang->programplan->attribute = 'Stage Type';
-$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->planDateRange = 'Planned Start';
-$lang->programplan->realDateRange = 'Actual Start';
-$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->milestoneList[1] = 'Yes';
-$lang->programplan->milestoneList[0] = 'No';
-
-$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->workloadTips = 'The proportion of the sub stage workload is divided by 100%.';
-
-$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.';
-$lang->programplan->error->parentWorkload = 'The sum of the workload of the child phase cannot be greater than that of the parent phase: %s.';
diff --git a/module/programplan/lang/fr.php b/module/programplan/lang/fr.php
deleted file mode 100644
index 7b79967dd4..0000000000
--- a/module/programplan/lang/fr.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
- * @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 = 'Stage Name';
-$lang->programplan->subStageName = 'Sub Stage Name';
-$lang->programplan->percent = 'Workload Ratio';
-$lang->programplan->percentAB = 'Workload Ratio';
-$lang->programplan->planPercent = 'Workload';
-$lang->programplan->attribute = 'Stage Type';
-$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->planDateRange = 'Planned Start';
-$lang->programplan->realDateRange = 'Actual Start';
-$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->milestoneList[1] = 'Yes';
-$lang->programplan->milestoneList[0] = 'No';
-
-$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->workloadTips = 'The proportion of the sub stage workload is divided by 100%.';
-
-$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.';
-$lang->programplan->error->parentWorkload = 'The sum of the workload of the child phase cannot be greater than that of the parent phase: %s.';
diff --git a/module/programplan/lang/vi.php b/module/programplan/lang/vi.php
deleted file mode 100644
index 7b79967dd4..0000000000
--- a/module/programplan/lang/vi.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
- * @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 = 'Stage Name';
-$lang->programplan->subStageName = 'Sub Stage Name';
-$lang->programplan->percent = 'Workload Ratio';
-$lang->programplan->percentAB = 'Workload Ratio';
-$lang->programplan->planPercent = 'Workload';
-$lang->programplan->attribute = 'Stage Type';
-$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->planDateRange = 'Planned Start';
-$lang->programplan->realDateRange = 'Actual Start';
-$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->milestoneList[1] = 'Yes';
-$lang->programplan->milestoneList[0] = 'No';
-
-$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->workloadTips = 'The proportion of the sub stage workload is divided by 100%.';
-
-$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.';
-$lang->programplan->error->parentWorkload = 'The sum of the workload of the child phase cannot be greater than that of the parent phase: %s.';
diff --git a/module/programplan/lang/zh-cn.php b/module/programplan/lang/zh-cn.php
deleted file mode 100644
index 7d6fa7f818..0000000000
--- a/module/programplan/lang/zh-cn.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
- * @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->subStageName = '子阶段名称';
-$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->planDateRange = '计划起始日期';
-$lang->programplan->realDateRange = '实际起始日期';
-$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->milestoneList[1] = '是';
-$lang->programplan->milestoneList[0] = '否';
-
-$lang->programplan->noData = '暂无数据。';
-$lang->programplan->children = '二级计划';
-$lang->programplan->childrenAB = '子';
-$lang->programplan->confirmDelete = '确定要删除当前计划吗?';
-$lang->programplan->workloadTips = '子阶段工作量占比按百分百的比例进行拆分';
-
-$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 = '已分解任务,不可添加子阶段';
-$lang->programplan->error->parentWorkload = '子阶段的工作量之和不能大于父阶段的工作量:%s';
diff --git a/module/programplan/lang/zh-tw.php b/module/programplan/lang/zh-tw.php
deleted file mode 100644
index fb61f5ea6f..0000000000
--- a/module/programplan/lang/zh-tw.php
+++ /dev/null
@@ -1,70 +0,0 @@
-
- * @package programplan
- * @version $Id: zh-tw.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->subStageName = '子階段名稱';
-$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->planDateRange = '計划起始日期';
-$lang->programplan->realDateRange = '實際起始日期';
-$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->milestoneList[1] = '是';
-$lang->programplan->milestoneList[0] = '否';
-
-$lang->programplan->noData = '暫無數據。';
-$lang->programplan->children = '二級計劃';
-$lang->programplan->childrenAB = '子';
-$lang->programplan->confirmDelete = '確定要刪除當前計劃嗎?';
-$lang->programplan->workloadTips = '子階段工作量占比按百分百的比例進行拆分';
-
-$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 = '已分解任務,不可添加子階段';
-$lang->programplan->error->parentWorkload = '子階段的工作量之和不能大於父階段的工作量:%s';
diff --git a/module/programplan/model.php b/module/programplan/model.php
deleted file mode 100644
index 3c00650367..0000000000
--- a/module/programplan/model.php
+++ /dev/null
@@ -1,910 +0,0 @@
-
- * @package programplan
- * @version $Id: model.php 5079 2013-07-10 00:44:34Z chencongzhi520@gmail.com $
- * @link http://www.zentao.net
- */
-?>
-dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($planID)->fetch();
-
- return $this->processPlan($plan);
- }
-
- /**
- * Get plans list.
- *
- * @param int $projectID
- * @param int $productID
- * @param string $browseType all|parent
- * @param string $orderBy
- * @access public
- * @return array
- */
- public function getStage($projectID = 0, $productID = 0, $browseType = 'all', $orderBy = 'id_asc')
- {
- if(empty($projectID) || empty($productID)) return array();
-
- $plans = $this->dao->select('t2.*')->from(TABLE_PROJECTPRODUCT)->alias('t1')
- ->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
- ->where('t1.product')->eq($productID)
- ->andWhere('t2.type')->eq('stage')
- ->beginIF($browseType == 'all')->andWhere('t2.project')->eq($projectID)->fi()
- ->beginIF($browseType == 'parent')->andWhere('t2.parent')->eq($projectID)->fi()
- ->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->sprints)->fi()
- ->andWhere('t2.deleted')->eq('0')
- ->orderBy($orderBy)
- ->fetchAll('id');
-
- return $this->processPlans($plans);
- }
-
- /**
- * Get plans by idList.
- *
- * @param array $idList
- * @access public
- * @return array
- */
- public function getByList($idList = array())
- {
- $plans = $this->dao->select('*')->from(TABLE_PROJECT)
- ->where('id')->in($idList)
- ->andWhere('type')->eq('project')
- ->fetchAll('id');
-
- return $this->processPlans($plans);
- }
-
- /**
- * Get plans.
- *
- * @param int $projectID
- * @param int $productID
- * @param string $orderBy
- * @access public
- * @return array
- */
- public function getPlans($projectID = 0, $productID = 0, $orderBy = 'id_asc')
- {
- $plans = $this->getStage($projectID, $productID, 'all', $orderBy);
-
- $parents = array();
- $children = array();
- foreach($plans as $planID => $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();
-
- return $parents;
- }
-
- /**
- * Get pairs.
- *
- * @param int $projectID
- * @param int $productID
- * @param string $type
- * @access public
- * @return array
- */
- public function getPairs($projectID, $productID = 0, $type = 'all')
- {
- $plans = $this->getPlans($projectID, $productID);
-
- $pairs = array(0 => '');
- foreach($plans as $plan)
- {
- $pairs[$plan->id] = $plan->name;
- if(!empty($plan->children))
- {
- foreach($plan->children as $child) $pairs[$child->id] = $plan->name . '/' . $child->name;
- }
- }
-
- return $pairs;
- }
-
- /**
- * Get gantt data.
- *
- * @param int $projectID
- * @param int $productID
- * @param int $baselineID
- * @param string $selectCustom
- * @param bool $returnJson
- * @access public
- * @return string
- */
- public function getDataForGantt($projectID, $productID, $baselineID = 0, $selectCustom = '', $returnJson = true)
- {
- $this->loadModel('stage');
-
- $plans = $this->getStage($projectID, $productID);
- if($baselineID)
- {
- $baseline = $this->loadModel('cm')->getByID($baselineID);
- $oldData = json_decode($baseline->data);
- $oldPlans = $oldData->stage;
- foreach($oldPlans as $id => $oldPlan)
- {
- if(!isset($plans[$id])) continue;
- $plans[$id]->version = $oldPlan->version;
- $plans[$id]->name = $oldPlan->name;
- $plans[$id]->milestone = $oldPlan->milestone;
- $plans[$id]->begin = $oldPlan->begin;
- $plans[$id]->end = $oldPlan->end;
- }
- }
-
- $datas = array();
- $planIDList = array();
- $isMilestone = " ";
- $stageIndex = array();
- foreach($plans as $plan)
- {
- $planIDList[$plan->id] = $plan->id;
-
- $start = $plan->begin == '0000-00-00' ? '' : date('d-m-Y', strtotime($plan->begin));
- $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 : $plan->name . $isMilestone ;
- $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;
-
- $datas['data'][] = $data;
- $stageIndex[] = array('planID' => $plan->id, 'progress' => array('totalConsumed' => 0, 'totalReal' => 0));
- }
-
- $taskSign = "[ T ] ";
- $taskPri = "%s ";
-
- /* Judge whether to display tasks under the stage. */
- $owner = $this->app->user->account;
- $module = 'programplan';
- $section = 'browse';
- $object = 'stageCustom';
-
- if(empty($selectCustom)) $selectCustom = $this->loadModel('setting')->getItem("owner={$owner}&module={$module}§ion={$section}&key={$object}");
-
- $tasks = array();
- if(strpos($selectCustom, 'task') !== false)
- {
- $tasks = $this->dao->select('*')->from(TABLE_TASK)->where('deleted')->eq(0)->andWhere('project')->in($planIDList)->fetchAll('id');
- }
-
- if($baselineID)
- {
- $oldTasks = $oldData->task;
- foreach($oldTasks as $id => $oldTask)
- {
- if(!isset($tasks->$id)) continue;
- $tasks->$id->version = $oldTask->version;
- $tasks->$id->name = $oldTask->name;
- $tasks->$id->estStarted = $oldTask->estStarted;
- $tasks->$id->deadline = $oldTask->deadline;
- }
- }
-
- foreach($tasks as $task)
- {
- $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);
-
- $data = new stdclass();
- $data->id = $task->project . '-' . $task->id;
- $data->type = 'task';
- $data->text = $taskSign . $priIcon . $task->name;
- $data->percent = '';
- $data->attribute = '';
- $data->milestone = '';
- $data->start_date = $start;
- $data->deadline = $end;
- $data->realBegan = $realBegan;
- $data->realEnd = $realEnd;
- $data->duration = helper::diffDate($task->deadline, $task->estStarted) + 1;
- $data->parent = $task->parent > 0 ? $task->project . '-' . $task->parent : $task->project;
- $data->open = true;
- $progress = $task->consumed ? round($task->consumed / ($task->left + $task->consumed), 3) * 100 : 0;
- $data->taskProgress = $progress . '%';
-
- if($data->start_date == '' or $data->deadline == '') $data->duration = 0;
-
- $datas['data'][] = $data;
- foreach($stageIndex as $index => $stage)
- {
- if($stage['planID'] == $task->project)
- {
- $stageIndex[$index]['progress']['totalConsumed'] += $task->consumed;
- $stageIndex[$index]['progress']['totalReal'] += ($task->left + $task->consumed);
- }
- }
- }
-
- /* Calculate the progress of the phase. */
- foreach($stageIndex as $index => $stage)
- {
- $progress = empty($stage['progress']['totalConsumed']) ? 0 : round($stage['progress']['totalConsumed'] / $stage['progress']['totalReal'], 3) * 100;
- $progress .= '%';
- $datas['data'][$index]->taskProgress = $progress;
- }
-
- return $returnJson ? json_encode($datas) : $datas;
- }
-
- /**
- * Get total percent.
- *
- * @param object $stage
- * @param object $parent
- * @access public
- * @return int
- */
- public function getTotalPercent($stage, $parent = false)
- {
- /* When parent is equal to true, query the total workload of the subphase. */
- $projectID = $parent ? $stage->id : $stage->project;
- $plans = $this->getStage($projectID, $stage->product, 'parent');
-
- $totalPercent = 0;
- $stageID = $stage->id;
- foreach($plans as $id => $stage)
- {
- if($id == $stageID) continue;
- $totalPercent += $stage->percent;
- }
-
- return $totalPercent;
- }
-
- /**
- * Process plans.
- *
- * @param int $plans
- * @access public
- * @return object
- */
- public function processPlans($plans)
- {
- foreach($plans as $planID => $plan) $plans[$planID] = $this->processPlan($plan);
- return $plans;
- }
-
- /**
- * Process plan.
- *
- * @param int $plan
- * @access public
- * @return object
- */
- public function processPlan($plan)
- {
- $plan->setMilestone = true;
-
- if($plan->parent)
- {
- $attribute = $this->dao->select('attribute')->from(TABLE_PROJECT)->where('id')->eq($plan->parent)->fetch('attribute');
- $plan->attribute = $attribute == 'develop' ? $attribute : $plan->attribute;
- }
- else
- {
- $milestones = $this->dao->select('count(*) AS count')->from(TABLE_PROJECT)
- ->where('parent')->eq($plan->id)
- ->andWhere('milestone')->eq(1)
- ->andWhere('deleted')->eq(0)
- ->fetch('count');
- if($milestones > 0)
- {
- $plan->milestone = 0;
- $plan->setMilestone = false;
- }
- }
-
- $plan->begin = $plan->begin == '0000-00-00' ? '' : $plan->begin;
- $plan->end = $plan->end == '0000-00-00' ? '' : $plan->end;
- $plan->realBegan = $plan->realBegan == '0000-00-00' ? '' : $plan->realBegan;
- $plan->realEnd = $plan->realEnd == '0000-00-00' ? '' : $plan->realEnd;
-
- $plan->product = $this->loadModel('product')->getProductIDByProject($plan->id);
- $plan->productName = $this->dao->findByID($plan->product)->from(TABLE_PRODUCT)->fetch('name');
-
- return $plan;
- }
-
- /**
- * Get duration.
- *
- * @param int $begin
- * @param int $end
- * @access public
- * @return int
- */
- public function getDuration($begin, $end)
- {
- $duration = $this->loadModel('holiday')->getActualWorkingDays($begin, $end);
- return count($duration);
- }
-
- /**
- * Create a plan.
- *
- * @param int $projectID
- * @param int $productID
- * @param int $parentID
- * @access public
- * @return bool
- */
- public function create($projectID = 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;
-
- /* The child phase type setting is the same as the parent phase. */
- $parentAttribute = '';
- $parentPercent = 0;
- if($parentID)
- {
- $parentStage = $this->getByID($parentID);
- $parentAttribute = $parentStage->attribute;
- $parentPercent = $parentStage->percent;
- $parentACL = $parentStage->acl;
- }
-
- $attributes = array_values($attributes);
- $milestone = array_values($milestone);
- $datas = array();
- foreach($names as $key => $name)
- {
- if(empty($name)) continue;
-
- $plan = new stdclass();
- $plan->id = isset($planIDList[$key]) ? $planIDList[$key] : '';
- $plan->type = 'stage';
- $plan->project = $projectID;
- $plan->parent = $parentID ? $parentID : $projectID;
- $plan->name = $names[$key];
- $plan->percent = $percents[$key];
- $plan->attribute = empty($parentID) ? $attributes[$key] : $parentAttribute;
- $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 = empty($parentID) ? $acl[$key] : $parentACL;
-
- $datas[] = $plan;
- }
-
- $totalPercent = 0;
- $totalDevType = 0;
- $milestone = 0;
- foreach($datas as $plan)
- {
- if($plan->percent and !preg_match("/^[0-9]+(.[0-9]{1,3})?$/", $plan->percent))
- {
- dao::$errors['message'][] = $this->lang->programplan->error->percentNumber;
- return false;
- }
- if($plan->end != '0000-00-00' and $plan->end < $plan->begin)
- {
- dao::$errors['message'][] = $this->lang->programplan->error->planFinishSmall;
- return false;
- }
-
- if($plan->begin == '0000-00-00') $plan->begin = '';
- if($plan->end == '0000-00-00') $plan->end = '';
- foreach(explode(',', $this->config->programplan->create->requiredFields) as $field)
- {
- $field = trim($field);
- if($field and empty($plan->$field))
- {
- dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->programplan->$field);
- return false;
- }
- }
-
- $plan->percent = (float)$plan->percent;
- $totalPercent += $plan->percent;
-
- if($plan->milestone) $milestone = 1;
- }
-
- if($totalPercent > 100) return dao::$errors['message'][] = $this->lang->programplan->error->percentOver;
-
- $this->loadModel('action');
- $this->loadModel('user');
- $this->loadModel('project');
- $this->app->loadLang('doc');
- $account = $this->app->user->account;
- $now = helper::now();
- foreach($datas as $data)
- {
- /* Set planDuration and realDuration. */
- $data->planDuration = $this->getDuration($data->begin, $data->end);
- $data->realDuration = $this->getDuration($data->realBegan, $data->realEnd);
-
- $projectChanged = false;
- $data->days = helper::diffDate($data->end, $data->begin) + 1;
- if($data->id)
- {
- $stageID = $data->id;
- unset($data->id);
-
- $oldStage = $this->getByID($stageID);
- $planChanged = ($oldStage->name != $data->name || $oldStage->milestone != $data->milestone || $oldStage->begin != $data->begin || $oldStage->end != $data->end);
-
- if($planChanged) $data->version = $oldStage->version + 1;
- $this->dao->update(TABLE_PROJECT)->data($data)
- ->autoCheck()
- ->batchCheck($this->config->programplan->edit->requiredFields, 'notempty')
- ->checkIF($plan->percent != '', 'percent', 'float')
- ->where('id')->eq($stageID)
- ->exec();
-
- if($data->acl != 'open') $this->user->updateUserView($stageID, 'sprint');
-
- /* Record version change information. */
- if($planChanged)
- {
- $spec = new stdclass();
- $spec->project = $stageID;
- $spec->version = $data->version;
- $spec->name = $data->name;
- $spec->milestone = $data->milestone;
- $spec->begin = $data->begin;
- $spec->end = $data->end;
- $this->dao->insert(TABLE_PROJECTSPEC)->data($spec)->exec();
- }
-
- $changes = common::createChanges($oldStage, $data);
- $actionID = $this->action->create('execution', $stageID, 'edited');
- $this->action->logHistory($actionID, $changes);
- }
- else
- {
- unset($data->id);
- $data->status = 'wait';
- $data->version = 1;
- $data->parentVersion = $data->parent == 0 ? 0 : $this->dao->findByID($data->parent)->from(TABLE_PROJECT)->fetch('version');
- $data->team = substr($data->name,0, 30);
- $data->openedBy = $account;
- $data->openedDate = $now;
- $data->openedVersion = $this->config->version;
- if(!isset($data->acl)) $data->acl = $this->dao->findByID($data->parent)->from(TABLE_PROJECT)->fetch('acl');
- $this->dao->insert(TABLE_PROJECT)->data($data)
- ->autoCheck()
- ->batchCheck($this->config->programplan->create->requiredFields, 'notempty')
- ->checkIF($plan->percent != '', 'percent', 'float')
- ->exec();
-
- if(!dao::isError())
- {
- $stageID = $this->dao->lastInsertID();
-
- if($data->acl != 'open') $this->user->updateUserView($stageID, 'sprint');
- $this->dao->update(TABLE_PROJECT)->set('`order`')->eq($stageID * 5)->where('id')->eq($stageID)->exec();
-
- /* Create doc lib. */
- $lib = new stdclass();
- $lib->project = $stageID;
- $lib->name = $this->lang->doclib->main['project'];
- $lib->type = 'project';
- $lib->main = '1';
- $lib->acl = 'default';
- $this->dao->insert(TABLE_DOCLIB)->data($lib)->exec();
-
- /* Add creators to stage teams and project teams. */
- $member = new stdclass();
- $member->root = $stageID;
- $member->account = $account;
- $member->role = $this->lang->user->roleList[$this->app->user->role];
- $member->join = $now;
- $member->type = $data->type;
- $member->days = $data->days;
- $member->hours = $this->config->project->defaultWorkhours;
- $this->dao->insert(TABLE_TEAM)->data($member)->exec();
- $this->project->addProjectMembers($data->project, array($member));
-
- $this->setTreePath($stageID);
- if($data->acl != 'open') $this->user->updateUserView($stageID, 'sprint');
-
- $this->post->set('products', array(0 => $productID));
- $this->project->updateProducts($stageID);
-
- /* Record version change information. */
- $spec = new stdclass();
- $spec->project = $stageID;
- $spec->version = $data->version;
- $spec->name = $data->name;
- $spec->milestone = $data->milestone;
- $spec->begin = $data->begin;
- $spec->end = $data->end;
- $this->dao->insert(TABLE_PROJECTSPEC)->data($spec)->exec();
-
- $this->action->create('execution', $stageID, 'opened', '', join(',', $_POST['products']));
- }
- }
-
- /* If child plans has milestone, update parent plan set milestone eq 0 . */
- if($parentID and $milestone) $this->dao->update(TABLE_PROJECT)->set('milestone')->eq(0)->where('id')->eq($parentID)->exec();
-
- if(dao::isError()) die(js::error(dao::getError()));
- }
- }
-
- /**
- * 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 $projectID
- * @access public
- * @return bool|array
- */
- public function update($planID = 0, $projectID = 0)
- {
- /* Get oldPlan and the data from the post. */
- $oldPlan = $this->getByID($planID);
- $plan = fixer::input('post')
- ->setDefault('begin', '0000-00-00')
- ->setDefault('end', '0000-00-00')
- ->setDefault('realBegan', '0000-00-00')
- ->setDefault('realEnd', '0000-00-00')
- ->join('output', ',')
- ->get();
-
- /* Judgment of required items. */
- if($plan->begin == '0000-00-00') dao::$errors['begin'][] = sprintf($this->lang->error->notempty, $this->lang->programplan->begin);
- if($plan->end == '0000-00-00') dao::$errors['end'][] = sprintf($this->lang->error->notempty, $this->lang->programplan->end);
-
- $planChanged = ($oldPlan->name != $plan->name || $oldPlan->milestone != $plan->milestone || $oldPlan->begin != $plan->begin || $oldPlan->end != $plan->end);
-
- if($plan->parent > 0)
- {
- $parentStage = $this->getByID($plan->parent);
- $plan->attribute = $parentStage->attribute;
- $plan->acl = $parentStage->acl;
- $parentPercent = $parentStage->percent;
-
- $childrenTotalPercent = $this->getTotalPercent($parentStage, true);
- $childrenTotalPercent = $plan->parent == $oldPlan->parent ? ($childrenTotalPercent - $oldPlan->percent + $plan->percent) : ($childrenTotalPercent + $plan->percent);
- if($childrenTotalPercent > 100) return dao::$errors['percent'][] = $this->lang->programplan->error->percentOver;
-
- /* If child plan has milestone, update parent plan set milestone eq 0 . */
- if($plan->milestone and $parentStage->milestone) $this->dao->update(TABLE_PROJECT)->set('milestone')->eq(0)->where('id')->eq($oldPlan->parent)->exec();
- }
- else
- {
- /* Synchronously update sub-phase permissions. */
- $childrenIDList = $this->dao->select('*')->from(TABLE_PROJECT)->where('parent')->eq($oldPlan->id)->fetch('id');
- if(!empty($childrenIDList)) $this->dao->update(TABLE_PROJECT)->set('acl')->eq($plan->acl)->where('id')->in($childrenIDList)->exec();
-
- /* The workload of the parent plan cannot exceed 100%. */
- $oldPlan->parent = $plan->parent;
- $totalPercent = $this->getTotalPercent($oldPlan);
- $totalPercent = $totalPercent + $plan->percent;
- if($totalPercent > 100) return dao::$errors['percent'][] = $this->lang->programplan->error->percentOver;
- }
-
- /* Set planDuration and realDuration. */
- $plan->planDuration = $this->getDuration($plan->begin, $plan->end);
- $plan->realDuration = $this->getDuration($plan->realBegan, $plan->realEnd);
-
- if($planChanged) $plan->version = $oldPlan->version + 1;
- if(empty($plan->parent)) $plan->parent = $projectID;
-
- $this->dao->update(TABLE_PROJECT)->data($plan)
- ->autoCheck()
- ->batchCheck($this->config->programplan->edit->requiredFields, 'notempty')
- ->checkIF($plan->end != '0000-00-00', 'end', 'ge', $plan->begin)
- ->checkIF($plan->percent != false, 'percent', 'float')
- ->where('id')->eq($planID)
- ->exec();
-
- if(dao::isError()) return false;
- $this->setTreePath($planID);
- if($plan->acl != 'open') $this->loadModel('user')->updateUserView($planID, 'sprint');
-
- if($planChanged)
- {
- $spec = new stdclass();
- $spec->project = $planID;
- $spec->version = $plan->version;
- $spec->name = $plan->name;
- $spec->milestone = $plan->milestone;
- $spec->begin = $plan->begin;
- $spec->end = $plan->end;
-
- $this->dao->insert(TABLE_PROJECTSPEC)->data($spec)->exec();
- }
-
- return common::createChanges($oldPlan, $plan);
- }
-
- /**
- * Print cell.
- *
- * @param int $col
- * @param int $plan
- * @param int $users
- * @param int $projectID
- * @access public
- * @return string
- */
- public function printCell($col, $plan, $users, $projectID)
- {
- $id = $col->id;
- if($col->show)
- {
- $class = 'c-' . $id;
- $title = '';
- $idList = array('id','name','output','percent','attribute','version','begin','end','realBegan','realEnd', 'openedBy', 'openedDate');
- if(in_array($id,$idList))
- {
- $class .= ' text-left';
- $title = "title='{$plan->$id}'";
- if($id == 'output') $class .= ' text-ellipsis';
- if(!empty($plan->children)) $class .= ' has-child';
- }
- else
- {
- $class .= ' text-center';
- }
- if($id == 'actions') $class .= ' c-actions';
-
- echo "";
- if(isset($this->config->bizVersion)) $this->loadModel('flow')->printFlowCell('programplan', $plan, $id);
- switch($id)
- {
- case 'id':
- echo sprintf('%03d', $plan->id);
- break;
- case 'name':
- $milestoneFlag = $plan->milestone ? " lang->programplan->milestone}'>" : '';
- if($plan->grade > 1) echo '' . $this->lang->programplan->childrenAB . ' ';
- echo $plan->name . $milestoneFlag;
- if(!empty($plan->children)) echo '';
- break;
- case 'percent':
- echo $plan->percent . '%';
- break;
- case 'attribute':
- echo zget($this->lang->stage->typeList, $plan->attribute, '');
- break;
- case 'begin':
- echo $plan->begin;
- break;
- case 'end':
- echo $plan->end;
- break;
- case 'realBegan':
- echo $plan->realBegan;
- break;
- case 'realEnd':
- echo $plan->realEnd;
- break;
- case 'output':
- echo $plan->output;
- break;
- case 'version':
- echo $plan->version;
- break;
- case 'editedBy':
- echo zget($users, $plan->editedBy);
- break;
- case 'editedDate':
- echo substr($plan->editedDate, 5, 11);
- break;
- case 'openedBy':
- echo zget($users, $plan->openedBy);
- break;
- case 'openedDate':
- echo substr($plan->openedDate, 5, 11);
- break;
- case 'actions':
- common::printIcon('project', 'start', "projectID={$plan->id}", $plan, 'list', '', '', 'iframe', true);
- $class = !empty($plan->children) ? 'disabled' : '';
- common::printIcon('task', 'create', "projectID={$plan->id}", $plan, 'list', '', '', $class);
-
- if($plan->grade == 1 && $this->isCreateTask($plan->id))
- {
- common::printIcon('programplan', 'create', "program={$plan->parent}&productID=$plan->product&planID=$plan->id", $plan, 'list', 'split', '', '', '', '', $this->lang->programplan->createSubPlan);
- }
- else
- {
- $disabled = ($plan->grade == 2) ? ' disabled' : '';
- echo html::a('javascript:alert("' . $this->lang->programplan->error->createdTask . '");', '', '', 'class="btn ' . $disabled . '"');
- }
-
- common::printIcon('programplan', 'edit', "planID=$plan->id&projectID=$projectID", $plan, 'list', '', '', 'iframe', true);
-
- $disabled = !empty($plan->children) ? ' disabled' : '';
- if(common::hasPriv('project', 'delete', $plan))
- {
- common::printIcon('project', 'delete', "planID=$plan->id&confirm=no", $plan, 'list', 'trash', 'hiddenwin' , $disabled);
- }
- break;
- }
- echo ' | ';
- }
- }
-
- /**
- * Is create task.
- *
- * @param int $planID
- * @access public
- * @return bool
- */
- public function isCreateTask($planID)
- {
- $task = $this->dao->select('*')->from(TABLE_TASK)->where('project')->eq($planID)->limit(1)->fetch();
- return empty($task) ? true : false;
- }
-
- /**
- * Is clickable.
- *
- * @param int $plan
- * @param int $action
- * @static
- * @access public
- * @return bool
- */
- public static function isClickable($plan, $action)
- {
- $action = strtolower($action);
-
- if($action == 'create' and $plan->grade > 1) return false;
-
- return true;
- }
-
- /**
- * Get the stage set to milestone.
- *
- * @param int $projectID
- * @access public
- * @return object
- */
- public function getMilestones($projectID = 0)
- {
- return $this->dao->select('id, name')->from(TABLE_PROJECT)
- ->where('project')->eq($projectID)
- ->andWhere('type')->eq('stage')
- ->andWhere('milestone')->eq(1)
- ->andWhere('deleted')->eq(0)
- ->orderBy('id_desc')
- ->fetchPairs();
- }
-
- /**
- * Get milestone by product.
- *
- * @param int $productID
- * @access public
- * @return object
- */
- public function getMilestoneByProduct($productID)
- {
- return $this->dao->select('t1.id, t1.name')->from(TABLE_PROJECT)->alias('t1')
- ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id=t2.project')
- ->where('t2.product')->eq($productID)
- ->andWhere('t1.type')->eq('stage')
- ->andWhere('t1.milestone')->eq(1)
- ->andWhere('t1.deleted')->eq(0)
- ->orderBy('t1.begin asc')
- ->fetchPairs();
- }
-
- /**
- * Get parent stage list.
- *
- * @param int $projectID
- * @param int $planID
- * @param int $productID
- * @access public
- * @return array
- */
- public function getParentStageList($projectID, $planID, $productID)
- {
- $parentStage = $this->dao->select('t2.id, t2.name')->from(TABLE_PROJECTPRODUCT)
- ->alias('t1')->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
- ->where('t1.product')->eq($productID)
- ->andWhere('t2.project')->eq($projectID)
- ->andWhere('t2.grade')->eq(1)
- ->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->sprints)->fi()
- ->orderBy('t2.id desc')
- ->fetchPairs();
-
- /* Remove the currently edited stage. */
- if(isset($parentStage[$planID])) unset($parentStage[$planID]);
-
- $plan = $this->getByID($planID);
- foreach($parentStage as $key => $stage)
- {
- $isCreate = $this->isCreateTask($key);
- if($isCreate === false and $key != $plan->parent) unset($parentStage[$key]);
- }
- $parentStage[0] = $this->lang->programplan->emptyParent;
- ksort($parentStage);
-
- return $parentStage;
- }
-}
diff --git a/module/programplan/view/browse.html.php b/module/programplan/view/browse.html.php
deleted file mode 100644
index c732b2be1d..0000000000
--- a/module/programplan/view/browse.html.php
+++ /dev/null
@@ -1,38 +0,0 @@
-
- * @package programplan
- * @version $Id: browse.html.php 4903 2013-06-26 05:32:59Z wyd621@gmail.com $
- * @link http://www.zentao.net
- */
-?>
-
-
-
-
-
-
-
- programplan->noData;?>
-
- createLink('programplan', 'create', "projectID=$projectID&productID=$productID"), " " . $lang->programplan->create, '', "class='btn btn-info'");?>
-
-
-
-
-
-
-
-
-
-
diff --git a/module/programplan/view/create.html.php b/module/programplan/view/create.html.php
deleted file mode 100644
index 09f2d6f46f..0000000000
--- a/module/programplan/view/create.html.php
+++ /dev/null
@@ -1,183 +0,0 @@
-
- * @package programplan
- * @version $Id: create.html.php 4903 2013-06-26 05:32:59Z wyd621@gmail.com $
- * @link http://www.zentao.net
- */
-?>
-
-
-
-
-
-
- programplan->create;
- if($planID) $title = $programPlan->name . $lang->project->statge . '(' . $programPlan->begin . $lang->project->to . $programPlan->end . ')';
- echo "{$title}";
- ?>
-
-
-
-
-
-programplan->name : $lang->programplan->subStageName;?>
-
-
-
-
diff --git a/module/programplan/view/edit.html.php b/module/programplan/view/edit.html.php
deleted file mode 100644
index adb92bb94f..0000000000
--- a/module/programplan/view/edit.html.php
+++ /dev/null
@@ -1,107 +0,0 @@
-
- * @package programplan
- * @version $Id: edit.html.php 4903 2013-06-26 05:32:59Z wyd621@gmail.com $
- * @link http://www.zentao.net
- */
-?>
-
-
-
-
-
-
programplan->edit;?>
-
-
-
-
-
-
diff --git a/module/programplan/view/gantt.html.php b/module/programplan/view/gantt.html.php
deleted file mode 100644
index f17dd5084e..0000000000
--- a/module/programplan/view/gantt.html.php
+++ /dev/null
@@ -1,422 +0,0 @@
-
- * @package programplan
- * @version $Id: gantt.html.php 4903 2013-06-26 05:32:59Z wyd621@gmail.com $
- * @link http://www.zentao.net
- */
-?>
-
-
-createLink('programplan', 'ajaxCustom'));?>
-
-
-
-
diff --git a/module/programplan/view/list.html.php b/module/programplan/view/list.html.php
deleted file mode 100644
index 0468da3c59..0000000000
--- a/module/programplan/view/list.html.php
+++ /dev/null
@@ -1,89 +0,0 @@
-
- * @package programplan
- * @version $Id: list.html.php 4903 2013-06-26 05:32:59Z wyd621@gmail.com $
- * @link http://www.zentao.net
- */
-?>
-programplan->confirmDelete);
-?>
-
-
-
diff --git a/module/project/model.php b/module/project/model.php
index 96d7287719..4d02e0d7ad 100644
--- a/module/project/model.php
+++ b/module/project/model.php
@@ -355,8 +355,11 @@ class projectModel extends model
if(!empty($sprint->percent)) $this->checkWorkload('create', $sprint->percent);
/* Set planDuration and realDuration. */
- $sprint->planDuration = $this->loadModel('programplan')->getDuration($sprint->begin, $sprint->end);
- if(!empty($sprint->realBegan) and !empty($sprint->realEnd)) $sprint->realDuration = $this->loadModel('programplan')->getDuration($sprint->realBegan, $sprint->realEnd);
+ if($this->config->maxVersion)
+ {
+ $sprint->planDuration = $this->loadModel('programplan')->getDuration($sprint->begin, $sprint->end);
+ if(!empty($sprint->realBegan) and !empty($sprint->realEnd)) $sprint->realDuration = $this->loadModel('programplan')->getDuration($sprint->realBegan, $sprint->realEnd);
+ }
$sprint = $this->loadModel('file')->processImgURL($sprint, $this->config->project->editor->create['id'], $this->post->uid);
$this->dao->insert(TABLE_PROJECT)->data($sprint)
@@ -380,7 +383,7 @@ class projectModel extends model
$this->file->updateObjectID($this->post->uid, $projectID, 'project');
/* Update the path. */
- $this->loadModel('programplan')->setTreePath($projectID);
+ if($this->config->maxVersion) $this->loadModel('programplan')->setTreePath($projectID);
/* Copy team of project. */
if($copyProjectID != '')
@@ -485,8 +488,11 @@ class projectModel extends model
if(!empty($project->percent)) $this->checkWorkload('update', $project->percent, $oldProject);
/* Set planDuration and realDuration. */
- $project->planDuration = $this->loadModel('programplan')->getDuration($project->begin, $project->end);
- if(!empty($project->realBegan) and !empty($project->realEnd)) $project->realDuration = $this->loadModel('programplan')->getDuration($project->realBegan, $project->realEnd);
+ if($this->config->maxVersion)
+ {
+ $project->planDuration = $this->loadModel('programplan')->getDuration($project->begin, $project->end);
+ if(!empty($project->realBegan) and !empty($project->realEnd)) $project->realDuration = $this->loadModel('programplan')->getDuration($project->realBegan, $project->realEnd);
+ }
/* Update data. */
$this->dao->update(TABLE_PROJECT)->data($project)