Exemplo n.º 1
0
    def process(self):

        v_player = self.getViewerPlayer()
        uid = v_player.id

        args = self.getUrlArgs('/battleeventgrouplog/detail/')
        groupid = args.getInt(0)
        page = int(self.request.get(Defines.URLQUERY_PAGE) or 0)

        model_mgr = self.getModelMgr()
        grouplog = None
        eventmaster = None
        rankmaster = None
        if groupid:
            grouplog = BackendApi.get_battleevent_grouplog(
                model_mgr, groupid, using=settings.DB_READONLY)
            if grouplog:
                rankmaster = BackendApi.get_battleevent_rankmaster_byId(
                    model_mgr, grouplog.rankid, using=settings.DB_READONLY)
                if rankmaster:
                    eventmaster = BackendApi.get_battleevent_master(
                        model_mgr,
                        rankmaster.eventid,
                        using=settings.DB_READONLY)

        if eventmaster is None:
            self.redirectToTop()
            return

        grouplog.userdata.sort(key=lambda x: x.point, reverse=True)

        nummax = len(grouplog.userdata)
        offset = page * Handler.CONTENT_NUM_PER_PAGE
        targetlist = grouplog.userdata[offset:(offset +
                                               Handler.CONTENT_NUM_PER_PAGE)]
        obj_playerlist = []
        if targetlist:
            pointlist = [data.point for data in grouplog.userdata]
            uidlist = [data.uid for data in targetlist]
            playerlist = BackendApi.get_players(self,
                                                uidlist, [PlayerExp],
                                                using=settings.DB_READONLY)
            obj_player_dict = dict([
                (obj_player['id'], obj_player)
                for obj_player in self.getObjPlayerList(playerlist)
            ])

            rank = pointlist.index(targetlist[0].point)
            point = None
            for data in targetlist:
                if point is None or data.point < point:
                    rank += 1
                point = data.point
                obj_player = obj_player_dict.get(data.uid)
                if obj_player:
                    obj_player['event_rank'] = rank
                    obj_player['event_score'] = data.point
                    obj_player['is_me'] = data.uid == uid
                    obj_playerlist.append(obj_player)
        self.html_param['playerlist'] = obj_playerlist

        self.putPagenation(UrlMaker.battleevent_grouplogdetail(groupid), page,
                           nummax, Handler.CONTENT_NUM_PER_PAGE)

        self.putEventTopic(rankmaster.eventid)

        self.html_param['url_battleevent_ranklog'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_grouploglist(rankmaster.eventid))

        rankrecord = BackendApi.get_battleevent_rankrecord(
            model_mgr, rankmaster.eventid, uid, using=settings.DB_READONLY)
        self.html_param['battleevent_rank'] = Objects.battleevent_rank(
            self, rankrecord, rankmaster, grouplog)

        if eventmaster.is_goukon:
            self.writeAppHtml('gcevent/ranklog')
        else:
            self.writeAppHtml('btevent/ranklog')
Exemplo n.º 2
0
    def process(self):

        self.__execute_end_worklist = []

        model_mgr = self.getModelMgr()

        config = BackendApi.get_current_battleeventconfig(
            model_mgr, using=settings.DB_READONLY)

        args = self.getUrlArgs('/battleeventtop/')
        eventid = str(args.get(0))
        eventmaster = None

        if eventid and eventid.isdigit():
            eventid = int(eventid)
        elif config:
            eventid = config.mid

        if eventid:
            eventmaster = BackendApi.get_battleevent_master(
                model_mgr, eventid, using=settings.DB_READONLY)

        if eventmaster is None:
            raise CabaretError(u'Event Closed.',
                               CabaretError.Code.EVENT_CLOSED)
            return

        self.__eventmaster = eventmaster
        eventid = eventmaster.id
        cur_eventmaster = self.getCurrentBattleEvent(quiet=True)

        v_player = self.getViewerPlayer()
        uid = v_player.id

        is_open = cur_eventmaster and eventid == cur_eventmaster.id

        self.setFromPage(Defines.FromPages.BATTLEEVENT, eventid)

        if is_open:
            # 開催中.
            if self.isBattleOpen():
                # バトルが開いている時.
                self.procOpened()
            else:
                # バトルが閉じている時.
                self.procBattleClosed()
            # イベント参加KPI保存.
            BackendApi.save_kpi_battleevent_join(uid, self.is_pc)
        else:
            self.procClosed()

        if self.response.isEnd:
            return

        self.html_param['player'] = Objects.player(self, v_player)

        # イベント情報.
        battleevent = Objects.battleevent(self, eventmaster)
        self.html_param['battleevent'] = battleevent

        # バトルチケットの使用期限
        if is_open:
            self.html_param[
                'battle_ticket_expiry_date'] = self.get_battle_ticket_expiry_date(
                    config.ticket_endtime)

        BackendApi.check_battleevent_piececollection_userdata_and_create(
            model_mgr, uid, eventid)
        self.html_param['allrarity_piece'] = self.create_piece_image_paths(
            uid, eventid)

        # トピック.
        self.putEventTopic(eventid)

        # バトル履歴.
        if not eventmaster.is_goukon:
            loglist = BackendApi.get_battleevent_battlelog_list(
                model_mgr, uid, limit=1, using=settings.DB_READONLY)
            if loglist:
                func_battleloginfo = BackendApi.make_battleevent_battleloginfo(
                    self, loglist, do_execute=False)
                if func_battleloginfo:

                    def put_battleloginfo():
                        self.html_param['battleloglist'] = func_battleloginfo()

                    self.addExecuteApiWork(put_battleloginfo)

        # バトル履歴のリンク.
        self.html_param['url_battleevent_battlelog'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_loglist())
        tradeshop_urlparam = OSAUtil.addQuery(
            UrlMaker.trade(), Defines.URLQUERY_CTYPE,
            Defines.GachaConsumeType.GachaTopTopic.TICKET)
        self.html_param['url_battleticket_trade'] = self.makeAppLinkUrl(
            tradeshop_urlparam)
        battleticket = BackendApi.get_additional_gachaticket_nums(
            model_mgr,
            v_player.id,
            [Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET],
            using=settings.DB_READONLY)
        if battleticket:
            battle_ticket_num = battleticket[
                Defines.GachaConsumeType.GachaTicketType.BATTLE_TICKET].num
        else:
            battle_ticket_num = 0
        self.html_param['battleticket'] = {
            'name':
            Defines.GachaConsumeType.NAMES[
                Defines.GachaConsumeType.BATTLE_TICKET],
            'num':
            battle_ticket_num,
            'unit':
            Defines.ItemType.UNIT[Defines.ItemType.ADDITIONAL_GACHATICKET],
        }

        # グループ履歴のリンク.
        self.html_param['url_battleevent_grouplog'] = self.makeAppLinkUrl(
            UrlMaker.battleevent_grouploglist(eventid))

        if not self.html_param.has_key('battleevent_rank'):
            # ランク情報がないのでデフォルトのを設定.
            if config.isFirstDay():
                rankmaster = BackendApi.get_battleevent_rankmaster(
                    model_mgr,
                    eventid,
                    eventmaster.rankstart,
                    using=settings.DB_READONLY)
            else:
                rankmaster = BackendApi.get_battleevent_rankmaster(
                    model_mgr,
                    eventid,
                    eventmaster.rankbeginer,
                    using=settings.DB_READONLY)
            self.html_param['battleevent_rank'] = Objects.battleevent_rank(
                self, None, rankmaster, None)

        self.executeApiWithWork()

        # 初心者フラグ.
        is_beginer = BackendApi.check_battleevent_beginer(
            model_mgr, uid, eventmaster, config, using=settings.DB_READONLY)
        self.html_param['is_beginer'] = is_beginer

        # ユーザーデータのチェック, カウントの取得
        user_cvictory_count = self.check_user_continue_victory_data(
            uid, eventid)
        self.put_user_continue_victory_data(user_cvictory_count)

        # ランキング.
        view_myrank = False
        view_beginer = self.request.get(Defines.URLQUERY_BEGINER) == "1"
        if not view_beginer or is_beginer:
            view_myrank = self.request.get(Defines.URLQUERY_FLAG) == "1"
        url_ranking = OSAUtil.addQuery(UrlMaker.battleevent_top(eventid),
                                       Defines.URLQUERY_FLAG, "0")
        url_myrank = OSAUtil.addQuery(UrlMaker.battleevent_top(eventid),
                                      Defines.URLQUERY_FLAG, "1")
        self.putRanking(uid,
                        eventid,
                        view_myrank,
                        url_ranking,
                        url_myrank,
                        view_beginer=view_beginer)

        if eventmaster.is_goukon:
            self.writeAppHtml('gcevent/top')
        else:
            self.writeAppHtml('btevent/top')