Exemple #1
0
def entry_detail(request, date=None, slug=None, permalink=None):
    """Display one entry with the given slug and date.
    """
    if permalink:
        try:
            entry = EntryType.objects(permalink=permalink)[0]
        except IndexError:
            raise Http404
    else:
        try:
            today = datetime.strptime(date, "%Y/%b/%d")
            tomorrow = today + timedelta(days=1)
        except:
            raise Http404

        try:
            entry = EntryType.objects(publish_date__gte=today, 
                                      publish_date__lt=tomorrow, slug=slug)[0]
        except IndexError:
            raise Http404

    # Select correct form for entry type
    form_class = Comment.CommentForm

    if request.method == 'POST':
        form = form_class(request.user, request.POST)
        if form.is_valid():
            # Get necessary post data from the form
            comment = HtmlComment(**form.cleaned_data)
            if request.user.is_authenticated():
                comment.is_admin = True
            # Update entry with comment
            q = EntryType.objects(id=entry.id)
            comment.rendered_content = markup(comment.body, escape=True,
                                              small_headings=True)
            q.update(push__comments=comment)

            return HttpResponseRedirect(entry.get_absolute_url()+'#comments')
    else:
        form = form_class(request.user)

    # Check for comment expiry
    comments_expired = False
    if entry.comments_expiry_date:
        if entry.comments_expiry_date < datetime.now():
            comments_expired = True

    context = {
        'entry': entry,
        'form': form,
        'comments_expired': comments_expired,
    }
    return render_to_response(_lookup_template('entry_detail'), context,
                              context_instance=RequestContext(request))
Exemple #2
0
def entry_detail(request, date, slug):
    """Display one entry with the given slug and date.
    """
    try:
        today = datetime.strptime(date, "%Y/%b/%d")
        tomorrow = today + timedelta(days=1)
    except:
        raise Http404

    try:
        entry = EntryType.objects(publish_date__gte=today,
                                  publish_date__lt=tomorrow,
                                  slug=slug)[0]
    except IndexError:
        raise Http404

    # Select correct form for entry type
    form_class = Comment.CommentForm

    if request.method == 'POST':
        form = form_class(request.user, request.POST)
        if form.is_valid():
            # Get necessary post data from the form
            comment = HtmlComment(**form.cleaned_data)
            if request.user.is_authenticated():
                comment.is_admin = True
            # Update entry with comment
            q = EntryType.objects(id=entry.id)
            comment.rendered_content = markup(comment.body,
                                              escape=True,
                                              small_headings=True)
            q.update(push__comments=comment)

            return HttpResponseRedirect(entry.get_absolute_url() + '#comments')
    else:
        form = form_class(request.user)

    # Check for comment expiry
    comments_expired = False
    if entry.comments_expiry_date:
        if entry.comments_expiry_date < datetime.now():
            comments_expired = True

    context = {
        'entry': entry,
        'form': form,
        'comments_expired': comments_expired,
    }
    return render_to_response(_lookup_template('entry_detail'),
                              context,
                              context_instance=RequestContext(request))
Exemple #3
0
def delete_comment(request):
    """Delete a comment from the database.
    """
    comment_id = request.POST.get("comment_id", None)
    if request.method == "POST" and comment_id:
        # Delete matching comment from entry
        entry = EntryType.objects(comments__id=comment_id).first()
        if entry:
            entry.comments = [c for c in entry.comments if c.id != comment_id]
            entry.save()
        return HttpResponseRedirect(entry.get_absolute_url() + "#comments")
    return HttpResponseRedirect(reverse("recent-entries"))
Exemple #4
0
def delete_comment(request):
    """Delete a comment from the database.
    """
    comment_id = request.POST.get('comment_id', None)
    if request.method == 'POST' and comment_id:
        # Delete matching comment from entry
        entry = EntryType.objects(comments__id=comment_id).first()
        if entry:
            entry.comments = [c for c in entry.comments if c.id != comment_id]
            entry.save()
        return HttpResponseRedirect(entry.get_absolute_url() + '#comments')
    return HttpResponseRedirect(reverse('recent-entries'))
Exemple #5
0
def index(request):
    num = 5
    entry_list = list(EntryType.live_entries())
    
    entry_list = sorted(entry_list, lambda e1, e2: cmp(e2.publish_date, e1.publish_date))
    paginator = Paginator(entry_list, num)
    try:
        entries = paginator.page(1)
    except (EmptyPage, InvalidPage):
        entries = paginator.page(paginator.num_pages)
    context = {
        'title': 'Recent Entries',
        'entries': entries,
        'no_entries_messages': NO_ENTRIES_MESSAGES,
    }
    return render_to_response(_lookup_template('index'), context, context_instance=RequestContext(request))
Exemple #6
0
def delete_comment(request):
    """Delete a comment from the database.
    """
    comment_id = request.POST.get('comment_id', None)
    try:
        comment_id = ObjectId(comment_id)
    except InvalidId:
        comment_Id = False

    if request.method == 'POST' and comment_id:
        # Delete matching comment from entry
        entry = EntryType.objects(comments__id=comment_id).first()
        if entry:
            entry.comments = [c for c in entry.comments if c.id != comment_id]
            entry.save()
            return HttpResponseRedirect(entry.get_absolute_url()+'#comments')
    return HttpResponseRedirect(reverse('recent-entries'))
Exemple #7
0
def recent_entries(request, page_number=1):
    """Show the [n] most recent entries.
    """
    num = getattr(settings, 'MUMBLR_NUM_ENTRIES_PER_PAGE', 10)
    entry_list = EntryType.live_entries()
    paginator = Paginator(entry_list, num)
    try:
        entries = paginator.page(page_number)
    except (EmptyPage, InvalidPage):
        entries = paginator.page(paginator.num_pages)
    context = {
        'title': 'Recent Entries',
        'entries': entries,
        'no_entries_messages': NO_ENTRIES_MESSAGES,
    }
    return render_to_response(_lookup_template('list_entries'), context,
                              context_instance=RequestContext(request))
Exemple #8
0
def tagged_entries(request, tag=None, page_number=1):
    """Show a list of all entries with the given tag.
    """
    tag = tag.strip().lower()
    num = getattr(settings, 'MUMBLR_NUM_ENTRIES_PER_PAGE', 10)
    entry_list = EntryType.live_entries(tags=tag)
    paginator = Paginator(entry_list, num)
    try:
        entries = paginator.page(page_number)
    except (EmptyPage, InvalidPage):
        entries = paginator.page(paginator.num_pages)
    context = {
        'title': 'Entries Tagged "%s"' % tag,
        'entries': entries,
        'no_entries_messages': NO_ENTRIES_MESSAGES,
    }
    return render_to_response(_lookup_template('list_entries'), context,
                              context_instance=RequestContext(request))
Exemple #9
0
def recent_entries(request, page_number=1):
    """Show the [n] most recent entries.
    """
    num = getattr(settings, 'MUMBLR_NUM_ENTRIES_PER_PAGE', 10)
    entry_list = EntryType.live_entries()
    paginator = Paginator(entry_list, num)
    try:
        entries = paginator.page(page_number)
    except (EmptyPage, InvalidPage):
        entries = paginator.page(paginator.num_pages)
    context = {
        'title': 'Recent Entries',
        'entries': entries,
        'no_entries_messages': NO_ENTRIES_MESSAGES,
    }
    return render_to_response(_lookup_template('list_entries'),
                              context,
                              context_instance=RequestContext(request))
Exemple #10
0
def tagged_entries(request, tag=None, page_number=1):
    """Show a list of all entries with the given tag.
    """
    tag = tag.strip().lower()
    num = getattr(settings, 'MUMBLR_NUM_ENTRIES_PER_PAGE', 10)
    entry_list = EntryType.live_entries(tags=tag)
    paginator = Paginator(entry_list, num)
    try:
        entries = paginator.page(page_number)
    except (EmptyPage, InvalidPage):
        entries = paginator.page(paginator.num_pages)
    context = {
        'title': 'Entries Tagged "%s"' % tag,
        'entries': entries,
        'no_entries_messages': NO_ENTRIES_MESSAGES,
    }
    return render_to_response(_lookup_template('list_entries'),
                              context,
                              context_instance=RequestContext(request))
 def render(self, context):
     context[self.var_name] = list(EntryType.live_entries()[:self.num])
     return ''
Exemple #12
0
    embed_patterns = (
        ("youtube", r"youtube\.com\/watch\?v=([A-Za-z0-9._%-]+)[&\w;=\+_\-]*"),
        ("vimeo", r"vimeo\.com\/(\d+)"),
    )

    def rendered_content(self):
        video_url = self.video_url
        for source, pattern in VideoEntry.embed_patterns:
            id = re.findall(pattern, video_url)
            if id:
                embed = VideoEntry.embed_codes[source]
                html = embed.replace("{{!ID}}", id[0])
                break
        else:
            html = 'Video: <a href="video_url">%s</a>' % video_url

        if self.description:
            html += markup(self.description)
        return html

    class AdminForm(EntryType.AdminForm):
        video_url = forms.URLField()
        description = forms.CharField(widget=forms.Textarea, required=False)


EntryType.register(TextEntry)
EntryType.register(LinkEntry)
EntryType.register(ImageEntry)
EntryType.register(VideoEntry)
Exemple #13
0
    embed_patterns = (
        ('youtube', r'youtube\.com\/watch\?v=([A-Za-z0-9._%-]+)[&\w;=\+_\-]*'),
        ('vimeo', r'vimeo\.com\/(\d+)'),
    )

    def rendered_content(self):
        video_url = self.video_url
        for source, pattern in VideoEntry.embed_patterns:
            id = re.findall(pattern, video_url)
            if id:
                embed = VideoEntry.embed_codes[source]
                html = embed.replace('{{!ID}}', id[0])
                break
        else:
            html = 'Video: <a href="video_url">%s</a>' % video_url

        if self.description:
            html += markup(self.description)
        return html

    class AdminForm(EntryType.AdminForm):
        video_url = forms.URLField()
        description = forms.CharField(widget=forms.Textarea, required=False)


EntryType.register(TextEntry)
EntryType.register(LinkEntry)
EntryType.register(ImageEntry)
EntryType.register(VideoEntry)
 def render(self, context):
     context[self.var_name] = list(EntryType.live_entries()[:self.num])
     return ''