def submit_text_post(request): """ Save a new text post from user to database """ error = None if request.method == 'POST': form = SubmitTextPost(request.POST) if form.is_valid(): try: data = form.cleaned_data post = Post.submit_post(request.app_user, data['title'], data['tags'], description=data['description']) return HttpResponseRedirect( reverse('app_post', args=[post.post_id, post.slug])) except TangleOnError as e: error = e.message else: form = SubmitTextPost(initial={'tags': request.GET.get('tags', None)}) top_tags = Tag.top_tags() return render_response( request, 'app/submit_text_post.html', { 'form': form, 'error': error, 'markdown_help_text': MARK_DOWN_TEXT, 'top_tags': top_tags })
def tag_posts(request, tag_name, by_new=False, page_index=0): """ Display posts were tag found in title or tags field """ source = { 'title': tag_name, 'absolute_url': reverse('app_tag', args=[tag_name]), 'absolute_url_by_new': reverse('app_tag_new', args=[tag_name]), 'active': 'new' if by_new else 'top' } posts = Post.tag_posts(tag_name, int(page_index), settings.PAGE_SIZE, by_new, request.app_user) try: tag = Tag.objects.get(name__iexact=tag_name) pin = None if request.app_user.is_anonymous() else Pin.objects.get( user=request.app_user, tag=tag) except Tag.DoesNotExist: tag = {'name': tag_name, 'pin_count': 0} pin = None except Pin.DoesNotExist: pin = None top_tags = Tag.top_tags() prev_url, next_url = paginated_url(request.resolver_match.url_name, posts, [tag_name, page_index]) return render_response(request, 'app/tag.html', locals())
def submit_link_post(request): """ Save a new link post from user to database """ error = None if request.method == 'POST': form = SubmitLinkPost(request.POST) if form.is_valid(): try: data = form.cleaned_data post = Post.submit_post(request.app_user, data['title'], data['tags'], data['url']) return HttpResponseRedirect( reverse('app_post', args=[post.post_id, post.slug])) except TangleOnError as e: error = e.message else: form = SubmitLinkPost( initial={ 'url': request.GET.get('url', None), 'title': request.GET.get('title', None), 'tags': request.GET.get('tags', None) }) top_tags = Tag.top_tags() return render_response(request, 'app/submit_link_post.html', { 'form': form, 'error': error, 'top_tags': top_tags })
def read_post(request, post_id, slug, comment_id=None): """ Display post and its comments """ try: try: max_comments = 200 if int(request.GET.get( 'limit', 200)) > 200 else request.GET.get('limit', 200) except: max_comments = 200 if request.app_user.is_authenticated() and 'message_id' in request.GET: Message.mark_read(request.GET['message_id'], request.app_user, False) post_id = long(post_id) comment_id = long(comment_id) if comment_id else None post = Post.read_post(post_id, slug, request.app_user, comment_id, max_comments) except Post.DoesNotExist: raise Http404() markdown_help_text = MARK_DOWN_TEXT return render_response(request, 'app/post.html', locals())
def search(request, by_new=False, page_index=0): """ Search for query text in title and tags fields of post """ q = request.REQUEST.get('q', None) if q: channels_q = Channel.objects.filter(title__iexact=q)[:1] if channels_q: return HttpResponseRedirect(reverse('app_channel', args=[channels_q[0].channel_id])) tags_q = Tag.objects.filter(name__iexact=q)[:1] if tags_q: return HttpResponseRedirect(reverse('app_tag', args=[tags_q[0].name])) users_q = User.objects.filter(username__iexact=q)[:1] if users_q: return HttpResponseRedirect(reverse('app_user', args=[users_q[0].username])) params = { 'q': q.encode('utf-8')} query = '?' + urllib.urlencode(params) source = {'title': q, 'absolute_url': reverse('app_search') + query, 'absolute_url_by_new': reverse('app_search_new') + query, 'active': 'new' if by_new else 'top'} posts = Post.tag_posts(q, int(page_index), settings.PAGE_SIZE, by_new, request.app_user) top_tags = Tag.top_tags() top_channels = Channel.top_channels() prev_url, next_url = paginated_url(request.resolver_match.url_name, posts, [page_index], params) return render_response(request, 'app/search.html', locals()) return HttpResponseRedirect(reverse('app_index'))
def rate_post(request, post_id, slug, comment_id=None): """ Display post web page and rating bar """ try: post_id = long(post_id) post = Post.read_post(post_id, slug, request.app_user, max_comments=0) if post.is_text_post(): return HttpResponsePermanentRedirect(post.get_absolute_url()) except Post.DoesNotExist: raise Http404() return render_response(request, 'app/rate_post.html', locals())
def index(request, by_new=False, page_index=0): """ Display hot or new posts of all channels and users """ now = datetime.datetime.now() page_index = int(page_index) source = {'title': 'All', 'absolute_url': reverse('app_index'), 'absolute_url_by_new': reverse('app_index_new'), 'active': 'new' if by_new else 'top'} posts = Post.get_posts(int(page_index), settings.PAGE_SIZE, by_new, request.app_user) top_tags = Tag.top_tags() top_channels = Channel.top_channels() prev_url, next_url = paginated_url(request.resolver_match.url_name, posts, [page_index]) response = render_response(request, 'app/index.html', locals()) return response
def submit_text_post(request): """ Save a new text post from user to database """ error = None if request.method == 'POST': form = SubmitTextPost(request.POST) if form.is_valid(): try: data = form.cleaned_data post = Post.submit_post(request.app_user, data['title'], data['tags'], description=data['description']) return HttpResponseRedirect(reverse('app_post', args=[post.post_id, post.slug])) except TangleOnError as e: error = e.message else: form = SubmitTextPost(initial={'tags': request.GET.get('tags', None)}) top_tags = Tag.top_tags() return render_response(request, 'app/submit_text_post.html', {'form': form, 'error': error, 'markdown_help_text': MARK_DOWN_TEXT, 'top_tags': top_tags })
def submit_link_post(request): """ Save a new link post from user to database """ error = None if request.method == 'POST': form = SubmitLinkPost(request.POST) if form.is_valid(): try: data = form.cleaned_data post = Post.submit_post(request.app_user, data['title'], data['tags'], data['url']) return HttpResponseRedirect(reverse('app_post', args=[post.post_id, post.slug])) except TangleOnError as e: error = e.message else: form = SubmitLinkPost(initial={'url': request.GET.get('url', None), 'title': request.GET.get('title', None), 'tags': request.GET.get('tags', None)}) top_tags = Tag.top_tags() return render_response(request, 'app/submit_link_post.html', {'form': form, 'error': error, 'top_tags': top_tags})
def search(request, by_new=False, page_index=0): """ Search for query text in title and tags fields of post """ q = request.REQUEST.get('q', None) if q: channels_q = Channel.objects.filter(title__iexact=q)[:1] if channels_q: return HttpResponseRedirect( reverse('app_channel', args=[channels_q[0].channel_id])) tags_q = Tag.objects.filter(name__iexact=q)[:1] if tags_q: return HttpResponseRedirect( reverse('app_tag', args=[tags_q[0].name])) users_q = User.objects.filter(username__iexact=q)[:1] if users_q: return HttpResponseRedirect( reverse('app_user', args=[users_q[0].username])) params = {'q': q.encode('utf-8')} query = '?' + urllib.urlencode(params) source = { 'title': q, 'absolute_url': reverse('app_search') + query, 'absolute_url_by_new': reverse('app_search_new') + query, 'active': 'new' if by_new else 'top' } posts = Post.tag_posts(q, int(page_index), settings.PAGE_SIZE, by_new, request.app_user) top_tags = Tag.top_tags() top_channels = Channel.top_channels() prev_url, next_url = paginated_url(request.resolver_match.url_name, posts, [page_index], params) return render_response(request, 'app/search.html', locals()) return HttpResponseRedirect(reverse('app_index'))
def read_post(request, post_id, slug, comment_id=None): """ Display post and its comments """ try: try: max_comments = 200 if int(request.GET.get('limit', 200)) > 200 else request.GET.get('limit', 200) except: max_comments = 200 if request.app_user.is_authenticated() and 'message_id' in request.GET: Message.mark_read(request.GET['message_id'], request.app_user, False) post_id = long(post_id) comment_id = long(comment_id) if comment_id else None post = Post.read_post(post_id, slug, request.app_user, comment_id, max_comments) except Post.DoesNotExist: raise Http404() markdown_help_text = MARK_DOWN_TEXT return render_response(request, 'app/post.html', locals())
def tag_posts(request, tag_name, by_new=False, page_index=0): """ Display posts were tag found in title or tags field """ source = {'title': tag_name, 'absolute_url': reverse('app_tag', args=[tag_name]), 'absolute_url_by_new': reverse('app_tag_new', args=[tag_name]), 'active': 'new' if by_new else 'top'} posts = Post.tag_posts(tag_name, int(page_index), settings.PAGE_SIZE, by_new, request.app_user) try: tag = Tag.objects.get(name__iexact=tag_name) pin = None if request.app_user.is_anonymous() else Pin.objects.get(user=request.app_user, tag=tag) except Tag.DoesNotExist: tag = {'name': tag_name, 'pin_count': 0 } pin = None except Pin.DoesNotExist: pin = None top_tags = Tag.top_tags() prev_url, next_url = paginated_url(request.resolver_match.url_name, posts, [tag_name, page_index]) return render_response(request, 'app/tag.html', locals())
def index(request, by_new=False, page_index=0): """ Display hot or new posts of all channels and users """ now = datetime.datetime.now() page_index = int(page_index) source = { 'title': 'All', 'absolute_url': reverse('app_index'), 'absolute_url_by_new': reverse('app_index_new'), 'active': 'new' if by_new else 'top' } posts = Post.get_posts(int(page_index), settings.PAGE_SIZE, by_new, request.app_user) top_tags = Tag.top_tags() top_channels = Channel.top_channels() prev_url, next_url = paginated_url(request.resolver_match.url_name, posts, [page_index]) response = render_response(request, 'app/index.html', locals()) return response
def items(self, channel): return [post for post in Post.tag_posts(channel.title, 0, 50, channel.by_new, channel.request.app_user) if post.img_url][:30]
def items(self, channel): return Post.get_posts( 0, MAX_FEEDS, channel.by_new, channel.request.app_user, channel.request.GET.get('text_posts', 'true').lower() == 'true')
def sitemap_xml(request): posts = Post.users_posts(0, 1000, True) return render_to_response('app/sitemap.xml', locals(), mimetype='application/xml')
def items(self, channel): return [ post for post in Post.tag_posts( channel.title, 0, 50, channel.by_new, channel.request.app_user) if post.img_url ][:30]
def items(self, channel): return Post.get_posts(0, MAX_FEEDS, channel.by_new, channel.request.app_user, channel.request.GET.get('text_posts', 'true').lower() == 'true')