示例#1
0
 public function addRoster(Roster $model)
 {
     $model->status = Roster::STATUS_REQUEST;
     if ($resp = $this->checkRoster($model)) {
         return $resp;
     }
     // check is record exists
     $dbModel = clone $model;
     $resp = $this->getRoster($dbModel);
     if (!$resp || $resp->code != Code::FAIL_ROSTER_NOT_EXISTS) {
         return new ApiResponse(Code::FAIL_PERMISSION_DENY, 'repeat add');
     }
     $model->create_time = time();
     $model->update_time = 0;
     $model->rank = intval($model->rank);
     $model->group_id = intval($model->group_id);
     $dbManager = Db::getInstance();
     // get target's status
     $statement = $dbManager->prepare(self::GET_ROSTER_BY_FRIEND);
     if (!$statement->execute([$model->target_id, $model->uid])) {
         return new ApiResponse(Code::FAIL_ROSTER_NOT_EXISTS, 'get target roster failed when add roster');
     }
     $targetResult = $statement->fetch(PDO::FETCH_ASSOC);
     if ($targetResult) {
         $target = ConvertUtil::arrayToObject($targetResult, new Roster(), ['id', 'uid', 'target_id', 'status', 'remark', 'group_id', 'rank']);
         if ($target->status == Roster::STATUS_UNSUBSCRIBE) {
             return new ApiResponse(Code::FAIL_ROSTER_UNSUBSCRIBE, 'you is in her ignore list');
         }
         if ($target->status == Roster::STATUS_BLACK) {
             return new ApiResponse(Code::FAIL_ROSTER_BLACK, 'you is in her black list');
         }
     } else {
         $dbManager->beginTransaction();
         $statement = $dbManager->prepare(self::ADD_ROSTER);
         if (!$statement->execute([$model->target_id, $model->uid, Roster::STATUS_RECEIVE, $model->create_time, $model->update_time, null, 0, 0])) {
             $dbManager->rollBack();
             return new ApiResponse(Code::FAIL_DATABASE_ERROR, 'create target roster failed');
         }
     }
     $statement = $dbManager->prepare(self::ADD_ROSTER);
     if (!$statement->execute([$model->uid, $model->target_id, $model->status, $model->create_time, $model->update_time, $model->remark, $model->group_id, $model->rank])) {
         if (!$targetResult) {
             $dbManager->rollBack();
         }
         return new ApiResponse(Code::FAIL_DATABASE_ERROR, 'create roster failed');
     }
     $model->id = $dbManager->lastInsertId();
     if (!$targetResult) {
         $dbManager->commit();
     }
     JegarnUtil::sendFriendRequestNotification($model->uid, $model->target_id);
     return null;
 }