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->name : $lang->programplan->subStageName;?> -
-
- - - - - - - - - - - - - config->qcVersion)):?> - - - - - - - - - - - - - - - - - - - - config->qcVersion)):?> - - - - - - - - - - - setMilestone ? '' : "disabled='disabled'"?> - id);?> - - - - - - - - - - - config->qcVersion)):?> - output) ? 0 : explode(',', $plan->output);?> - - - - - - - - - - - - - - - - - - - - config->qcVersion)):?> - - - - - - - - - - - - - -
- programplan->percent;?> - - - - programplan->attribute;?>project->acl;?>programplan->milestone;?>programplan->begin;?>programplan->end;?>programplan->realBegan;?>programplan->realEnd;?>programplan->output;?> actions;?>
-
- - % -
-
stage->typeList, $stage->type, "class='form-control'");?>project->aclList, 'open', "class='form-control' $class");?>programplan->milestoneList, 0);?> - - -
-
- - % -
-
stage->typeList, $plan->attribute, "class='form-control'");?>project->aclList, $plan->acl, "class='form-control' $class");?>programplan->milestoneList, $plan->milestone, $disabled);?> - -
-
- - % -
-
stage->typeList, '', "class='form-control'");?>project->aclList, 'open', "class='form-control' $class");?>programplan->milestoneList, 0);?> - - -
- -
-
-
- - - - - - - - - - - - - config->qcVersion)):?> - - - - - -
- - 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;?>

-
-
- - - - - - - - - - - - - - - " id="attributeType"> - - - - setMilestone):?> - - - - - - milestone);?> - - - - grade == 2 ? "disabled='disabled'" : '';?> - - - - - - - - - - - config->qcVersion)):?> - - - - - - - - - -
programplan->parent;?>parent, "class='form-control chosen '");?>
programplan->name;?> name, "class='form-control'");?>
programplan->percent;?> -
- percent, "class='form-control'");?> -
% -
-
programplan->attribute;?> stage->typeList, $plan->attribute, "class='form-control'");?>
programplan->milestone;?> programplan->milestoneList, $plan->milestone);?>
project->acl;?> project->aclList, $plan->acl, "class='form-control' $class");?>
programplan->planDateRange;?> -
- begin, "class='form-control form-date'");?> - project->to;?> - end, "class='form-control form-date'");?> -
-
programplan->realDateRange;?> -
- realBegan, "class='form-control form-date'");?> - project->to;?> - realEnd, "class='form-control form-date'");?> -
-
programplan->output;?> output, "class='form-control chosen ' multiple");?>
-
-
-
- - 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'));?> - - -
-
-
- programplan->full, 'id="fullScreenBtn"', 'btn btn-primary btn-sm')?> - programplan->stageCustom, $selectCustom);?> -
-
-
-
-
-
- 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); -?> - -
-
- -
- datatable->getSetting('programplan'); - $widths = $this->datatable->setFixedFieldWidth($setting); - $widths['leftWidth'] = 300; - $columns = 0; - ?> - ' data-fixed-right-width='' data-checkbox-name='programplanList[]'> - - - - - - - - - - - - - - - - - $value) $this->programplan->printCell($value, $plan, $users, $projectID);?> - - children)):?> - - children as $key => $child):?> - - children)) ? ' table-child-bottom' : '';?> - - $value) $this->programplan->printCell($value, $child, $users, $projectID);?> - - - - - - -
idAB);?> programplan->name);?>programplan->percent);?>programplan->attribute);?>programplan->begin);?>programplan->end);?>programplan->realBegan);?>programplan->realEnd);?>actions;?>
-
- 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)