예제 #1
0
def game_page(context):

    battle = Battle1x1Prototype.get_by_account_id(context.account.id)

    if battle and battle.state.is_PROCESSING:
        return dext_views.Redirect(url('game:pvp:'))

    clan = None
    if context.account.clan_id is not None:
        clan = ClanPrototype.get_by_id(context.account.clan_id)

    cards = sorted(CARD.records, key=lambda r: (r.rarity.value, r.text))

    return dext_views.Page('game/game_page.html',
                           content={
                               'map_settings': map_settings,
                               'game_settings': game_settings,
                               'EQUIPMENT_SLOT': EQUIPMENT_SLOT,
                               'current_map_version': map_info_storage.version,
                               'clan': clan,
                               'CARDS': cards,
                               'resource': context.resource,
                               'hero': context.account_hero,
                               'ABILITY_TYPE': ABILITY_TYPE
                           })
예제 #2
0
    def preprocess(self, context):
        if context.account.is_authenticated():
            return

        if context.django_request.is_ajax():
            raise dext_exceptions.ViewError(code='common.login_required', message=u'У Вас нет прав для проведения данной операции')

        return dext_views.Redirect(target_url=self.login_page_url(context.django_request.get_full_path()))
예제 #3
0
def conversation(context):

    contacts_ids = tt_api.get_contacts(context.account.id)

    messages_count, messages = tt_api.get_conversation(context.account.id,
                                                      context.contact.id,
                                                      text=context.filter,
                                                      offset=context.page*conf.settings.MESSAGES_ON_PAGE,
                                                      limit=conf.settings.MESSAGES_ON_PAGE)

    class Filter(list_filter.ListFilter):
        ELEMENTS = [list_filter.reset_element(),
                    list_filter.filter_element('поиск:', attribute='filter', default_value=None),
                    list_filter.static_element('количество:', attribute='count', default_value=0) ]

    url_builder = UrlBuilder(url('accounts:messages:conversation'), arguments={'page': context.page,
                                                                               'contact': context.contact.id,
                                                                               'filter': context.filter})

    index_filter = Filter(url_builder=url_builder, values={'contact': context.contact.id,
                                                           'filter': context.filter,
                                                           'count': messages_count})

    paginator = Paginator(context.page, messages_count, conf.settings.MESSAGES_ON_PAGE, url_builder)

    if paginator.wrong_page_number:
        return dext_views.Redirect(paginator.last_page_url, permanent=False)

    accounts_ids = set(contacts_ids)

    for message in messages:
        accounts_ids.add(message.sender_id)
        accounts_ids.update(message.recipients_ids)

    accounts = {account.id: account for account in accounts_prototypes.AccountPrototype.get_list_by_id(list(accounts_ids))}

    contacts = [accounts[contact_id] for contact_id in contacts_ids]
    contacts.sort(key=lambda account: account.nick_verbose)

    return dext_views.Page('personal_messages/index.html',
                           content= {'messages': messages,
                                     'paginator': paginator,
                                     'page': 'contacts',
                                     'contacts': contacts,
                                     'accounts': accounts,
                                     'master_account': context.account,
                                     'index_filter': index_filter,
                                     'contact': context.contact,
                                     'resource': context.resource})
예제 #4
0
def render_index(context, lots_query, page_mode, base_url):
    if context.filter is not None:
        lots_query = lots_query.filter(name__icontains=context.filter)

    if context.goods_group is not None:
        lots_query = lots_query.filter(type=context.goods_group.type.uid,
                                       group_id=context.goods_group.id)

    lots_query = lots_query.order_by(context.order_by.db_order)

    lots_count = lots_query.count()

    url_builder = UrlBuilder(
        base_url,
        arguments={
            'filter': context.filter,
            'order_by': context.order_by.value,
            'group': context.goods_group.uid if context.goods_group else None
        })

    index_filter = LotsIndexFilter(
        url_builder=url_builder,
        values={
            'filter': context.filter,
            'order_by': context.order_by.value,
            'count': lots_count,
            'group': context.goods_group.uid if context.goods_group else None
        })

    paginator = pagination.Paginator(context.page, lots_count,
                                     conf.settings.LOTS_ON_PAGE, url_builder)

    if paginator.wrong_page_number:
        return dext_views.Redirect(paginator.last_page_url)

    lots_from, lots_to = paginator.page_borders(context.page)

    lots = logic.load_lots_from_query(lots_query[lots_from:lots_to])

    return dext_views.Page('market/index.html',
                           content={
                               'context': context,
                               'index_filter': index_filter,
                               'paginator': paginator,
                               'lots': lots,
                               'page_type': page_mode.page,
                               'resource': context.resource
                           })
예제 #5
0
파일: views.py 프로젝트: AtnesNess/the-tale
def index(context):

    accounts_query = AccountPrototype.live_query()

    if context.prefix:
        accounts_query = accounts_query.filter(
            nick__istartswith=context.prefix)

    accounts_count = accounts_query.count()

    url_builder = UrlBuilder(reverse('accounts:'),
                             arguments={
                                 'page': context.page,
                                 'prefix': context.prefix
                             })

    paginator = Paginator(context.page, accounts_count,
                          conf.accounts_settings.ACCOUNTS_ON_PAGE, url_builder)

    if paginator.wrong_page_number:
        return dext_views.Redirect(paginator.last_page_url, permanent=False)

    account_from, account_to = paginator.page_borders(context.page)

    accounts_models = accounts_query.select_related().order_by(
        'nick')[account_from:account_to]

    accounts = [AccountPrototype(model) for model in accounts_models]

    accounts_ids = [model.id for model in accounts_models]
    clans_ids = [model.clan_id for model in accounts_models]

    heroes = dict(
        (model.account_id, heroes_logic.load_hero(hero_model=model))
        for model in Hero.objects.filter(account_id__in=accounts_ids))

    clans = {clan.id: clan for clan in ClanPrototype.get_list_by_id(clans_ids)}

    return dext_views.Page('accounts/index.html',
                           content={
                               'heroes': heroes,
                               'prefix': context.prefix,
                               'accounts': accounts,
                               'clans': clans,
                               'resource': context.resource,
                               'current_page_number': context.page,
                               'paginator': paginator
                           })
예제 #6
0
def index(context):
    context.account.reset_new_messages_number()
    query = models.Message.objects.filter(recipient_id=context.account.id, hide_from_recipient=False)

    senders_ids = list(set(query.values_list('sender_id', flat=True).order_by('sender').distinct()))
    senders = sorted(accounts_prototypes.AccountPrototype.get_list_by_id(senders_ids), key=lambda account: account.nick)

    if context.sender is not None:
        query = query.filter(sender_id=context.sender.id)

    if context.filter is not None:
        query = query.filter(text__icontains=context.filter)

    class Filter(list_filter.ListFilter):
        ELEMENTS = [list_filter.reset_element(),
                    list_filter.filter_element('поиск:', attribute='filter', default_value=None),
                    list_filter.choice_element('отправитель:', attribute='sender', choices=[(None, 'все')] + [(account.id, account.nick) for account in senders] ),
                    list_filter.static_element('количество:', attribute='count', default_value=0) ]

    url_builder = UrlBuilder(url('accounts:messages:'), arguments={'page': context.page,
                                                                   'sender': context.sender.id if context.sender is not None else None,
                                                                   'filter': context.filter})

    messages_count = query.count()

    index_filter = Filter(url_builder=url_builder, values={'sender': context.sender.id if context.sender is not None else None,
                                                           'filter': context.filter,
                                                           'count': messages_count})

    # page = int(context.page) - 1

    paginator = Paginator(context.page, messages_count, conf.settings.MESSAGES_ON_PAGE, url_builder)

    if paginator.wrong_page_number:
        return dext_views.Redirect(paginator.last_page_url, permanent=False)

    message_from, message_to = paginator.page_borders(context.page)

    messages = [ prototypes.MessagePrototype(message_model) for message_model in query.order_by('-created_at')[message_from:message_to]]

    return dext_views.Page('personal_messages/index.html',
                           content= {'messages': messages,
                                     'paginator': paginator,
                                     'incoming': True,
                                     'index_filter': index_filter,
                                     'resource': context.resource})
예제 #7
0
파일: views.py 프로젝트: pavetok/the-tale
def index(context):

    url_builder = UrlBuilder(url('news:'), arguments={'page': context.page})

    news_count = models.News.objects.all().count()

    paginator = Paginator(context.page, news_count, conf.settings.NEWS_ON_PAGE,
                          url_builder)

    if paginator.wrong_page_number:
        return dext_views.Redirect(paginator.last_page_url)

    news_from, news_to = paginator.page_borders(context.page)

    news = logic.load_news_from_query(
        models.News.objects.all().order_by('-created_at')[news_from:news_to])

    return dext_views.Page('news/index.html',
                           content={
                               'news': news,
                               'paginator': paginator,
                               'resource': context.resource
                           })
예제 #8
0
파일: views.py 프로젝트: pavetok/the-tale
def index(context):
    if context.account.is_premium:
        return dext_views.Redirect(target_url=url('market:'))
    return dext_views.Redirect(target_url=url('shop:shop'))