diff --git a/db/update9.7.sql b/db/update9.7.sql
index fc4d315116..436ccf7eb7 100644
--- a/db/update9.7.sql
+++ b/db/update9.7.sql
@@ -3,3 +3,5 @@ ALTER TABLE `zt_todo` ADD `config` varchar(255) NOT NULL;
ALTER TABLE `zt_todo` ADD `cycle` tinyint unsigned NOT NULL DEFAULT '0' AFTER `type`;
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES
('1', '1', '*', '*', '*', 'moduleName=todo&methodName=createCycle', '生成周期性待办', 'zentao', 1, 'normal', '0000-00-00 00:00:00');
+
+ALTER TABLE `zt_projectproduct` ADD `plan` MEDIUMINT(8) UNSIGNED NOT NULL AFTER `branch`;
diff --git a/framework/helper.class.php b/framework/helper.class.php
index 39a7629714..da0841a5b4 100644
--- a/framework/helper.class.php
+++ b/framework/helper.class.php
@@ -5,7 +5,7 @@
*
* The author disclaims copyright to this source code. In place of
* a legal notice, here is a blessing:
- *
+ *
* May you do good and not evil.
* May you find forgiveness for yourself and forgive others.
* May you share freely, never taking more than you give.
@@ -43,7 +43,7 @@ class helper extends baseHelper
{
if(isset($_GET[$config->viewVar]))
{
- $viewType = $_GET[$config->viewVar];
+ $viewType = $_GET[$config->viewVar];
}
else
{
@@ -59,9 +59,9 @@ class helper extends baseHelper
/**
* Encode json for $.parseJSON
- *
- * @param array $data
- * @param int $options
+ *
+ * @param array $data
+ * @param int $options
* @static
* @access public
* @return string
@@ -78,10 +78,10 @@ class helper extends baseHelper
/**
* Convert encoding.
- *
- * @param string $string
- * @param string $fromEncoding
- * @param string $toEncoding
+ *
+ * @param string $string
+ * @param string $fromEncoding
+ * @param string $toEncoding
* @static
* @access public
* @return string
@@ -111,12 +111,33 @@ class helper extends baseHelper
return $string;
}
+
+ /**
+ * Calculate two working days.
+ *
+ * @param string $begin
+ * @param string $end
+ *
+ * @return bool|float
+ */
+ static public function workDays($begin, $end)
+ {
+ $begin = strtotime($begin);
+ $end = strtotime($end);
+ if($end < $begin) return false;
+
+ $double = floor(($end - $begin) / (7 * 24 * 3600));
+ $begin = date('w', $begin);
+ $end = date('w', $end);
+ $end = $begin > $end ? $end + 5 : $end;
+ return $double * 5 + $end - $begin;
+ }
}
/**
* 检查是否是onlybody模式。
* Check exist onlybody param.
- *
+ *
* @access public
* @return void
*/
diff --git a/module/productplan/control.php b/module/productplan/control.php
index 2a820a8806..261cfb3971 100644
--- a/module/productplan/control.php
+++ b/module/productplan/control.php
@@ -191,6 +191,7 @@ class productplan extends control
*/
public function browse($productID = 0, $branch = 0, $browseType = 'all', $orderBy = 'begin_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1 )
{
+ $this->app->loadLang('project');
/* Load pager. */
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
diff --git a/module/productplan/model.php b/module/productplan/model.php
index e4bd8be564..e2e55f6b35 100644
--- a/module/productplan/model.php
+++ b/module/productplan/model.php
@@ -185,9 +185,10 @@ class productplanModel extends model
{
$oldPlan = $this->dao->findByID((int)$planID)->from(TABLE_PRODUCTPLAN)->fetch();
$plan = fixer::input('post')->stripTags($this->config->productplan->editor->edit['id'], $this->config->allowedTags)
- ->setIF($this->post->delta == 9999 || empty($this->post->end), 'end', '2030-01-01')
+ ->setIF($this->post->delta == 9999 || $this->post->end == '', 'end', '2030-01-01')
->remove('delta,uid')
->get();
+
$plan = $this->loadModel('file')->processImgURL($plan, $this->config->productplan->editor->edit['id'], $this->post->uid);
$this->dao->update(TABLE_PRODUCTPLAN)
->data($plan)
diff --git a/module/productplan/view/browse.html.php b/module/productplan/view/browse.html.php
index a80f7fc402..5d0712187b 100644
--- a/module/productplan/view/browse.html.php
+++ b/module/productplan/view/browse.html.php
@@ -43,18 +43,18 @@
recTotal}&recPerPage={$pager->recPerPage}"; ?>
- | idAB);?> |
- productplan->title);?> |
+ idAB);?> |
+ productplan->title);?> |
session->currentProductType != 'normal'):?>
- product->branch);?> |
+ product->branch);?> |
productplan->stories;?> |
productplan->bugs;?> |
productplan->hour;?> |
- productplan->desc;?> |
- productplan->begin);?> |
- productplan->end);?> |
- actions;?> |
+ productplan->desc;?> |
+ productplan->begin);?> |
+ productplan->end);?> |
+ actions;?> |
@@ -78,6 +78,7 @@
end == '2030-01-01' ? $lang->productplan->future : $plan->end;?> |
id"), '', '', "class='btn-icon' title='{$lang->project->create}'");
if(common::hasPriv('productplan', 'linkStory')) echo html::a(inlink('view', "planID=$plan->id&type=story&orderBy=id_desc&link=true"), '', '', "class='btn-icon' title='{$lang->productplan->linkStory}'");
if(common::hasPriv('productplan', 'linkBug') and $config->global->flow != 'onlyStory') echo html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=id_desc&link=true"), '', '', "class='btn-icon' title='{$lang->productplan->linkBug}'");
common::printIcon('productplan', 'edit', "planID=$plan->id", $plan, 'list');
diff --git a/module/project/control.php b/module/project/control.php
index 0b891b5eaf..be4742c6ec 100644
--- a/module/project/control.php
+++ b/module/project/control.php
@@ -41,7 +41,7 @@ class project extends control
{
if($this->app->user->account == 'guest' or commonModel::isTutorialMode()) $this->config->project->homepage = 'index';
if(!isset($this->config->project->homepage))
- {
+ {
if($this->projects and $this->app->viewType != 'mhtml') die($this->fetch('custom', 'ajaxSetHomepage', "module=project"));
$this->config->project->homepage = 'index';
@@ -375,7 +375,7 @@ class project extends control
$this->view->title = $project->name . $this->lang->colon . $this->lang->project->importTask;
$this->view->position[] = html::a(inlink('browse', "projectID=$toProject"), $project->name);
$this->view->position[] = $this->lang->project->importTask;
- $this->view->tasks2Imported = $tasks2Imported;
+ $this->view->tasks2Imported = $tasks2Imported;
$this->view->projects = $projects;
$this->view->projectID = $project->id;
$this->view->fromProject = $fromProject;
@@ -826,8 +826,8 @@ class project extends control
/**
* Fix burn for first date.
- *
- * @param int $projectID
+ *
+ * @param int $projectID
* @access public
* @return void
*/
@@ -873,11 +873,12 @@ class project extends control
*
* @param string $projectID
* @param string $copyProjectID
+ * @param int $planID
*
* @access public
* @return void
*/
- public function create($projectID = '', $copyProjectID = '')
+ public function create($projectID = '', $copyProjectID = '', $planID = 0)
{
if($projectID)
{
@@ -888,12 +889,14 @@ class project extends control
exit;
}
- $name = '';
- $code = '';
- $team = '';
- $products = array();
- $whitelist = '';
- $acl = 'open';
+ $name = '';
+ $code = '';
+ $team = '';
+ $products = array();
+ $whitelist = '';
+ $acl = 'open';
+ $plan = new stdClass();
+ $productPlan = new stdClass();
if($copyProjectID)
{
@@ -906,6 +909,16 @@ class project extends control
$products = $this->project->getProducts($copyProjectID);
}
+ if(!empty($planID))
+ {
+ $plan = $this->dao->select('*')->from(TABLE_PRODUCTPLAN)->where('id')->eq($planID)->fetch();
+ $products = $this->dao->select('t1.id, t1.name, t1.type, t2.branch')->from(TABLE_PRODUCT)->alias('t1')
+ ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.product')
+ ->where('t1.id')->eq($plan->product)
+ ->fetchAll('id');
+ $productPlan = $this->loadModel('productplan')->getPairs($plan->product, 0, 'unexpired');
+ }
+
if(!empty($_POST))
{
$projectID = $copyProjectID == '' ? $this->project->create() : $this->project->create($copyProjectID);
@@ -923,12 +936,14 @@ class project extends control
$this->view->projects = array('' => '') + $this->projects;
$this->view->groups = $this->loadModel('group')->getPairs();
$this->view->allProducts = array(0 => '') + $this->loadModel('product')->getPairs('noclosed|nocode');
+ $this->view->acl = $acl;
+ $this->view->plan = $plan;
$this->view->name = $name;
$this->view->code = $code;
$this->view->team = $team;
- $this->view->products = $products ;
+ $this->view->products = $products;
+ $this->view->productPlan = $productPlan;
$this->view->whitelist = $whitelist;
- $this->view->acl = $acl ;
$this->view->copyProjectID = $copyProjectID;
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($products));
$this->display();
@@ -938,6 +953,9 @@ class project extends control
* Edit a project.
*
* @param int $projectID
+ * @param string $action
+ * @param string $extra
+ *
* @access public
* @return void
*/
@@ -994,6 +1012,7 @@ class project extends control
$this->view->qdUsers = $this->user->getPairs('noclosed|nodeleted|qdfirst', $project->QD);
$this->view->rdUsers = $this->user->getPairs('noclosed|nodeleted|devfirst', $project->RD);
$this->view->groups = $this->loadModel('group')->getPairs();
+ $this->view->plans = $this->project->getPlans(array_keys($linkedProducts));
$this->view->allProducts = $allProducts;
$this->view->linkedProducts = $linkedProducts;
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($linkedProducts));
@@ -1266,10 +1285,10 @@ class project extends control
/**
* Kanban.
- *
- * @param int $projectID
- * @param string $type
- * @param string $orderBy
+ *
+ * @param int $projectID
+ * @param string $type
+ * @param string $orderBy
* @access public
* @return void
*/
@@ -1313,8 +1332,8 @@ class project extends control
/**
* Tree view.
* Product
- *
- * @param int $projectID
+ *
+ * @param int $projectID
* @param string $type
* @access public
* @return void
@@ -1340,14 +1359,14 @@ class project extends control
$this->view->projectID = $projectID;
$this->view->level = $type;
$this->view->tree = $tree;
- $this->display();
+ $this->display();
}
/**
* Print kanban.
- *
- * @param int $projectID
- * @param string $orderBy
+ *
+ * @param int $projectID
+ * @param string $orderBy
* @access public
* @return void
*/
@@ -1362,7 +1381,7 @@ class project extends control
$storySpecs = $this->story->getStorySpecs(array_keys($stories));
$order = 1;
- foreach($stories as $story) $story->order = $order++;
+ foreach($stories as $story) $story->order = $order++;
$kanbanTasks = $this->project->getKanbanTasks($projectID, "id");
$kanbanBugs = $this->loadModel('bug')->getProjectBugs($projectID);
@@ -1449,13 +1468,13 @@ class project extends control
$this->view->position[] = html::a($this->createLink('project', 'browse', "projectID=$projectID"), $project->name);
$this->view->position[] = $this->lang->project->printKanban;
- $this->display();
+ $this->display();
}
/**
* Story kanban.
- *
- * @param int $projectID
+ *
+ * @param int $projectID
* @access public
* @return void
*/
@@ -1807,7 +1826,7 @@ class project extends control
$this->project->unlinkStory($projectID, $storyID);
/* if kanban then reload and if ajax request then send result. */
- if(isonlybody())
+ if(isonlybody())
{
die(js::reload('parent'));
}
@@ -2019,8 +2038,8 @@ class project extends control
/**
* Story sort.
- *
- * @param int $projectID
+ *
+ * @param int $projectID
* @access public
* @return void
*/
@@ -2079,11 +2098,11 @@ class project extends control
}
/**
- * Export project.
- *
- * @param string $status
- * @param int $productID
- * @param string $orderBy
+ * Export project.
+ *
+ * @param string $status
+ * @param int $productID
+ * @param string $orderBy
* @access public
* @return void
*/
@@ -2144,8 +2163,8 @@ class project extends control
/**
* Kanban setting.
- *
- * @param int $projectID
+ *
+ * @param int $projectID
* @access public
* @return void
*/
@@ -2181,9 +2200,9 @@ class project extends control
/**
* Ajax reset kanban setting
- *
- * @param int $projectID
- * @param string $confirm
+ *
+ * @param int $projectID
+ * @param string $confirm
* @access public
* @return void
*/
diff --git a/module/project/js/common.js b/module/project/js/common.js
index 67ff3bd237..0a5e812749 100644
--- a/module/project/js/common.js
+++ b/module/project/js/common.js
@@ -16,8 +16,8 @@ function switchGroup(projectID, groupBy)
/**
* Convert a date string like 2011-11-11 to date object in js.
- *
- * @param string $date
+ *
+ * @param string $date
* @access public
* @return date
*/
@@ -29,9 +29,9 @@ function convertStringToDate(dateString)
/**
* Compute delta of two days.
- *
- * @param string $date1
- * @param string $date1
+ *
+ * @param string $date1
+ * @param string $date1
* @access public
* @return int
*/
@@ -49,12 +49,12 @@ function computeDaysDelta(date1, date2)
date1 += 1000 * 60 * 60 * 24;
date1 = new Date(date1);
}
- return delta - weekEnds;
+ return delta - weekEnds;
}
/**
* Compute work days.
- *
+ *
* @access public
* @return void
*/
@@ -80,12 +80,12 @@ function computeWorkDays(currentID)
endDate = $('#end').val();
}
- if(beginDate && endDate)
+ if(beginDate && endDate)
{
if(isBactchEdit) $('#dayses\\[' + index + '\\]').val(computeDaysDelta(beginDate, endDate));
if(!isBactchEdit) $('#days').val(computeDaysDelta(beginDate, endDate));
}
- else if($('input[checked="true"]').val())
+ else if($('input[checked="true"]').val())
{
computeEndDate();
}
@@ -93,8 +93,8 @@ function computeWorkDays(currentID)
/**
* Compute the end date for project.
- *
- * @param int $delta
+ *
+ * @param int $delta
* @access public
* @return void
*/
@@ -117,8 +117,8 @@ function computeEndDate(delta)
/**
* Load branches.
- *
- * @param int $product
+ *
+ * @param int $product
* @access public
* @return void
*/
@@ -134,20 +134,20 @@ function loadBranches(product)
$product.trigger("chosen:updated");
return false;
}
- })
+ });
if($('#productsBox .input-group:last select:first').val() != 0)
{
var length = $('#productsBox .input-group').size();
$('#productsBox .row').append(' ' + $('#productsBox .col-sm-3:last').html() + ' ');
- if($('#productsBox .input-group:last select').size() >= 2)$('#productsBox .input-group:last select:last').remove();
+ if($('#productsBox .input-group:last select').size() >= 2) $('#productsBox .input-group:last select:last').remove();
$('#productsBox .input-group:last .chosen-container').remove();
$('#productsBox .input-group:last select:first').attr('name', 'products[' + length + ']').attr('id', 'products' + length);
$('#productsBox .input-group:last .chosen').chosen(defaultChosenOptions);
}
var $inputgroup = $(product).closest('.input-group');
- if($inputgroup.find('select').size() >= 2)$inputgroup.find('select:last').remove();
+ if($inputgroup.find('select').size() >= 2) $inputgroup.find('select:last').remove();
var index = $inputgroup.find('select:first').attr('id').replace('products' , '');
$.get(createLink('branch', 'ajaxGetBranches', "productID=" + $(product).val()), function(data)
{
@@ -156,12 +156,35 @@ function loadBranches(product)
$inputgroup.append(data);
$inputgroup.find('select:last').attr('name', 'branch[' + index + ']').attr('id', 'branch' + index).css('width', '80px');
}
- })
+ });
+
+ var productID = $(product).val();
+ if(productID != 0)
+ {
+ console.log($("#plan" + productID).length );
+ if($("#plan" + productID).length == 0)
+ {
+ $(product).data("last", productID);
+ $.get(createLink('product', 'ajaxGetPlans', "productID=" + productID), function(data)
+ {
+ if(data)
+ {
+ $("#plansBox .row").append('' + data + ' ');
+ $("#plan" + $(product).val()).find('select').attr('name', 'plans[' + productID + ']').attr('id', 'plans' + productID);
+ }
+ });
+ }
+ }
+ else
+ {
+ $("#plan" + $(product).data('last')).remove();
+ }
}
+
function loadBranch(){}
/* Auto compute the work days. */
-$(function()
+$(function()
{
if(typeof(replaceID) != 'undefined')
{
@@ -195,8 +218,8 @@ $(function()
$('tr.parent-'+id).hide();
$toggleIcon.removeClass('icon-double-angle-up').addClass('icon-double-angle-down');
}
-
+
e.stopPropagation();
e.preventDefault();
});
-})
+});
diff --git a/module/project/js/create.js b/module/project/js/create.js
index b4f739c7c4..cec75c4dff 100644
--- a/module/project/js/create.js
+++ b/module/project/js/create.js
@@ -8,10 +8,10 @@ $(function()
$('#cpmBtn').click(function(){$('#copyProjectModal').modal('show')});
$('#copyProjects a').click(function(){setCopyProject($(this).data('id')); $('#copyProjectModal').modal('hide')});
var typeWidth = $('#type').closest('td').width();
- $('#productsBox .col-sm-3').width(typeWidth);
+ $('#productsBox .col-sm-3,#plansBox .col-sm-3').width(typeWidth);
$(document).on('change', "#productsBox select", function()
{
- $('#productsBox .col-sm-3').width(typeWidth);
+ $('#productsBox .col-sm-3,#plansBox .col-sm-3').width(typeWidth);
});
$('#begin').on('change', function()
{
@@ -37,3 +37,4 @@ function showTypeTips()
$('.type-tips').hide();
}
}
+
diff --git a/module/project/lang/en.php b/module/project/lang/en.php
index 310f4b6e45..99d7c04758 100644
--- a/module/project/lang/en.php
+++ b/module/project/lang/en.php
@@ -117,6 +117,7 @@ $lang->project->team = 'Team Member';
$lang->project->doc = 'Doc';
$lang->project->manageProducts = 'Link ' . $lang->productCommon;
$lang->project->linkStory = 'Linked Story';
+$lang->project->linkPlan = 'Linked Plan';
$lang->project->unlinkStoryTasks = 'Unlinked';
$lang->project->linkedProducts = 'Linked Products';
$lang->project->unlinkedProducts = 'Unlinked Products';
@@ -283,10 +284,10 @@ $lang->project->featureBar['task']['needconfirm'] = 'Story Changed';
$lang->project->featureBar['task']['status'] = $lang->project->statusSelects[''];
$lang->project->treeLevel = array();
-$lang->project->treeLevel['root'] = 'Show Root';
-$lang->project->treeLevel['story'] = 'Show Story';
-$lang->project->treeLevel['task'] = 'Show Task';
-$lang->project->treeLevel['all'] = 'Show All';
+$lang->project->treeLevel['root'] = 'Show Root';
+$lang->project->treeLevel['story'] = 'Show Story';
+$lang->project->treeLevel['task'] = 'Show Task';
+$lang->project->treeLevel['all'] = 'Show All';
global $config;
if($config->global->flow == 'onlyTask')
diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php
index 44a1840780..8c9e8b899f 100644
--- a/module/project/lang/zh-cn.php
+++ b/module/project/lang/zh-cn.php
@@ -66,13 +66,13 @@ $lang->project->typeList['sprint'] = "短期$lang->projectCommon";
$lang->project->typeList['waterfall'] = "长期$lang->projectCommon";
$lang->project->typeList['ops'] = "运维$lang->projectCommon";
-$lang->project->endList[7] = '一星期';
-$lang->project->endList[14] = '两星期';
-$lang->project->endList[31] = '一个月';
-$lang->project->endList[62] = '两个月';
-$lang->project->endList[93] = '三个月';
-$lang->project->endList[186] = '半年';
-$lang->project->endList[365] = '一年';
+$lang->project->endList[7] = '一星期';
+$lang->project->endList[14] = '两星期';
+$lang->project->endList[31] = '一个月';
+$lang->project->endList[62] = '两个月';
+$lang->project->endList[93] = '三个月';
+$lang->project->endList[186] = '半年';
+$lang->project->endList[365] = '一年';
$lang->team = new stdclass();
$lang->team->account = '用户';
@@ -117,6 +117,7 @@ $lang->project->team = '团队成员';
$lang->project->doc = '文档列表';
$lang->project->manageProducts = '关联' . $lang->productCommon;
$lang->project->linkStory = '关联需求';
+$lang->project->linkPlan = '关联计划';
$lang->project->unlinkStoryTasks = '未关联需求任务';
$lang->project->linkedProducts = '已关联';
$lang->project->unlinkedProducts = '未关联';
@@ -283,10 +284,10 @@ $lang->project->featureBar['task']['needconfirm'] = '需求变动';
$lang->project->featureBar['task']['status'] = $lang->project->statusSelects[''];
$lang->project->treeLevel = array();
-$lang->project->treeLevel['root'] = '全部折叠';
-$lang->project->treeLevel['story'] = '显示需求';
-$lang->project->treeLevel['task'] = '显示任务';
-$lang->project->treeLevel['all'] = '全部展开';
+$lang->project->treeLevel['root'] = '全部折叠';
+$lang->project->treeLevel['story'] = '显示需求';
+$lang->project->treeLevel['task'] = '显示任务';
+$lang->project->treeLevel['all'] = '全部展开';
global $config;
if($config->global->flow == 'onlyTask')
diff --git a/module/project/model.php b/module/project/model.php
index 8b0914a30f..ce9148dee0 100644
--- a/module/project/model.php
+++ b/module/project/model.php
@@ -219,6 +219,8 @@ class projectModel extends model
/**
* Create a project.
*
+ * @param string $copyProjectID
+ *
* @access public
* @return void
*/
@@ -232,7 +234,7 @@ class projectModel extends model
->setDefault('team', substr($this->post->name,0, 30))
->join('whitelist', ',')
->stripTags($this->config->project->editor->create['id'], $this->config->allowedTags)
- ->remove('products, workDays, delta, branch,uid')
+ ->remove('products, workDays, delta, branch, uid, plans')
->get();
$project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->create['id'], $this->post->uid);
$this->dao->insert(TABLE_PROJECT)->data($project)
@@ -318,7 +320,7 @@ class projectModel extends model
->setDefault('team', $this->post->name)
->join('whitelist', ',')
->stripTags($this->config->project->editor->edit['id'], $this->config->allowedTags)
- ->remove('products,branch,uid')
+ ->remove('products, branch, uid, plans')
->get();
$project = $this->loadModel('file')->processImgURL($project, $this->config->project->editor->edit['id'], $this->post->uid);
$this->dao->update(TABLE_PROJECT)->data($project)
@@ -1035,7 +1037,7 @@ class projectModel extends model
if(!$withBranch) return $this->loadModel('tutorial')->getProductPairs();
return $this->loadModel('tutorial')->getProjectProducts();
}
- $query = $this->dao->select('t2.id, t2.name, t2.type, t1.branch')->from(TABLE_PROJECTPRODUCT)->alias('t1')
+ $query = $this->dao->select('t2.id, t2.name, t2.type, t1.branch, t1.plan')->from(TABLE_PROJECTPRODUCT)->alias('t1')
->leftJoin(TABLE_PRODUCT)->alias('t2')
->on('t1.product = t2.id')
->where('t1.project')->eq((int)$projectID);
@@ -1146,6 +1148,7 @@ class projectModel extends model
if(!isset($_POST['products'])) return;
$products = $_POST['products'];
$branches = isset($_POST['branch']) ? $_POST['branch'] : array();
+ $plans = $_POST['plans'];
$existedProducts = array();
$addedProducts = array();
@@ -1166,6 +1169,7 @@ class projectModel extends model
$data->project = $projectID;
$data->product = $productID;
$data->branch = isset($branches[$i]) ? $branches[$i] : 0;
+ $data->plan = isset($plans[$productID]) ? $plans[$productID] : 0;
$this->dao->insert(TABLE_PROJECTPRODUCT)->data($data)->exec();
$existedProducts[$productID] = true;
}
@@ -2543,4 +2547,25 @@ class projectModel extends model
if(isset($fullTrees[0]) and empty($fullTrees[0]->children)) array_shift($fullTrees);
return array_values($fullTrees);
}
+
+ /**
+ * Get plans by projectID.
+ *
+ * @param int|array $projectID
+ *
+ * @return mixed
+ */
+ public function getPlans($projectID)
+ {
+ $plans = $this->dao->select('id,title,product')->from(TABLE_PRODUCTPLAN)
+ ->where('product')->in($projectID)
+ ->fetchAll();
+
+ $productPlans = array();
+ foreach ($plans as $plan)
+ {
+ $productPlans[$plan->product][$plan->id] = $plan->title;
+ }
+ return $productPlans;
+ }
}
diff --git a/module/project/view/create.html.php b/module/project/view/create.html.php
index db40c91339..7fd8311882 100644
--- a/module/project/view/create.html.php
+++ b/module/project/view/create.html.php
@@ -44,7 +44,7 @@
|