- division and $project->hasProduct):?>
+ stageBy == 'project' and $project->hasProduct):?>
- division and $project->hasProduct) echo "{$lang->project->product} ";?>
+ stageBy == 'project' and $project->hasProduct) echo "{$lang->project->product} ";?>
project->status;?>
execution->owner;?>
programplan->begin;?>
@@ -113,7 +113,7 @@
- division = $project->division;?>
+ stageBy = $project->stageBy;?>
product)) ? $execution->product : $productID;?>
execution->printNestedList($execution, false, $users, $executionProductID);?>
diff --git a/module/project/view/manageproducts.html.php b/module/project/view/manageproducts.html.php
index 858f97d69f..d33cb77fc2 100644
--- a/module/project/view/manageproducts.html.php
+++ b/module/project/view/manageproducts.html.php
@@ -140,9 +140,9 @@
-division and count($linkedProducts) == 1 and empty($executions));?>
+stageBy == 'product' and count($linkedProducts) == 1 and empty($executions));?>
project->noticeDivsion);?>
-project->divisionSwitchList);?>
+project->stageBy == 'project'SwitchList);?>
diff --git a/module/project/zen.php b/module/project/zen.php
index 8d58bae17a..9ce7bf0181 100644
--- a/module/project/zen.php
+++ b/module/project/zen.php
@@ -50,14 +50,55 @@ class projectZen extends project
return $project;
}
+ /**
+ * Judge products not empty.
+ *
+ * @param array $products
+ * @access protected
+ * @return bool
+ */
+ protected function checkProductsNotEmpty($products): bool
+ {
+ $linkedProductsCount = 0;
+ foreach($products as $product)
+ {
+ if(!empty($product)) $linkedProductsCount++;
+ }
+ if(empty($linkedProductsCount))
+ {
+ dao::$errors[] = $this->lang->project->errorNoProducts;
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Check work days legtimate.
+ *
+ * @param object $project
+ * @access protected
+ * @return bool
+ */
+ protected function checkWorkdaysLegtimate($project): bool
+ {
+ $workdays = helper::diffDate($project->end, $project->begin) + 1;
+ if(isset($project->days) and $project->days > $workdays)
+ {
+ dao::$errors['days'] = sprintf($this->lang->project->workdaysExceed, $workdays);
+ return false;
+ }
+ return true;
+ }
+
/**
* Append extras data to post data.
*
+ * @param int $projectID
* @param object $postData
* @access protected
- * @return int|object
+ * @return object|false
*/
- protected function prepareEditExtras(object $postData): object
+ protected function prepareEditExtras(int $projectID, object $postData): object|false
{
$project = $postData->setDefault('team', $this->post->name)
->setDefault('lastEditedBy', $this->app->user->account)
@@ -65,18 +106,24 @@ class projectZen extends project
->setDefault('days', '0')
->setIF($this->post->delta == 999, 'end', LONG_TIME)
->setIF($this->post->delta == 999, 'days', 0)
- ->setIF($this->post->begin == '0000-00-00', 'begin', '')
- ->setIF($this->post->end == '0000-00-00', 'end', '')
->setIF($this->post->future, 'budget', 0)
->setIF($this->post->budget != 0, 'budget', round((float)$this->post->budget, 2))
->stripTags($this->config->project->editor->edit['id'], $this->config->allowedTags)
->get();
+ /* Check if products and branch valid by project.*/
+ if($project->product && !$this->project->checkBranchAndProductValid($projectID, $project)) return false;
+
+ /* Check if products not empty.*/
+ if(!$this->checkProductsNotEmpty($project->products)) return false;
+
+ /* Check if work days legtimate.*/
+ if(!$this->checkWorkdaysLegtimate($project)) return false;
+
if(!isset($this->config->setCode) or $this->config->setCode == 0) unset($project->code);
- /* Lean mode relation defaultProgram. */
+ /* Lean mode relation defaultProgram.*/
if($this->config->systemMode == 'light') $project->parent = $this->config->global->defaultProgram;
-
return $project;
}
@@ -664,8 +711,8 @@ class projectZen extends project
$diffProducts = array_merge(array_diff($oldProductIDs, $newProductIDs), array_diff($newProductIDs, $oldProductIDs));
if($diffProducts) $this->loadModel('action')->create('project', $projectID, 'Managed', '', !empty($postData->rawdata->products) ? implode(',', $postData->rawdata->products) : '');
- /* Division project update linked products. */
- if(empty($project->division))
+ /* Project stageBy project update linked products. */
+ if($project->stageBy == 'project')
{
foreach($idList as $executionID)
{
diff --git a/module/task/model.php b/module/task/model.php
index 25037bec25..3268b0f867 100755
--- a/module/task/model.php
+++ b/module/task/model.php
@@ -3566,7 +3566,7 @@ class taskModel extends model
}
}
$list .= '';
- if(!empty($execution->division) and $execution->hasProduct) $list .= ' ';
+ if($execution->stageBy == 'product' and $execution->hasProduct) $list .= ' ';
$list .= "" . $this->processStatus('task', $task) . ' ';
$list .= '' . zget($users, $task->assignedTo, '') . ' ';
$list .= helper::isZeroDate($task->estStarted) ? ' ' : '' . $task->estStarted . ' ';
diff --git a/module/tutorial/model.php b/module/tutorial/model.php
index 87c4358189..4e75b0b404 100644
--- a/module/tutorial/model.php
+++ b/module/tutorial/model.php
@@ -169,7 +169,7 @@ class tutorialModel extends model
$project->deleted = '0';
$project->hasProduct = '1';
$project->multiple = '';
- $project->division = 0;
+ $project->stageBy = 'project';
return $project;
}
diff --git a/module/user/test/model/data/sql/project.sql b/module/user/test/model/data/sql/project.sql
index d585cd74af..eded079b68 100644
--- a/module/user/test/model/data/sql/project.sql
+++ b/module/user/test/model/data/sql/project.sql
@@ -73,7 +73,7 @@ CREATE TABLE `zt_project` (
`whitelist` text NOT NULL,
`order` mediumint(8) unsigned NOT NULL,
`vision` varchar(10) NOT NULL DEFAULT 'rnd',
- `division` enum('0','1') NOT NULL DEFAULT '1',
+ `stageBy` enum('project','product') NOT NULL DEFAULT 'product',
`displayCards` smallint(6) NOT NULL DEFAULT 0,
`fluidBoard` enum('0','1') NOT NULL DEFAULT '0',
`multiple` enum('0','1') NOT NULL DEFAULT '1',