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())
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())
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))
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))
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)
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)