Пример #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;
 }
Пример #2
0
 public function list_userAction()
 {
     if ($resp = $this->checkUserInput(['group_id'], self::GET)) {
         $resp->flush();
         return false;
     }
     if (!($group = GroupManager::getInstance()->getGroupById(ApiRequest::getParam('group_id')))) {
         (new ApiResponse(Code::FAIL_GROUP_NOT_EXISTS, null))->flush();
         return false;
     }
     $groupUserManager = GroupUserManager::getInstance();
     if (!($groupUser = $groupUserManager->getGroupUserByGidUid($group->id, $this->user->id))) {
         (new ApiResponse(Code::FAIL_GROUP_USER_NOT_EXISTS, null))->flush();
         return false;
     }
     $status = ApiRequest::getParam('status');
     $groupUserModel = new GroupUser();
     if ($group->type == Group::TYPE_CHATROOM) {
         $groupUserModel->status = GroupUser::STATUS_AGREE;
     } else {
         $groupUserModel->status = $status;
         if (!$groupUserModel->checkStatus()) {
             (new ApiResponse(Code::FAIL_GROUP_USER_STATUS, 'chatroom must set status'))->flush();
             return false;
         }
         if ($status != GroupUser::STATUS_AGREE && $groupUser->permission < GroupUser::PERMISSION_ADMIN) {
             (new ApiResponse(Code::FAIL_GROUP_USER_PERMISSION, null))->flush();
             return false;
         }
     }
     $objects = $groupUserManager->getAllGroupUser($group, $groupUserModel, $this->getOffset(), $this->getLimit());
     if (is_array($objects)) {
         $list = [];
         foreach ($objects as $o) {
             $list[] = $o->toArray();
         }
         (new ApiResponse(Code::SUCCESS, $list))->flush();
     } else {
         (new ApiResponse($groupUserManager->getLastErrorCode(), $groupUserManager->getLastErrorString()))->flush();
     }
     return false;
 }
Пример #3
0
 /**
  * @param \minions\model\Group     $model
  * @param \minions\model\GroupUser $groupUser
  * @return Group[]|null
  * @throws \Exception
  */
 public function getUserGroups(Group $model, GroupUser $groupUser)
 {
     if (!$groupUser->uid) {
         $this->setLastError(Code::FAIL_GROUP_USER_NOT_EXISTS, 'uid is empty');
         return null;
     }
     if (!$model->checkType()) {
         $this->setLastError(Code::FAIL_GROUP_TYPE, 'type is error');
         return null;
     }
     if (!$groupUser->checkStatus()) {
         $this->setLastError(Code::FAIL_GROUP_USER_STATUS, 'status is error');
         return null;
     }
     $dbManager = Db::getInstance();
     $statement = $dbManager->prepare(self::GET_USER_GROUPS);
     if (!$statement->execute([$model->type, $groupUser->uid, $groupUser->status])) {
         $this->setLastError(Code::FAIL_DATABASE_ERROR, 'get groups failed');
         return null;
     }
     return $statement->fetchAll(PDO::FETCH_CLASS, 'minions\\model\\Group');
 }