示例#1
0
 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;
 }