diff --git a/comments/__init__.py b/comments/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/comments/forms.py b/comments/forms.py new file mode 100644 index 0000000..0faa9e7 --- /dev/null +++ b/comments/forms.py @@ -0,0 +1,10 @@ +import django.newforms as forms +from django.utils.translation import ugettext as _ +from models import Comment + +class CommentForm(forms.ModelForm): + title = forms.CharField(required=False,label=_("Title")) + class Meta: + model = Comment + exclude = ("created","author","object_id","object_type") + diff --git a/comments/models.py b/comments/models.py new file mode 100644 index 0000000..b2c593c --- /dev/null +++ b/comments/models.py @@ -0,0 +1,20 @@ +from django.db import models +from django.contrib.auth.models import User +from django.utils.translation import ugettext_lazy as _ + +class Comment(models.Model): + author = models.ForeignKey(User) + created = models.DateTimeField() + object_id = models.IntegerField() + object_type = models.CharField(max_length=10) + title = models.CharField(max_length=64,null=True,verbose_name=_("Title")) + text = models.TextField(_("Text")) + class Admin: + pass + def __unicode__(self): + return self.title + class Meta: + verbose_name = _("Comment") + verbose_name_plural = _("Comments") + ordering = ("created",) + diff --git a/comments/utils.py b/comments/utils.py new file mode 100644 index 0000000..e9896ab --- /dev/null +++ b/comments/utils.py @@ -0,0 +1,52 @@ +from datetime import datetime +from django.conf import settings +from django.http import HttpResponseRedirect +from django.core.paginator import Paginator +from models import Comment +from forms import CommentForm + +def get_comments(request,id,type): + """Return a list of comments on one page (specified in the request), for given object.""" + + all = Comment.objects.filter(object_id=id, object_type=type) + pg = Paginator(all,settings.COMMENTS_PER_PAGE) + page_num = int(request.GET.get('page',1)) + page = pg.page(page_num) + range = pg.page_range + if range == [1]: + range = None + return page_num,range, page.object_list + +def get_comment_url(comment): + """Return URL for given Comment object.""" + + type = comment.object_type + id = comment.object_id + if type=='Project': + return settings.BASE_URL+"/projects/%s/#comment-%s" % (id,comment.id) + if type=='Bug': + return settings.BASE_URL+"/bugs/%s/#comment-%s" % (id,comment.id) + if type=='Document': + return settings.BASE_URL+"/docs/%d/#comment-%s" % (id,comment.id) + if type=='Request': + return settings.BASE_URL+"/requests/%d/#comment-%s" % (id,comment.id) + +def post_comment(request,type,id,redirect_to): + """Try post the comment, containing in request.POST, + for object with given `type' and `id'. + If success, return (True, HttpResponseRedirect(redirect_to)), + else return (False, form), where `form' is form with errors.""" + + form = CommentForm(request.POST) + if form.is_valid(): + c = form.save(commit=False) + if 'title' not in form.cleaned_data or not form.cleaned_data['title']: + c.title = form.cleaned_data['text'][:20]+'...' + c.author = request.user + c.object_id = id + c.object_type = type + c.created = datetime.now() + c.save() + return True, HttpResponseRedirect(redirect_to) + else: + return False,form diff --git a/comments/views.py b/comments/views.py new file mode 100644 index 0000000..60f00ef --- /dev/null +++ b/comments/views.py @@ -0,0 +1 @@ +# Create your views here. diff --git a/hms/modules/last_comments.py b/hms/modules/last_comments.py index a5e1bdc..6b5d0b2 100644 --- a/hms/modules/last_comments.py +++ b/hms/modules/last_comments.py @@ -2,18 +2,18 @@ def init(): - from mgmt.models import Comment - import mgmt.utils + from comments.models import Comment + import comments.utils @block def last_comments(): def short_comment(comment): - return u"<li><a href='%s'>%s</a></li>" % (mgmt.utils.get_comment_url(comment),comment.title) + return u"<li><a href='%s'>%s</a></li>" % (comments.utils.get_comment_url(comment),comment.title) b = Block() b.name='last_comments' b.title = u"Последние комментарии" - comments = Comment.objects.order_by('-created')[:10] - b.content = "<ul>\n" + "\n".join(map(short_comment,comments)) + "\n</ul>\n" + cs = Comment.objects.order_by('-created')[:10] + b.content = "<ul>\n" + "\n".join(map(short_comment,cs)) + "\n</ul>\n" return b diff --git a/mgmt/bugs_views.py b/mgmt/bugs_views.py index 6b5a6f7..1a34132 100644 --- a/mgmt/bugs_views.py +++ b/mgmt/bugs_views.py @@ -3,11 +3,13 @@ from django.core.urlresolvers import reverse from django.conf import settings import django.newforms as djangoforms from django.newforms.util import ValidationError +from comments.forms import CommentForm +from comments.utils import get_comments,post_comment from decorators import check_auth,login_required,render_to -from utils import get_bugs,get_comments,post_comment +from utils import get_bugs from models import * from rights import can,possible_changes -from forms import BugForm,BugPriorityForm,BugComplexityForm,CommentForm +from forms import BugForm,BugPriorityForm,BugComplexityForm @login_required @render_to('bug_report.html') diff --git a/mgmt/documents_views.py b/mgmt/documents_views.py index 538f28a..d8148bf 100644 --- a/mgmt/documents_views.py +++ b/mgmt/documents_views.py @@ -2,10 +2,11 @@ from datetime import datetime from django.http import HttpResponseRedirect from django.core.urlresolvers import reverse from decorators import check_auth,login_required,render_to -from utils import get_comments,post_comment +from comments.forms import CommentForm +from comments.utils import get_comments,post_comment from models import * from rights import can -from forms import CommentForm,DocForm +from forms import DocForm @check_auth(Project,'view') @render_to('project_docs.html') diff --git a/mgmt/forms.py b/mgmt/forms.py index 0e4cf27..cf515a5 100644 --- a/mgmt/forms.py +++ b/mgmt/forms.py @@ -10,12 +10,6 @@ from models import * # Forms ############ -class CommentForm(forms.ModelForm): - title = forms.CharField(required=False,label=_("Title")) - class Meta: - model = Comment - exclude = ("created","author","object_id","object_type") - class BugForm(forms.ModelForm): class Meta: model = Bug diff --git a/mgmt/models.py b/mgmt/models.py index dd3a604..01ba571 100644 --- a/mgmt/models.py +++ b/mgmt/models.py @@ -6,8 +6,6 @@ from django.conf import settings from django.contrib.auth.models import User from django.utils.translation import ugettext_lazy as _ from django.utils.translation import activate -# activate(settings.LANGUAGE_CODE) -# _ = lambda s: s class Object(models.Model): "Base abstract model." @@ -121,22 +119,6 @@ class Document(Object): class Admin: pass -class Comment(models.Model): - author = models.ForeignKey(User) - created = models.DateTimeField() - object_id = models.IntegerField() - object_type = models.CharField(max_length=10) - title = models.CharField(max_length=64,null=True,verbose_name=_("Title")) - text = models.TextField(_("Text")) - class Admin: - pass - def __unicode__(self): - return self.title - class Meta: - verbose_name = _("Comment") - verbose_name_plural = _("Comments") - ordering = ("created",) - class PrivateMsg(Object): author = models.ForeignKey(User,related_name='sended_messages',verbose_name=_("Author")) reciever = models.ForeignKey(User,related_name='recieved_messages',verbose_name=_("To")) diff --git a/mgmt/project_views.py b/mgmt/project_views.py index f6b5d8b..baa31a3 100644 --- a/mgmt/project_views.py +++ b/mgmt/project_views.py @@ -1,10 +1,11 @@ from django.conf import settings from django.core.urlresolvers import reverse from decorators import check_auth,login_required,render_to -from utils import get_comments,get_bugs,post_comment +from utils import get_bugs +from comments.forms import CommentForm +from comments.utils import get_comments,post_comment from models import * from rights import can -from forms import CommentForm @check_auth(Project,'view') @render_to('project.html') diff --git a/mgmt/requests_views.py b/mgmt/requests_views.py index 817c818..a6998c0 100644 --- a/mgmt/requests_views.py +++ b/mgmt/requests_views.py @@ -2,10 +2,11 @@ from datetime import datetime from django.http import HttpResponseForbidden,HttpResponseRedirect from django.core.urlresolvers import reverse from decorators import check_auth,login_required,render_to -from utils import get_comments,post_comment from models import * from rights import can -from forms import RequestForm,RequestStateForm,CommentForm +from forms import RequestForm,RequestStateForm +from comments.forms import CommentForm +from comments.utils import get_comments,post_comment @render_to('requests.html') def requests(request,pid): diff --git a/mgmt/utils.py b/mgmt/utils.py index 56db47c..927ab4a 100644 --- a/mgmt/utils.py +++ b/mgmt/utils.py @@ -7,7 +7,6 @@ from django.conf import settings from context import * from models import * -from forms import CommentForm ############# # Utilites @@ -25,18 +24,6 @@ def render_rss(template,dict,request): t = get_template(template) return HttpResponse(t.render(c),mimetype='application/xml') -def get_comments(request,id,type): - """Return a list of comments on one page (specified in the request), for given object.""" - - all = Comment.objects.filter(object_id=id, object_type=type) - pg = Paginator(all,settings.COMMENTS_PER_PAGE) - page_num = int(request.GET.get('page',1)) - page = pg.page(page_num) - range = pg.page_range - if range == [1]: - range = None - return page_num,range, page.object_list - def get_bugs(request,pid=None): """Return a list of bugs on one page (specified in the request), for given project.""" @@ -52,36 +39,3 @@ def get_bugs(request,pid=None): range = None return page_num,range, page.object_list -def get_comment_url(comment): - """Return URL for given Comment object.""" - - type = comment.object_type - id = comment.object_id - if type=='Project': - return settings.BASE_URL+"/projects/%s/#comment-%s" % (id,comment.id) - if type=='Bug': - return settings.BASE_URL+"/bugs/%s/#comment-%s" % (id,comment.id) - if type=='Document': - return settings.BASE_URL+"/docs/%d/#comment-%s" % (id,comment.id) - if type=='Request': - return settings.BASE_URL+"/requests/%d/#comment-%s" % (id,comment.id) - -def post_comment(request,type,id,redirect_to): - """Try post the comment, containing in request.POST, - for object with given `type' and `id'. - If success, return (True, HttpResponseRedirect(redirect_to)), - else return (False, form), where `form' is form with errors.""" - - form = CommentForm(request.POST) - if form.is_valid(): - c = form.save(commit=False) - if 'title' not in form.cleaned_data or not form.cleaned_data['title']: - c.title = form.cleaned_data['text'][:20]+'...' - c.author = request.user - c.object_id = id - c.object_type = type - c.created = datetime.now() - c.save() - return True, HttpResponseRedirect(redirect_to) - else: - return False,form diff --git a/mgmt/views.py b/mgmt/views.py index f801cc2..8bdcb25 100644 --- a/mgmt/views.py +++ b/mgmt/views.py @@ -8,8 +8,8 @@ from django.contrib.auth.models import User from django.core.urlresolvers import reverse from django.conf import settings -# from django.utils.translation import activate -# activate(settings.LANGUAGE_CODE) + +from comments.models import Comment import debug from models import * @@ -23,7 +23,7 @@ from requests_views import * from documents_views import * from tasks_views import * from reports_views import * -from rss_views import * +# from rss_views import * ############# # Views diff --git a/settings.py b/settings.py index 0eeb094..faa3224 100644 --- a/settings.py +++ b/settings.py @@ -94,6 +94,7 @@ INSTALLED_APPS = ( 'kb', 'dburls', 'pygit', + 'comments', ) THEME = 'rtfm' diff --git a/urls.py b/urls.py index 2a9ae84..1abccab 100644 --- a/urls.py +++ b/urls.py @@ -12,7 +12,7 @@ urlpatterns = patterns('', (r'^docs/(\d+)/edit/$', "mgmt.views.edit_document"), (r'^docs/create/(\d+)/$', "mgmt.views.create_document"), (r'^bugs/state/(\d+)/$', 'mgmt.views.bugs_by_state'), - (r'^bugs/feed/$', 'mgmt.views.last_bugs'), +# (r'^bugs/feed/$', 'mgmt.views.last_bugs'), (r'^bugs/(\d+)/$', "mgmt.views.one_bug"), (r'^bugs/(\d+)/edit/$', "mgmt.views.edit_bug"), (r'^bugs/report/(\d+)/$', 'mgmt.views.bug_report'), @@ -24,7 +24,7 @@ urlpatterns = patterns('', (r'^tasks/(\d+)/$', 'mgmt.views.one_task'), (r'^tasks/(\d+)/edit/$', 'mgmt.views.edit_task'), (r'^tasks/create/(\d+)/$', 'mgmt.views.create_task'), - (r'^reports/feed/$', 'mgmt.views.last_reports'), +# (r'^reports/feed/$', 'mgmt.views.last_reports'), (r'^reports/(\d+)/$', 'mgmt.views.one_report'), (r'^reports/(\d+)/edit/$', 'mgmt.views.edit_report'), (r'^reports/create/(\d+)/$', 'mgmt.views.create_report'), @@ -32,7 +32,7 @@ urlpatterns = patterns('', (r'^message/(\d+)/delete/$', 'mgmt.views.delete_private_message'), (r'^preview/$', 'mgmt.views.message_preview'), (r'^comments/(\d+)/delete/$', 'mgmt.views.delete_comment'), - (r'^comments/feed/$', 'mgmt.views.last_comments'), +# (r'^comments/feed/$', 'mgmt.views.last_comments'), (r'^my/$', 'mgmt.views.my_page'), (r'^git/', include('pygit.urls')),