public function manageUser(GroupUser $model, User $manageUser) { $checkStatus = $model->checkStatus(); $checkPermission = $model->checkPermission(); if (!$checkStatus && !$checkPermission) { return null; } if (!($dbModel = $this->getGroupUserByGidUid($model->gid, $model->uid))) { return new ApiResponse($this->getLastErrorCode(), $this->getLastErrorString()); } $model->id = $dbModel->id; // nothing changed as up if ($checkStatus && $model->status == $dbModel->status && $checkPermission && $model->permission == $dbModel->permission) { return null; } $groupManager = GroupManager::getInstance(); if (!($group = $groupManager->getGroupById($dbModel->gid))) { return new ApiResponse($groupManager->getLastErrorCode(), null); } if ($group->type == Group::TYPE_CHATROOM) { return new ApiResponse(Code::FAIL_PERMISSION_DENY, 'chatroom can not manage'); } if (!($userGroupUser = $this->getGroupUserByGidUid($dbModel->gid, $manageUser->id))) { return new ApiResponse($this->getLastErrorCode(), $this->getLastErrorString()); } if ($userGroupUser->permission != GroupUser::PERMISSION_ADMIN && $userGroupUser->permission != GroupUser::PERMISSION_ROOT) { return new ApiResponse(Code::FAIL_PERMISSION_DENY, 'normal user'); } if ($userGroupUser->permission == GroupUser::PERMISSION_ADMIN && ($dbModel->permission == GroupUser::PERMISSION_ADMIN || $dbModel->permission == GroupUser::PERMISSION_ROOT)) { return new ApiResponse(Code::FAIL_PERMISSION_DENY, 'admin only can manage normal people'); } if ($userGroupUser->permission == GroupUser::PERMISSION_ADMIN && $checkPermission) { return new ApiResponse(Code::FAIL_PERMISSION_DENY, 'admin only can not manage permission'); } if ($userGroupUser->permission == GroupUser::PERMISSION_ROOT && $checkPermission && $model->permission == GroupUser::PERMISSION_ROOT) { return new ApiResponse(Code::FAIL_PERMISSION_DENY, 'always one root'); } if ($checkStatus && $checkPermission) { if ($resp = $this->updateGroupUserStatusAndPermission($model)) { return $resp; } } else { if ($checkStatus) { if ($resp = $this->updateGroupUserStatus($model)) { return $resp; } } else { if ($resp = $this->updateGroupUserPermission($model)) { return $resp; } } } $model->gid = $dbModel->gid; $model->create_time = $dbModel->create_time; $model->uid = $dbModel->uid; $model->remark = $dbModel->remark; if ($dbModel->status != GroupUser::STATUS_AGREE && $model->status == GroupUser::STATUS_AGREE) { JegarnUtil::joinGroup($model->gid, $model->uid); JegarnUtil::sendGroupAgreeNotification($group->uid, $model->uid, $group->id, $group->name); } else { if ($dbModel->status != GroupUser::STATUS_REFUSED && $model->status == GroupUser::STATUS_REFUSED) { JegarnUtil::sendGroupRefusedNotification($group->uid, $model->uid, $group->id, $group->name); } } return null; }