Exemple #1
0
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
        })
Exemple #2
0
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())
Exemple #3
0
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
    })
Exemple #4
0
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())
Exemple #5
0
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'))
Exemple #6
0
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())
Exemple #7
0
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())
Exemple #8
0
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
Exemple #9
0
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 })
Exemple #10
0
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})
Exemple #11
0
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'))
Exemple #12
0
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())
Exemple #13
0
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())
Exemple #14
0
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
Exemple #15
0
 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]
Exemple #16
0
 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')
Exemple #17
0
def sitemap_xml(request):    
    posts = Post.users_posts(0, 1000, True)
            
    return render_to_response('app/sitemap.xml', locals(), mimetype='application/xml')
Exemple #18
0
def sitemap_xml(request):
    posts = Post.users_posts(0, 1000, True)

    return render_to_response('app/sitemap.xml',
                              locals(),
                              mimetype='application/xml')
Exemple #19
0
 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]
Exemple #20
0
 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')