diff options
author | eliott <eliott@cactuswax.net> | 2007-11-03 08:45:10 +0100 |
---|---|---|
committer | eliott <eliott@cactuswax.net> | 2007-11-03 08:45:10 +0100 |
commit | 39a548fd2629f3b6383990264b2e331b3aea99fb (patch) | |
tree | f68c3156dad5f7814473ceff2461679ddf11a2e8 /news | |
download | archweb-39a548fd2629f3b6383990264b2e331b3aea99fb.tar.gz archweb-39a548fd2629f3b6383990264b2e331b3aea99fb.tar.xz |
Initial import for public release...
Special Note
Prior to git import, approx 90% of the code was done by Judd Vinet. Thanks Judd!
Diffstat (limited to 'news')
-rw-r--r-- | news/__init__.py | 0 | ||||
-rw-r--r-- | news/models.py | 19 | ||||
-rw-r--r-- | news/views.py | 82 |
3 files changed, 101 insertions, 0 deletions
diff --git a/news/__init__.py b/news/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/news/__init__.py diff --git a/news/models.py b/news/models.py new file mode 100644 index 0000000..acd9667 --- /dev/null +++ b/news/models.py @@ -0,0 +1,19 @@ +from django.db import models +from django.contrib.auth.models import User +import re +from archlinux.utils import Stripper + +class News(models.Model): + id = models.AutoField(primary_key=True) + author = models.ForeignKey(User) + postdate = models.DateField(auto_now_add=True) + title = models.CharField(maxlength=255) + content = models.TextField() + class Meta: + db_table = 'news' + verbose_name_plural = 'news' + get_latest_by = 'postdate' + ordering = ['-postdate', '-id'] + + def get_absolute_url(self): + return '/news/%i/' % self.id diff --git a/news/views.py b/news/views.py new file mode 100644 index 0000000..29f2044 --- /dev/null +++ b/news/views.py @@ -0,0 +1,82 @@ +from django.http import HttpResponse, HttpResponseRedirect, Http404 +from django.shortcuts import get_object_or_404 +from django.contrib.auth.decorators import user_passes_test +from django.contrib.auth.models import User +from django import forms +from archlinux.utils import render_template +from archlinux.news.models import News +from datetime import date + +def view(request, newsid): + news = get_object_or_404(News, id=newsid) + return render_template('news/view.html', request, {'news':news}) + +def list(request): + news = News.objects.order_by('-postdate', '-id') + return render_template('news/list.html', request, {'news':news}) + +@user_passes_test(lambda u: u.has_perm('news.add_news')) +def add(request): + try: + m = User.objects.get(username=request.user.username) + except User.DoesNotExist: + return render_template('error_page.html', request, + {'errmsg': 'Cannot find a maintainer record for you! No posting allowed.'}) + + manipulator = News.AddManipulator() + if request.POST: + data = request.POST.copy() + # add in the author ID + data['author'] = m.id + errors = manipulator.get_validation_errors(data) + if not errors: + manipulator.do_html2python(data) + manipulator.save(data) + return HttpResponseRedirect('/news/') + else: + errors = {} + data = {} + + form = forms.FormWrapper(manipulator, data, errors) + return render_template('news/add.html', request, {'form': form}) + +@user_passes_test(lambda u: u.has_perm('news.delete_news')) +def delete(request, newsid): + news = get_object_or_404(News, id=newsid) + #if news.author.id != request.user.id: + # return render_template('error_page.html', request, {'errmsg': 'You do not own this news item'}) + if request.POST: + news.delete() + return HttpResponseRedirect('/news/') + return render_template('news/delete.html', request) + +@user_passes_test(lambda u: u.has_perm('news.change_news')) +def edit(request, newsid): + try: + m = User.objects.get(username=request.user.username) + except User.DoesNotExist: + return render_template('error_page.html', request, + {'errmsg': 'Cannot find a maintainer record for you! No posting allowed.'}) + try: + manipulator = News.ChangeManipulator(newsid) + except News.DoesNotExist: + raise Http404 + + news = manipulator.original_object +# if news.author != m: +# return render_template('error_page.html', request, {'errmsg': 'You do not own this news item'}) + if request.POST: + data = request.POST.copy() + # add in the author ID + data['author'] = news.author.id + errors = manipulator.get_validation_errors(data) + if not errors: + manipulator.do_html2python(data) + manipulator.save(data) + return HttpResponseRedirect('/news/') + else: + errors = {} + data = news.__dict__ + + form = forms.FormWrapper(manipulator, data, errors) + return render_template('news/add.html', request, {'form': form, 'news':news}) |