* Modify the logic of project editing.
This commit is contained in:
+80
-19
@@ -456,6 +456,45 @@ class programModel extends model
|
||||
->fetchPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get top program by id.
|
||||
*
|
||||
* @param int $programID
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function getTopPGMByID($programID)
|
||||
{
|
||||
$topPGM = 0;
|
||||
if(empty($programID)) return $topPGM;
|
||||
|
||||
$program = $this->getPGMByID($programID);
|
||||
list($topPGM) = explode(',', trim($program->path, ','));
|
||||
return $topPGM;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get Multiple linked products for project.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getMultiLinkedProducts($projectID)
|
||||
{
|
||||
$linkedProducts = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($projectID)->fetchPairs();
|
||||
$multiLinkedProducts = $this->dao->select('t3.id,t3.name')->from(TABLE_PROJECTPRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t3')->on('t1.product = t3.id')
|
||||
->where('t1.product')->in($linkedProducts)
|
||||
->andWhere('t1.project')->ne($projectID)
|
||||
->andWhere('t2.deleted')->eq('0')
|
||||
->andWhere('t3.deleted')->eq('0')
|
||||
->fetchPairs('id', 'name');
|
||||
|
||||
return $multiLinkedProducts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get children by program id.
|
||||
*
|
||||
@@ -1149,15 +1188,15 @@ class programModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* Get project workhour info.
|
||||
*
|
||||
* @param int $projectID
|
||||
* Get project workhour info.
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return object
|
||||
* @return object
|
||||
*/
|
||||
public function getPRJWorkhour($projectID)
|
||||
{
|
||||
$executions = $this->loadModel('project')->getExecutionPairs($projectID);
|
||||
$executions = $this->loadModel('project')->getExecutionPairs($projectID);
|
||||
|
||||
$total = $this->dao->select('
|
||||
ROUND(SUM(estimate), 2) AS totalEstimate,
|
||||
@@ -1186,14 +1225,14 @@ class programModel extends model
|
||||
|
||||
/**
|
||||
* Get project stat data .
|
||||
*
|
||||
* @param int $projectID
|
||||
*
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return object
|
||||
* @return object
|
||||
*/
|
||||
public function getPRJStatData($projectID)
|
||||
{
|
||||
$executions = $this->loadModel('project')->getExecutionPairs($projectID);
|
||||
$executions = $this->loadModel('project')->getExecutionPairs($projectID);
|
||||
$storyCount = $this->dao->select('count(t2.story) as storyCount')->from(TABLE_STORY)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECTSTORY)->alias('t2')->on('t1.id = t2.story')
|
||||
->where('t2.project')->eq($projectID)
|
||||
@@ -1615,7 +1654,9 @@ class programModel extends model
|
||||
*/
|
||||
public function PRJUpdate($projectID = 0)
|
||||
{
|
||||
$oldProject = $this->dao->findById($projectID)->from(TABLE_PROJECT)->fetch();
|
||||
$oldProject = $this->dao->findById($projectID)->from(TABLE_PROJECT)->fetch();
|
||||
$linkedProducts = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($projectID)->fetchPairs();
|
||||
$_POST['products'] = isset($_POST['products']) ? $_POST['products'] : $linkedProducts;
|
||||
|
||||
$project = fixer::input('post')
|
||||
->setDefault('team', substr($this->post->name, 0, 30))
|
||||
@@ -1655,6 +1696,18 @@ class programModel extends model
|
||||
}
|
||||
}
|
||||
|
||||
/* Product belonging program set processing. */
|
||||
$oldTopPGM = $this->getTopPGMByID($oldProject->parent);
|
||||
$newTopPGM = $this->getTopPGMByID($project->parent);
|
||||
if($oldTopPGM != $newTopPGM)
|
||||
{
|
||||
foreach($_POST['products'] as $productID => $product)
|
||||
{
|
||||
$this->dao->update(TABLE_PRODUCT)->set('program')->eq($newTopPGM)->where('id')->eq($productID)->exec();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Judge products not empty. */
|
||||
$linkedProductsCount = 0;
|
||||
foreach($_POST['products'] as $product)
|
||||
@@ -1691,7 +1744,7 @@ class programModel extends model
|
||||
|
||||
if(!dao::isError())
|
||||
{
|
||||
$this->loadModel('project')->updateProducts($projectID);
|
||||
$this->loadModel('project')->updateProducts($projectID, $_POST['products']);
|
||||
$this->file->updateObjectID($this->post->uid, $projectID, 'project');
|
||||
|
||||
$whitelist = explode(',', $project->whitelist);
|
||||
@@ -1716,16 +1769,18 @@ class programModel extends model
|
||||
*/
|
||||
public function printCell($col, $project, $users, $programID = 0)
|
||||
{
|
||||
$canOrder = common::hasPriv('program', 'PRJOrderUpdate');
|
||||
$account = $this->app->user->account;
|
||||
$id = $col->id;
|
||||
$canOrder = common::hasPriv('program', 'PRJOrderUpdate');
|
||||
$canBatchEdit = common::hasPriv('program', 'PRJBatchEdit');
|
||||
$projectLink = helper::createLink('program', 'index', "projectID=$project->id", '', '', $project->id);
|
||||
$account = $this->app->user->account;
|
||||
$id = $col->id;
|
||||
|
||||
if($col->show)
|
||||
{
|
||||
$class = "c-$id";
|
||||
$title = '';
|
||||
|
||||
if($id == 'idAB') $class .= ' cell-id';
|
||||
if($id == 'id') $class .= ' cell-id';
|
||||
|
||||
if($id == 'PRJName')
|
||||
{
|
||||
@@ -1759,11 +1814,17 @@ class programModel extends model
|
||||
echo "<td class='c-name " . $class . "' $title>";
|
||||
switch($id)
|
||||
{
|
||||
case 'idAB':
|
||||
printf('%03d', $project->id);
|
||||
case 'id':
|
||||
if($canBatchEdit)
|
||||
{
|
||||
echo html::checkbox('projectIdList', array($project->id => '')) . html::a($projectLink, sprintf('%03d', $project->id));
|
||||
}
|
||||
else
|
||||
{
|
||||
printf('%03d', $project->id);
|
||||
}
|
||||
break;
|
||||
case 'PRJName':
|
||||
$projectLink = helper::createLink('program', 'index', "projectID=$project->id", '', '', $project->id);
|
||||
echo html::a($projectLink, $project->name);
|
||||
if($project->model === 'waterfall') echo "<span class='project-type-label label label-outline label-warning'>{$this->lang->program->waterfall}</span>";
|
||||
if($project->model === 'scrum') echo "<span class='project-type-label label label-outline label-info'>{$this->lang->program->scrum}</span>";
|
||||
@@ -1823,7 +1884,7 @@ class programModel extends model
|
||||
|
||||
$from = $project->from == 'PRJ' ? 'PRJ' : 'pgmproject';
|
||||
$openModule = $project->from == 'PRJ' ? 'project' : 'program';
|
||||
common::printIcon('program', 'PRJEdit', "projectID=$project->id&programID=$project->parent&from=$from", $project, 'list', 'edit', '', '', '', "data-group=$openModule", '', $project->id);
|
||||
common::printIcon('program', 'PRJEdit', "projectID=$project->id&from=$from", $project, 'list', 'edit', '', '', '', "data-group=$openModule", '', $project->id);
|
||||
common::printIcon('program', 'PRJManageMembers', "projectID=$project->id", $project, 'list', 'group', '', '', '', '', '', $project->id);
|
||||
common::printIcon('program', 'PRJGroup', "projectID=$project->id&programID=$programID", $project, 'list', 'lock', '', '', '', '', '', $project->id);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user