diff --git a/module/upgrade/model.php b/module/upgrade/model.php index d3507a8103..2a9b33154e 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -679,6 +679,10 @@ class upgradeModel extends model case '15_0_1': $this->saveLogs('Execute 15_0_1'); $this->appendExec('15_0_1'); + case '15_0_2': + $this->saveLogs('Execute 15_0_2'); + $this->uniqueProjectAdmin(); + $this->appendExec('15_0_2'); } $this->deletePatch(); @@ -4988,4 +4992,37 @@ class upgradeModel extends model $this->dao->update(TABLE_PRODUCT)->set('createdVersion')->eq($this->config->version)->where('createdVersion')->eq('')->andWhere('createdDate')->gt('2020-01-01')->exec(); return true; } + + /** + * Unique projectAdmin group. + * + * @access public + * @return bool + */ + public function uniqueProjectAdmin() + { + $projectAdmins = $this->dao->select('*')->from(TABLE_GROUP)->where('role')->eq('projectAdmin')->orderBy('id')->fetchAll('id'); + if(count($projectAdmins) == 1) return true; + + $holdGroup = reset($projectAdmins); + unset($projectAdmins[$holdGroup->id]); + + $userGroups = $this->dao->select('*')->from(TABLE_USERGROUP)->where('`group`')->in(array_keys($projectAdmins))->fetchGroup('group', 'account'); + foreach($userGroups as $groupID => $groups) + { + foreach($groups as $account => $userGroup) + { + $this->dao->delete()->from(TABLE_USERGROUP)->where('`group`')->eq($userGroup->group)->andWhere('account')->eq($userGroup->account)->exec(); + + $newUserGroup = new stdclass(); + $newUserGroup->account = $account; + $newUserGroup->project = $userGroup->project; + $newUserGroup->group = $holdGroup->id; + $this->dao->replace(TABLE_USERGROUP)->data($newUserGroup)->exec(); + } + } + + $this->dao->delete()->from(TABLE_GROUP)->where('id')->in(array_keys($projectAdmins))->exec(); + return true; + } }