Esempio n. 1
0
def user_view(request, username, userpage_type):
    nav = browse.Navigation.load_json_or_404({
        'userpage_type': userpage_type,
        'user': username,
        'offset': request.GET.get('offset'),
        'mobile': request.is_mobile,
    })

    nav_data = nav.dump_json()

    posts = browse.get_user_data(request.user, nav)

    viewer_is_staff = request.user.is_authenticated() and request.user.is_staff
    user = get_object_or_404(User, username=username)
    private_beta_member = (user.id <= 63015)
    user_is_staff = user.is_staff
    friendlyname = "you" if user == request.user else username
    # A template variable that tells us if the current user is viewing her profile.
    user_is_self = user == request.user
    user_can_see_anonymous = (request.user == user or viewer_is_staff)
    showing_anonymous = True

    viewer_is_following = request.user.is_authenticated() and request.user.is_following(user)

    hide_userpage_from_google = user.has_lab('hide_userpage_from_google')

    if userpage_type == 'top' or userpage_type == 'top_anonymous':
        sort_method = 'top'
    elif userpage_type == 'new' or userpage_type == 'new_anonymous':
        sort_method = 'new'
    elif userpage_type == 'stickered':
        sort_method = 'stickered'

    # Can this comment be deleted by this user?
    # We only want to show the delete button if the user is looking at her user page. So we suppress it in the
    # browse pages for two reasons:
    # 1. It adds clutter to the page. There is already a lot of stuff going on in browse pages.
    # 2. It might encourage deletes.
    show_delete_option = user_is_self and userpage_type not in ['stickered']

    sort = sort_method
    # The Jinja template expects "posts" to be called "tiles".
    tiles = posts
    render_options = tile_render_options(sort, False)

    avatar_comment = None
    bio = ""

    if user.userinfo.profile_image is not None:
        avatar_comment = Comment.details_by_id(user.userinfo.profile_image.id)()
        bio = user.userinfo.profile_image.reply_text

    if request.is_mobile:
        return r2r_jinja('mobile/user.html', locals())

    return r2r_jinja('user/profile.html', locals())
Esempio n. 2
0
def about(request):
    peeps = []
    comments = []
    for short_id in settings.ABOUT_PAGE_COMMENTS:
        mapping_id = get_mapping_id_from_short_id(short_id)
        comment = get_object_or_404(Comment.all_objects, id=mapping_id)
        comments.append(comment)
        peeps.append(TileDetails(comment.details()))

    tiles = TileDetails.from_queryset_with_viewer_stickers(request.user, comments)
    sort = None
    show_pins = False
    render_options = tile_render_options(sort, show_pins)

    return r2r_jinja("about.html", locals())
Esempio n. 3
0
def _disposition_tiles(request, context, posts_or_tiles, nav, show_pins=False, tile_renderer='explore_tiles'):
    from apps.monster.jinja_tags import monster_image_tiles

    #TODO refactor since less is being reused now. also fixing the front_more usage of this was a little hacky.

    category = nav.category.details() if nav.category else None

    render_options = tile_render_options(nav.sort, show_pins)

    tile_renderer = {
        'monster_image_tiles'   : monster_image_tiles,
        'explore_tiles'         : explore_tiles,
    }[tile_renderer]

    return HttpResponse(tile_renderer(context, posts_or_tiles, render_options, category))
Esempio n. 4
0
def _disposition_tiles(request,
                       context,
                       posts_or_tiles,
                       nav,
                       show_pins=False,
                       tile_renderer='explore_tiles'):
    from apps.monster.jinja_tags import monster_image_tiles

    #TODO refactor since less is being reused now. also fixing the front_more usage of this was a little hacky.

    category = nav.category.details() if nav.category else None

    render_options = tile_render_options(nav.sort, show_pins)

    tile_renderer = {
        'monster_image_tiles': monster_image_tiles,
        'explore_tiles': explore_tiles,
    }[tile_renderer]

    return HttpResponse(
        tile_renderer(context, posts_or_tiles, render_options, category))
Esempio n. 5
0
def landing(request, **kwargs):
    category = Category.get(name=MONSTER_GROUP)
    sort = 'new'
    kwargs['offset'] = request.GET.get('offset', 0)
    show_pins = False

    nav = browse.Navigation.load_json_or_404(
        kwargs,
        sort=sort,
        category=category,
        mobile=request.is_mobile,
        replies_only=True,
        public_only=True,
    )

    front_data = {
        'tiles': browse.get_browse_tiles(request.user, nav),
        'render_options': tile_render_options(sort, show_pins),
    }

    # Overrides the default nav category that gets set in a context processor.
    request.nav_category = category

    sort_types = []
    if sort in ['active', 'new']:
        sort_types.extend([
            ('active threads', '/x/%s/active' % category.name),
            ('new posts', '/x/%s/new' % category.name)
        ])
        active_sort_url = '/x/%s/%s' % (category.name, sort)

    nav_data = nav.dump_json()

    front_data.update(locals())
    front_data['nav_category'] = category.details()
    front_data['DOMAIN'] = settings.DOMAIN

    return r2r_jinja('monster/landing.html', front_data)
Esempio n. 6
0
def front_comments_view(request, sort, category=None, tag=None, homepage=False, **kwargs):
    # category here should always be a first-class Category object.
    if not isinstance(category, CategoryMixin) and tag is None:
        raise Http404()

    user = request.user

    show_pins = request.user.is_authenticated()

    if not request.user.is_authenticated() and sort == 'hot' and category == Category.ALL:
        sort_type = request.GET.get('hot_sort_type', 'order_by_time_plus_log_stickers_and_replies')
        if sort_type != 'control':
            kwargs['hot_sort_type'] = sort_type

    kwargs['offset'] = request.GET.get('offset', 0)

    nav = browse.Navigation.load_json_or_404(
        kwargs,
        sort=sort,
        category=category,
        tag=tag,
        mobile=request.is_mobile,
    )

    front_data = {
        'tiles':          browse.get_browse_tiles(request.user, nav),
        'render_options': tile_render_options(sort, show_pins),
        'viewer_is_following_tag': tag and Tag(tag).user_is_following(request.user)
    }

    #TODO delete once we've resolved the missing small_image issue.
    for tile in front_data['tiles']:
        if hasattr(tile, 'check_for_small_image'):
            tile.check_for_small_image(request)

    # Overrides the default nav category that gets set in a context processor.
    if category is not None:
        request.nav_category = category

    if tag is not None:
        request.nav_tag = tag
        popular_tag_link = "/x/{}".format(tag)
        latest_tag_link = "/x/{}/new".format(tag)
        best_tag_link = "/x/{}/best".format(tag)
    else:
        popular_tag_link = "/x/everything"
        latest_tag_link = "/x/everything/new"
        best_tag_link = "/x/everything/best"

    timeperiods = []
    if sort =='top' and category is not None:
        timeperiods = top_timeperiod_urls(category.name)
        active_period_url = top_url(category.name, kwargs.get('year'), kwargs.get('month'), kwargs.get('day'))

    sort_types = []
    if category is not None:
        if sort in ["active", "new"]:
            sort_types.extend([
                ('active threads', '/x/%s/active' % category.name),
                ('new posts', '/x/%s/new' % category.name)
            ])
            active_sort_url = '/x/%s/%s' % (category.name, sort)

    nav_data = nav.dump_json()

    front_data.update(locals())

    if request.is_mobile:
        return r2r_jinja("mobile/browse.html", front_data)

    return r2r_jinja("comment/explore.html", front_data)