diff --git a/module/execution/model.php b/module/execution/model.php index 54c37ce3e8..7d8f0cdbbd 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -365,8 +365,8 @@ class executionModel extends model $this->dao->insert(TABLE_EXECUTION)->data($sprint) ->autoCheck($skipFields = 'begin,end') ->batchcheck($this->config->execution->create->requiredFields, 'notempty') - ->checkIF(!empty($sprint->name), 'name', 'unique', "`type` in ('sprint','stage') and `parent` = $sprint->parent") - ->checkIF(!empty($sprint->code), 'code', 'unique', "`type` in ('sprint','stage') and `parent` = $sprint->parent") + ->checkIF(!empty($sprint->name), 'name', 'unique', "`type` in ('sprint','stage') and `project` = $sprint->project") + ->checkIF(!empty($sprint->code), 'code', 'unique', "`type` in ('sprint','stage')") ->checkIF($sprint->begin != '', 'begin', 'date') ->checkIF($sprint->end != '', 'end', 'date') ->checkIF($sprint->end != '', 'end', 'ge', $sprint->begin) @@ -519,6 +519,7 @@ class executionModel extends model ->checkIF($execution->begin != '', 'begin', 'date') ->checkIF($execution->end != '', 'end', 'date') ->checkIF($execution->end != '', 'end', 'ge', $execution->begin) + ->checkIF(!empty($execution->name), 'name', 'unique', "id != $executionID and type in ('sprint','stage') and `project` = $execution->project") ->checkIF(!empty($execution->code), 'code', 'unique', "id != $executionID and type in ('sprint','stage')") ->where('id')->eq($executionID) ->limit(1) @@ -544,7 +545,7 @@ class executionModel extends model $changedAccounts[$owner] = $owner; $teamMembers[$ownerField] = $member; } - if($execution->project) $this->addProjectMembers($execution->project, $teamMembers); + if($execution->project) $this->addProjectMembers($execution->project, $teamMembers); $whitelist = explode(',', $execution->whitelist); $this->loadModel('personnel')->updateWhitelist($whitelist, 'sprint', $executionID); @@ -624,10 +625,6 @@ class executionModel extends model if(isset($data->projects)) $executions[$executionID]->project = zget($data->projects, $executionID, 0); if(isset($data->attributes)) $executions[$executionID]->attribute = zget($data->attributes, $executionID, ''); - /* Check unique name for edited executions. */ - if(isset($nameList[$executionName])) dao::$errors['name'][] = 'execution#' . $executionID . sprintf($this->lang->error->unique, $this->lang->execution->name, $executionName); - $nameList[$executionName] = $executionName; - /* Check unique code for edited executions. */ if($projectModel == 'scrum' and empty($executionCode)) { @@ -646,6 +643,7 @@ class executionModel extends model { $oldExecution = $oldExecutions[$executionID]; $team = $this->loadModel('user')->getTeamMemberPairs($executionID, 'execution'); + $projectID = isset($execution->project) ? $execution->project : $oldExecution->project; $this->dao->update(TABLE_EXECUTION)->data($execution) ->autoCheck($skipFields = 'begin,end') @@ -653,7 +651,8 @@ class executionModel extends model ->checkIF($execution->begin != '', 'begin', 'date') ->checkIF($execution->end != '', 'end', 'date') ->checkIF($execution->end != '', 'end', 'gt', $execution->begin) - ->checkIF(!empty($execution->code), 'code', 'unique', "id NOT " . helper::dbIN($data->executionIDList) . " and type in ('sprint','stage')") + ->checkIF(!empty($execution->name), 'name', 'unique', "id != $executionID and type in ('sprint','stage') and `project` = $projectID") + ->checkIF(!empty($execution->code), 'code', 'unique', "id != $executionID and type in ('sprint','stage')") ->where('id')->eq($executionID) ->limit(1) ->exec(); diff --git a/module/product/model.php b/module/product/model.php index f3a729e875..4808a02dab 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -562,7 +562,7 @@ class productModel extends model $this->dao->insert(TABLE_PRODUCT)->data($product)->autoCheck() ->batchCheck($this->config->product->create->requiredFields, 'notempty') ->checkIF(!empty($product->name), 'name', 'unique', "`program` = $product->program") - ->checkIF(!empty($product->code), 'code', 'unique', "`program` = $product->program") + ->checkIF(!empty($product->code), 'code', 'unique') ->exec(); if(!dao::isError()) @@ -631,8 +631,8 @@ class productModel extends model $product = $this->loadModel('file')->processImgURL($product, $this->config->product->editor->edit['id'], $this->post->uid); $this->dao->update(TABLE_PRODUCT)->data($product)->autoCheck() ->batchCheck($this->config->product->edit->requiredFields, 'notempty') + ->checkIF(!empty($product->name), 'name', 'unique', "id != $productID and `program` = $product->program") ->checkIF(!empty($product->code), 'code', 'unique', "id != $productID") - ->check('name', 'unique', "id != $productID and deleted = '0'") ->where('id')->eq($productID) ->exec(); @@ -661,6 +661,7 @@ class productModel extends model $data = fixer::input('post')->get(); $oldProducts = $this->getByIdList($this->post->productIDList); $nameList = array(); + foreach($data->productIDList as $productID) { $productName = $data->names[$productID]; @@ -677,10 +678,6 @@ class productModel extends model $products[$productID]->status = $data->statuses[$productID]; $products[$productID]->desc = strip_tags($this->post->descs[$productID], $this->config->allowedTags); $products[$productID]->acl = $data->acls[$productID]; - - /* Check unique name for edited products. */ - if(isset($nameList[$productName])) dao::$errors['name'][] = 'product#' . $productID . sprintf($this->lang->error->unique, $this->lang->product->name, $productName); - $nameList[$productName] = $productName; } if(dao::isError()) die(js::error(dao::getError())); @@ -693,7 +690,7 @@ class productModel extends model ->data($product) ->autoCheck() ->batchCheck($this->config->product->edit->requiredFields , 'notempty') - ->check('name', 'unique', "id NOT " . helper::dbIN($data->productIDList) . " and deleted='0'") + ->checkIF(!empty($product->name), 'name', 'unique', "id != $productID and `program` = $product->program") ->where('id')->eq($productID) ->exec(); if(dao::isError()) die(js::error('product#' . $productID . dao::getError(true))); diff --git a/module/program/model.php b/module/program/model.php index 46bb357213..8ab2027d4a 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -741,7 +741,7 @@ class programModel extends model ->checkIF($program->begin != '', 'begin', 'date') ->checkIF($program->end != '', 'end', 'date') ->checkIF($program->end != '', 'end', 'gt', $program->begin) - ->check('name', 'unique', "id!=$programID and deleted='0' and `type`='program'") + ->checkIF(!empty($program->name), 'name', 'unique', "id!=$programID and `type`='program' and `parent` = $program->parent") ->where('id')->eq($programID) ->limit(1) ->exec(); diff --git a/module/project/control.php b/module/project/control.php index 1f87498a8a..db939da273 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -511,9 +511,12 @@ class project extends control /* Link the plan stories. */ $newPlans = array(); - foreach($_POST['plans'] as $plans) + if(isset($_POST['plans'])) { - foreach($plans as $planID) $newPlans[$planID] = $planID; + foreach($_POST['plans'] as $plans) + { + foreach($plans as $planID) $newPlans[$planID] = $planID; + } } $diffResult = array_diff($oldPlans, $newPlans); diff --git a/module/project/model.php b/module/project/model.php index 4464eb27b9..df8ced2647 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -858,7 +858,7 @@ class projectModel extends model ->autoCheck() ->batchcheck($requiredFields, 'notempty') ->checkIF(!empty($project->name), 'name', 'unique', "`type`='project' and `parent` = $project->parent") - ->checkIF(!empty($project->code), 'code', 'unique', "`type`='project' and `parent` = $project->parent") + ->checkIF(!empty($project->code), 'code', 'unique', "`type`='project'") ->checkIF($project->end != '', 'end', 'gt', $project->begin) ->exec(); @@ -1049,8 +1049,8 @@ class projectModel extends model ->checkIF($project->begin != '', 'begin', 'date') ->checkIF($project->end != '', 'end', 'date') ->checkIF($project->end != '', 'end', 'gt', $project->begin) - ->checkIF(!empty($project->code), 'code', 'unique', "id != $projectID and type='project'") - ->check('name', 'unique', "id != $projectID AND type='project' AND deleted='0'") + ->checkIF(!empty($project->name), 'name', 'unique', "id != $projectID and `type` = 'project' and `parent` = $project->parent") + ->checkIF(!empty($project->code), 'code', 'unique', "id != $projectID and `type` = 'project'") ->where('id')->eq($projectID) ->exec(); @@ -1114,10 +1114,6 @@ class projectModel extends model $projects[$projectID]->lastEditedBy = $this->app->user->account; $projects[$projectID]->lastEditedDate = helper::now(); - /* Check unique name for edited projects. */ - if(isset($nameList[$projectName])) dao::$errors['name'][] = 'project#' . $projectID . sprintf($this->lang->error->unique, $this->lang->project->name, $projectName); - $nameList[$projectName] = $projectName; - if($projects[$projectID]->parent) { $parentProject = $this->dao->select('*')->from(TABLE_PROGRAM)->where('id')->eq($projects[$projectID]->parent)->fetch(); @@ -1143,6 +1139,8 @@ class projectModel extends model ->checkIF($project->begin != '', 'begin', 'date') ->checkIF($project->end != '', 'end', 'date') ->checkIF($project->end != '', 'end', 'gt', $project->begin) + ->checkIF(!empty($project->name), 'name', 'unique', "id != $projectID and `type`='project' and `parent` = $project->parent") + ->checkIF(!empty($project->code), 'code', 'unique', "id != $projectID and `type`='project'") ->where('id')->eq($projectID) ->exec(); @@ -1482,7 +1480,7 @@ class projectModel extends model $class = "c-$id" . (in_array($id, array('budget', 'teamCount', 'estimate', 'consume')) ? ' c-number' : ''); if($id == 'id') $class .= ' cell-id'; - + if($id == 'code') $title = "title={$project->code}"; if($id == 'name')