コード例 #1
0
ファイル: base.py プロジェクト: hitandaway100/caba
 def checkBattleEventUser(self, do_check_opening=True, do_check_battle_open=True, do_check_regist=True, do_check_loginbonus=True, do_check_emergency=True):
     """ユーザーチェック.
     """
     model_mgr = self.getModelMgr()
     
     if do_check_opening:
         uid = self.getViewerPlayer().id
         cur_eventmaster = self.getCurrentBattleEvent(quiet=True)
         if cur_eventmaster:
             if BackendApi.check_battleevent_lead_opening(model_mgr, uid, cur_eventmaster.id, using=settings.DB_READONLY):
                 # オープニングを見ていない.
                 url = UrlMaker.battleevent_opening()
                 self.appRedirect(self.makeAppLinkUrlRedirect(url))
                 return False
     
     config = BackendApi.get_current_battleeventconfig(model_mgr, using=settings.DB_READONLY)
     is_battleopen = self.isBattleOpen()
     
     if do_check_battle_open and not is_battleopen:
         # バトルが閉じている.
         url = UrlMaker.battleevent_top(config.mid)
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return False
     elif do_check_emergency and config.is_emergency:
         # 緊急停止.
         url = UrlMaker.battleevent_top(config.mid)
         self.appRedirect(self.makeAppLinkUrlRedirect(url))
         return False
     else:
         cur_group = self.getCurrentBattleGroup(do_search_log=not is_battleopen)
         if do_check_regist and cur_group is None:
             # イベントに参加していない.
             if is_battleopen:
                 url = UrlMaker.battleevent_regist()
             else:
                 url = UrlMaker.battleevent_top(config.mid)
             self.appRedirect(self.makeAppLinkUrlRedirect(url))
             return False
         elif do_check_loginbonus:
             rankrecord = self.getCurrentBattleRankRecord()
             if rankrecord and rankrecord.isNeedUpdate(config):
                 url = UrlMaker.battleevent_loginbonus()
                 self.appRedirect(self.makeAppLinkUrlRedirect(url))
                 return False
     return True
コード例 #2
0
ファイル: regist.py プロジェクト: hitandaway100/caba
class Handler(BattleEventBaseHandler):
    """バトルイベント参加.
    バトル公開中だけ受け付ける.
    バトル公開中にグループに所属していないユーザーが対象.
    合コンイベントの時は登録ページ.
    """
    @classmethod
    def getViewerPlayerClassList(cls):
        return [PlayerExp]

    def process(self):

        eventmaster = self.getCurrentBattleEvent()
        if not self.checkBattleEventUser(do_check_regist=False,
                                         do_check_loginbonus=False):
            return

        if eventmaster.is_goukon:
            self.__procGoukon(eventmaster)
        else:
            self.__procNormal(eventmaster)

    def __procGoukon(self, eventmaster):
        """合コンバトルイベント.
        """
        model_mgr = self.getModelMgr()
        eventid = eventmaster.id

        basetime = DateTimeUtil.toLoginTime(OSAUtil.get_now())
        cdate = datetime.date(basetime.year, basetime.month, basetime.day)
        cur_group = self.getCurrentBattleGroup(do_search_log=False)

        # 設定済みの場合はイベントTOPへリダイレクト.
        if cur_group and cur_group.cdate == cdate:
            url = UrlMaker.battleevent_top(eventmaster.id)
            self.appRedirect(self.makeAppLinkUrlRedirect(url))
            return

        # 最大ランク.
        config = BackendApi.get_current_battleeventconfig(
            model_mgr, using=settings.DB_READONLY)

        # 公開中のランク.
        rankmaster_list = BackendApi.get_battleevent_rankmaster_by_eventid(
            model_mgr, eventid, using=settings.DB_READONLY)
        rankmaster_list.sort(key=lambda x: x.rank)

        # 未設定で引数がある場合は書き込み.
        rank = str(self.request.get(Defines.URLQUERY_ID))
        if rank.isdigit():
            rank = int(rank)
            # ランクの公開確認.
            target_rankmaster = None
            for rankmaster in rankmaster_list:
                if rankmaster.rank == rank:
                    target_rankmaster = rankmaster
                    break
            if target_rankmaster:
                # 登録書き込み.
                v_player = self.getViewerPlayer()
                uid = v_player.id
                try:
                    db_util.run_in_transaction(self.tr_write, config,
                                               eventmaster, uid,
                                               v_player.level, rankmaster_list,
                                               rank).write_end()
                except CabaretError, err:
                    if err.code == CabaretError.Code.ALREADY_RECEIVED:
                        pass
                    elif settings_sub.IS_DEV:
                        raise
                    else:
                        url = UrlMaker.mypage()
                        self.appRedirect(self.makeAppLinkUrlRedirect(url))
                        return

                # 書き込み後はイベントTOPへ.
                url = UrlMaker.battleevent_top(eventmaster.id)
                self.appRedirect(self.makeAppLinkUrlRedirect(url))
                return

        # 未設定で引数がない場合は選択ページ.
        # イベント情報.
        self.html_param['battleevent'] = Objects.battleevent(self, eventmaster)

        # 各ランクの情報.
        obj_rank_list = []
        rankmaster_list.sort(key=lambda x: x.rank, reverse=True)
        for rankmaster in rankmaster_list:
            obj_rank = BackendApi.make_battleevent_rank_selectobj(
                self, rankmaster)
            obj_rank_list.append(obj_rank)
        self.html_param['battleevent_rank_select'] = obj_rank_list

        # 書き込み実行URL.
        url = UrlMaker.battleevent_regist()
        self.html_param['url_do'] = self.makeAppLinkUrl(url)

        self.putEventTopic(eventmaster.id)

        self.writeAppHtml('gcevent/start')